4839 words
24 minutes
Linux Command Line
2025-08-27

简单命令#

查看磁盘剩余空间的数量,输入 df

显示空闲内存的数量,输入命令 free

文件/目录#

ls可以接两个文件夹

ls -lt —reverse 按照时间逆序

表 4-1: ls 命令选项

选项长选项描述
-a—all列出所有文件,甚至包括文件名以圆点开头的默认会被隐藏的隐藏文件。
-d—directory通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身。 把这个选项与 -l 选项结合使用,可以看到所指定目录的详细信息,而不是目录中的内容。
-F—classify这个选项会在每个所列出的名字后面加上一个指示符。例如,如果名字是 目录名,则会加上一个’/‘字符。
-h—human-readable当以长格式列出时,以人们可读的格式,而不是以字节数来显示文件的大小。
-l以长格式显示结果。
-r—reverse以相反的顺序来显示结果。通常,ls 命令的输出结果按照字母升序排列。
-S命令输出结果按照文件大小来排序。
-t按照修改时间来排序。

file filename 查看file的详细信息

less 允许查看文件 g为首行,n查找,q退出

表 4-4: Linux 系统中的目录

目录评论
/boot包含 Linux 内核,最初的 RMA 磁盘映像(系统启动时,由驱动程序所需),和 启动加载程序。有趣的文件: /boot/grub/grub.conf or menu.lst, 被用来配置启动加载程序。 /boot/vmlinuz,Linux 内核。
/dev这是一个包含设备结点的特殊目录。“一切都是文件”,也使用于设备。 在这个目录里,内核维护着它支持的设备。
/etc这个目录包含所有系统层面的配置文件。它也包含一系列的 shell 脚本, 在系统启动时,这些脚本会运行每个系统服务。这个目录中的任何文件应该是可读的文本文件。有意思的文件:虽然/etc 目录中的任何文件都有趣,但这里只列出了一些我一直喜欢的文件: /etc/crontab, 定义自动运行的任务。 /etc/fstab,包含存储设备的列表,以及与他们相关的挂载点。/etc/passwd,包含用户帐号列表。
/lost+found每个使用 Linux 文件系统的格式化分区或设备,例如 ext3文件系统, 都会有这个目录。当部分恢复一个损坏的文件系统时,会用到这个目录。除非文件系统 真正的损坏了,那么这个目录会是个空目录。
/media在现在的 Linux 系统中,/media 目录会包含可移除媒体设备的挂载点, 例如 USB 驱动器,CD-ROMs 等等。这些设备连接到计算机之后,会自动地挂载到这个目录结点下。
/opt这个/opt 目录被用来安装“可选的”软件。这个主要用来存储可能 安装在系统中的商业软件产品。
/proc这个/proc 目录很特殊。从存储在硬盘上的文件的意义上说,它不是真正的文件系统。 反而,它是一个由 Linux 内核维护的虚拟文件系统。它所包含的文件是内核的窥视孔。这些文件是可读的, 它们会告诉你内核是怎样监管计算机的。
/sbin这个目录包含“系统”二进制文件。它们是完成重大系统任务的程序,通常为超级用户保留。
/tmp这个/tmp 目录,是用来存储由各种程序创建的临时文件的地方。一些配置,导致系统每次 重新启动时,都会清空这个目录。
/usr在 Linux 系统中,/usr 目录可能是最大的一个。它包含普通用户所需要的所有程序和文件。
/usr/bin/usr/bin 目录包含系统安装的可执行程序。通常,这个目录会包含许多程序。
/usr/local这个/usr/local 目录,是非系统发行版自带,却打算让系统使用的程序的安装目录。 通常,由源码编译的程序会安装在/usr/local/bin 目录下。新安装的 Linux 系统中,会存在这个目录, 但却是空目录,直到系统管理员放些东西到它里面。
/usr/sbin包含许多系统管理程序。
/usr/share/usr/share 目录包含许多由/usr/bin 目录中的程序使用的共享数据。 其中包括像默认的配置文件,图标,桌面背景,音频文件等等。
/usr/share/doc大多数安装在系统中的软件包会包含一些文档。在/usr/share/doc 目录下, 我们可以找到按照软件包分类的文档。
/var除了/tmp 和/home 目录之外,相对来说,目前我们看到的目录是静态的,这是说, 它们的内容不会改变。/var 目录是可能需要改动的文件存储的地方。各种数据库,假脱机文件, 用户邮件等等,都驻扎在这里。
/var/log这个/var/log 目录包含日志文件,各种系统活动的记录。这些文件非常重要,并且 应该时时监测它们。其中最重要的一个文件是/var/log/messages。注意,为了系统安全,在一些系统中, 你必须是超级用户才能查看这些日志文件。
通配符意义
*匹配任意多个字符(包括零个或一个)
?匹配任意一个字符(不包括零个)
[characters]匹配任意一个属于字符集中的字符
[!characters]匹配任意一个不是字符集中的字符
[[:class:]]匹配任意一个属于指定字符类中的字符
字符类意义
[:alnum:]匹配任意一个字母或数字
[:alpha:]匹配任意一个字母
[:digit:]匹配任意一个数字
[:lower:]匹配任意一个小写字母
[]匹配任意一个大写字母

