Linux的知识备忘
最近在复习Linux的基础知识,这篇文章纪录一些我认为较有用的小知识点,相互之间没有必然联系。
目录
| 目录 | 说明 |
|---|---|
| / | 根目录,万物起源 |
| /bin | 系统启动和运行所必须的二进制程序 |
| /boot | Linux内核和启动加载程序 |
| /dev | 设备结点的特殊目录 |
| /etc | 这个目录包含所有系统层面的配置文件 |
| /home | 在通常的配置环境下,系统会在/home下给每个用户分配一个目录 |
| /lib | 核心系统程序所需的库文件 |
| /mnt | 在早些的Linux系统中,/mnt目录包含可移除设备的挂载点 |
| /proc | Linux内核维护的虚拟文件系统,用于了解内核信息 |
| /root | root用户的家目录 |
| /sbin | “系统”二进制文件,通常为root用户保留 |
| /tmp | 临时目录,重启系统会清空该目录 |
| /usr | 普通用户所需要的所有程序和文件 |
| /usr/bin | 系统安装的可执行程序 |
| /usr/lib | 由/usr/bin目录中的程序所用的共享库 |
| /usr/sbin | 系统安装的管理程序 |
| /usr/share | 由/usr/bin目录中的程序使用的共享数据 |
| /usr/share/doc | /usr/bin目录中程序的一些文档 |
| /var | 可能需要改动的文件存储的地方,如数据库、日志、邮件等文件 |
| /var/log | 日志文件目录 |
命令
在shell中我们依靠输入命令执行所需程序,如果输入有误经常会看到command not found错误,那如何知道一个命令不存在呢?
在linux中,命令有以下四种类型:
- 可执行程序
与/bin、/sbin等目录中的文件一样,包括二进制可执行文件与脚本文件
- 内部命令
内建于shell自身的命令,称为shell内部命令(builtins),例如cd、pwd、type等
- shell函数
小规模的shell脚本,它们混合到环境变量中,例如在.bashrc中定义的函数
- 命令别名
定义自己的命令,建立在其它命令之上,通过alias定义
如果在shell中输入的命令与上述四种类型都不匹配的话,就会报command not found错误。平时我们可以使用type命令查看一个命令属于哪一种类型,比如type type输出’type is a shell builtin’。
字符展开
字符展开是对命令参数的一种解析行为,比如echo *这个命令并不会在标准输出上输出’*’,而是输出所在目录的所有文件名,这就是一种字符展开行为。
字符展开主要包含以下几种:
- 路径名展开
前面讲到的
echo *就属于路径名展开,*表示任意字符,所以echo *采用路径名展开的方式能够匹配当前目录下的所有文件,而echo A*则会输出当前目录所有A开头的文件名,除了*之外,还有一些其它匹配符号如:?、[characters]、[[:digit:]]等
- 波浪线展开
~在shell中会被展开为用户的家目录,如root用户echo ~会输出/root,而cd ~在被展开后也就是cd /root
- 算术表达式展开
使用
$((expression))的计算表达式的值,如echo $((1 + 1))会输出2
- 花括号展开
花括号展开更像是范围展开,如
echo {1..10}会输出1到10的数字,而echo {a..z}会输出a到z的字母
- 参数展开
参数展开也可称为变量展开,
echo $1 x输出x,echo $USER输出当前用户名,因为$USER是一个环境变量,这个特性在Shell脚本中非常有用
- 命令替换
一个命令的执行结果传递给另外一个命令,
echo $(ls)输出当前目录下的文件名,除了$()形式外还可以使用符号`包裹命令:echo \ls``
字符展开非常有用,但在特殊场景下我们也许并不希望展开,这时可以使用双引号、单引号与转义字符的方式规避字符展开特性,举例如下:
echo "$USER"
# 在双引号中,$、\与`依旧具有展开功能,所以这里会输出当前用户名
echo "~"
# ~失去展开功能,这里输出'~'
echo '$USER'
# 禁止所有展开,输出'$USER'
echo \$USER
# 输出'$USER'
load average
使用top、uptime与w命令可以看到load average的三个数字,分别表示1分钟、5分钟与15分钟的单位时间内使用+等待CPU的进程数平均值,这个值接近CPU核数说明CPU利用比较充分,如果超出则表示CPU负载过高,系统处于忙碌状态,长时间处于忙碌状态系统有可能出现异常。
Shell提示符
每次输入命令的前面都展示有一部分展示信息,称为Shell提示符,默认内容格式与’[root@linux ~]#'类似,其中包含了四个信息:用户名(root)、主机名(linux)、当前工作目录名(~)、身份(root)。
Shell提示符的格式可通过环境变量PS1设置,通过echo $PS1可以打印当前的所采用的格式,’[root@linux ~]#‘所对应的PS1为’[\u@\h \W]$’,其中\u、\h、\w与$就是对应四个信息的变量表示。
我们可以通过修改PS1的值定制自己的Shell提示符,比如在自己的Shell提示符中显示当前工作目录的Git Branch:
# mac ~/.bash_profile
export PS1="[\h:\W\[\033[33m\]$(git_branch) \[\033[37m\]\A\[\033[00m\]]$"
# shell function
git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
效果:’[sha:amsimple(master) 10:24]$ ',其中master就是目录amsimple中Git当前的Branch。
常用文本处理命令
| 命令 | 功能 |
|---|---|
| cat | 连接文件并且打印到标准输出 |
| sort | 文本行排序 |
| uniq | 报告或者省略重复行 |
| cut | 从每行中删除文本区域 |
| paste | 合并文件文本行 |
| join | 基于某个共享字段来联合两个文件的文本行 |
| comm | 逐行比较两个有序的文件 |
| diff | 逐行比较文件 |
| patch | 给原始文件打补丁 |
| tr | 翻译或删除字符 |
| sed | 用于筛选和转换文本的流编辑器 |
本文深入探讨了Linux系统的目录结构,解释了根目录、bin、boot等关键目录的作用,并详细介绍了常见命令的类型与使用,如可执行程序、内部命令、shell函数及命令别名。同时,文章还讲解了字符展开、loadaverage的概念与Shell提示符的定制方法。
86

被折叠的 条评论
为什么被折叠?