cp /mv#

cp

选项意义
-a, —archive复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。
-i, —interactive在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
-r, —recursive递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
-u, —update当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
-v, —verbose显示翔实的命令操作信息
cp file1 file2 dir1多个文件cp
-a, —archive复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。

mv的i u v与cp相同

命令#

  1. type command 显示command 的用法

  2. man command 手册

    手册页的顺序

    章节内容
    1用户命令
    2程序接口内核系统调用
    3C 库函数程序接口
    4特殊文件,比如说设备结点和驱动程序
    5文件格式
    6游戏娱乐,如屏幕保护程序
    7其他方面
    8系统管理员命令

    有时候,我们需要查看参考手册的特定章节,从而找到我们需要的信息。 如果我们要查找一种文件格式,而同时它也是一个命令名时,这种情况尤其正确。 没有指定章节号,我们总是得到第一个匹配项,可能在第一章节。我们这样使用 man 命令, 来指定章节号:

    man section search_term
    

    例如:

    [me@linuxbox ~]$ man 5 passwd
    

    命令运行结果会显示文件 /etc/passwd 的文件格式说明手册。

  3. 可以把多个命令放在同一行上,命令之间 用”;”分开

  4. alias unalias

重定向#

将错误也重定向到同一个文件

ls -l /bin/usr &> ls-output.txt

cat输入完之后按ctrl+d

uniq删除重复行,uniq -d看到重复行

ls /bin /usr/bin | sort | uniq -d | less

wc(字计数)命令是用来显示文件所包含的行,字和字节数 wc -l只显示行数

head -n 5
tail -n 5
tail -f /var/log/messages

使用”-f”选项,tail 命令继续监测这个文件,当新的内容添加到文件后,它们会立即 出现在屏幕上。这会一直继续下去直到你输入 Ctrl-c。

tee - 从 Stdin 读取数据,并同时输出到 Stdout 和文件

... | tee output.txt | ...

括号展开#

echo Number_{1..5}
echo {Z..A}
echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b

展开变量列表

printenv | less

$()把括号内的值替换括号

如果你把文本放在双引号中, shell 使用的特殊字符,除了 $\ (反斜杠),和 `(倒引号)之外, 则失去它们的特殊含义,被当作普通字符来看待。

如果需要禁止所有的展开,我们使用单引号

[me@linuxbox ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/me/ls-output.txt a b foo 4 me
[me@linuxbox ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt   {a,b} foo 4 me
[me@linuxbox ~]$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt  {a,b} $(echo foo) $((2+2)) $USER

echo 命令带上 ‘-e’ 选项,能够解释转义序列

键盘操作#

表9-1: 光标移动命令

按键行动
Ctrl-a移动光标到行首。
Ctrl-e移动光标到行尾。
Ctrl-f光标前移一个字符;和右箭头作用一样。
Ctrl-b光标后移一个字符;和左箭头作用一样。
Alt-f光标前移一个字。
Alt-b光标后移一个字。
Ctrl-l清空屏幕,移动光标到左上角。clear 命令完成同样的工作。

表9-2: 文本编辑命令

按键行动
Ctrl-d删除光标位置的字符。
Ctrl-t光标位置的字符和光标前面的字符互换位置。
Alt-t光标位置的字和其前面的字互换位置。
Alt-l把从光标位置到字尾的字符转换成小写字母。
Alt-u把从光标位置到字尾的字符转换成大写字母。

表9-3: 剪切和粘贴命令

按键行动
Ctrl-k剪切从光标位置到行尾的文本。
Ctrl-u剪切从光标位置到行首的文本。
Alt-d剪切从光标位置到词尾的文本。
Alt-Backspace剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。
Ctrl-y把剪切环中的文本粘贴到光标位置。

用户#

setuid 位(八进制4000)。当应用到一个可执行文件时,它把有效用户 ID 从真正的用户(实际运行程序的用户)设置成程序所有者的 ID。比如我来跑root的文件,执行的用户是root

setgid 位(八进制2000),这个相似于 setuid 位,把有效用户组 ID 从真正的 用户组 ID 更改为文件所有者的组 ID。如果设置了一个目录的 setgid 位,则目录中新创建的文件 具有这个目录用户组的所有权,而不是文件创建者所属用户组的所有权。对于共享目录来说, 当一个普通用户组中的成员,需要访问共享目录中的所有文件,而不管文件所有者的主用户组时, 那么设置 setgid 位很有用处。

sudo chmod g+s /usr/local/share/Music

这会保证在目录中新建的文件用户组是目录的用户组

此外系统中默认的掩码值是0022,这会禁止用户组成员编辑属于同组成员的文件。umask 0002

chmod 命令符号表示法

u”user”的简写,意思是文件或目录的所有者。
g用户组。
o”others”的简写,意思是其他所有的人。
a”all”的简写,是”u”, “g”和“o”三者的联合。

chmod 符号表示法实例

u+x为文件所有者添加可执行权限。
u-x删除文件所有者的可执行权限。
+x为文件所有者,用户组,和其他所有人添加可执行权限。 等价于 a+x。
o-rw除了文件所有者和用户组,删除其他人的读权限和写权限。
go=rw给群组的主人和任意文件拥有者的人读写权限。如果群组的主人或全局之前已经有了执行的权限,他们将被移除。
u+x,go=rw给文件拥有者执行权限并给组和其他人读和执行的权限。多种设定可以用逗号分开。
su -c 'command'

使用这种模式,命令传递到一个新 shell 中执行。把命令用单引号引起来很重要,因为我们不想 命令在我们的 shell 中展开,但需要在新 shell 中展开。

更改文件所有者和用户组

chown [owner][:[group]] file...
passwd [user]改密码

进程#

ps aux

BSD 风格的 ps 命令列标题

标题意思
USER用户 ID. 进程的所有者。
%CPU以百分比表示的 CPU 使用率
%MEM以百分比表示的内存使用率
VSZ虚拟内存大小
RSS进程占用的物理内存的大小,以千字节为单位。
START进程运行的起始时间。若超过24小时,则用天表示。

命令之后,加上”&”字符 放到后台运行

jobs 列出从终端中启动的任务。

放到前台

fg %1 (job number)

ctrl+Z 停止,可以用bg移入后台

编号名字含义
1HUP挂起。这是美好往昔的痕迹,那时候终端机通过电话线和调制解调器连接到 远端的计算机。这个信号被用来告诉程序,控制的终端机已经“挂起”。 通过关闭一个终端会话,可以说明这个信号的作用。发送这个信号到终端机上的前台程序,程序会终止。许多守护进程也使用这个信号,来重新初始化。这意味着,当发送这个信号到一个守护进程后, 这个进程会重新启动,并且重新读取它的配置文件。Apache 网络服务器守护进程就是一个例子。
2INT中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。
9KILL杀死。这个信号很特别。鉴于进程可能会选择不同的方式,来处理发送给它的 信号,其中也包含忽略信号,这样呢,从不发送 Kill 信号到目标进程。而是内核立即终止 这个进程。当一个进程以这种方式终止的时候,它没有机会去做些“清理”工作,或者是保存劳动成果。 因为这个原因,把 KILL 信号看作杀手锏,当其它终止信号失败后,再使用它。
15TERM终止。这是 kill 命令发送的默认信号。如果程序仍然“活着”,可以接受信号,那么 这个信号终止。
18CONT继续。在停止一段时间后,进程恢复运行。
19STOP停止。这个信号导致进程停止运行,而没有终止。像 KILL 信号,它不被 发送到目标进程,因此它不能被忽略。
3QUIT退出
11SEGV段错误。如果一个程序非法使用内存,就会发送这个信号。也就是说, 程序试图写入内存,而这个内存空间是不允许此程序写入的。
20TSTP终端停止。当按下 Ctrl-z 组合键后,终端发送这个信号。不像 STOP 信号, TSTP 信号由目标进程接收,且可能被忽略。
28WINCH改变窗口大小。当改变窗口大小时,系统会发送这个信号。 一些程序,像 top 和 less 程序会响应这个信号,按照新窗口的尺寸,刷新显示的内容。

shell环境#

printenv和set可以查看环境变量

建议在 .bash_profile 里加一句让它自动加载 .bashrc

if [ -f ~/.bashrc ]; then     
    . ~/.bashrc 
fi

环境变量放在 .bash_profile,而别名、函数、shell 选项等放在 .bashrc(一般只在交互式终端中使用)。

$PS1存放了你的提示符的值

网络#

netstat -ie看接口,-r看路由表

查找文件#

locate 程序快速搜索路径名数据库,并且输出每个与给定字符串相匹配的文件名。比

find#

  1. find ~ -type d/f -name ”*.JPG” -size +1M

find 测试条件

测试条件描述
-cmin n匹配的文件和目录的内容或属性最后修改时间正好在 n 分钟之前。 指定少于 n 分钟之前,使用 -n,指定多于 n 分钟之前,使用 +n。
-cnewer file匹配的文件和目录的内容或属性最后修改时间早于那些文件。
-ctime n匹配的文件和目录的内容和属性最后修改时间在 n*24小时之前。
-empty匹配空文件和目录。
-group name匹配的文件和目录属于一个组。组可以用组名或组 ID 来表示。
-iname pattern就像-name 测试条件,但是不区分大小写。
-inum n匹配的文件的 inode 号是 n。这对于找到某个特殊 inode 的所有硬链接很有帮助。
-mmin n匹配的文件或目录的内容被修改于 n 分钟之前。
-mtime n匹配的文件或目录的内容被修改于 n*24小时之前。
-name pattern用指定的通配符模式匹配的文件和目录。
-newer file匹配的文件和目录的内容早于指定的文件。当编写 shell 脚本,做文件备份时,非常有帮助。 每次你制作一个备份,更新文件(比如说日志),然后使用 find 命令来决定自从上次更新,哪一个文件已经更改了。
-nouser匹配的文件和目录不属于一个有效用户。这可以用来查找 属于删除帐户的文件或监测攻击行为。
-nogroup匹配的文件和目录不属于一个有效的组。
-perm mode匹配的文件和目录的权限已经设置为指定的 mode。mode 可以用 八进制或符号表示法。
-samefile name相似于-inum 测试条件。匹配和文件 name 享有同样 inode 号的文件。
-size n匹配的文件大小为 n。
-type c匹配的文件类型是 c。
-user name匹配的文件或目录属于某个用户。这个用户可以通过用户名或用户 ID 来表示。
 find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

-and -or -not

find预定义操作#

预定义的 find 命令操作

操作描述
-delete删除当前匹配的文件。
-ls对匹配的文件执行等同的 ls -dils 命令。并将结果发送到标准输出。
-print把匹配文件的全路径名输送到标准输出。如果没有指定其它操作,这是 默认操作。
-quit一旦找到一个匹配,退出。
-exec command {} ;-exec rm ’{}’ ’;’ 因为;和{}需要被转义
-ok每次exec会询问用户

通过把末尾的分号改为加号,就激活了 find 命令的一个功能,把搜索结果结合为一个参数列表, 然后执行一次所期望的命令

xargs它从标准输入接受输入,并把输入转换为一个特定命令的 参数列表

Linux Command Line
https://tubehao.github.io/blog/posts/tools/linuxcommandline/
Author
tubehao
Published at
2025-08-27