《The Linux Command Line》是一本Linux命令入门级图书,网上也有免费版下载,我这里只是按章节做一个简单的书中提到的命令的收集记录和翻译,也为了记录的简洁性略作调整。注意,部分概念说明和命令的使用技巧没有体现在本文中。
2. 导航命令
pwd
:打印当前工作目录cd [绝对或相对路径]
:切换工作目录
cd
:切换到用户主目录cd -
:切换到上一个工作目录cd ~用户名
:切换工作目录到对应用户名的主目录
ls [dir...]
:列出目录(可以同时指定多个目录)中的文件,如果没有指定目录,则列出当前工作目录的文件
-a(--all)
:列出所有文件,包括隐藏文件(以.
开头)-A(--almost-all)
:除了.
(当前目录)..
(上级目录)以外的所有文件-d(--directory)
:列出目录本身的信息而不是目录里的内容,通常与-l
合用-F(--classify)
:在列出的文件名后面追加一个指示字符,例如在文件夹后面追加“/”符号-h(human-readable)
:使“长格式”中的文件大小字段以用户易读的方式展现,而不仅仅是字节大小,通常与-l
合用-l
:以“长格式”展示信息,内容更丰富-r --reverse
:使排列顺序与原来相反-S
:按文件大小排序-t
:按文件最后修改时间排序
3. 探索系统
file 文件名
:显示文件类型信息less 文件名
:查看文件内容
- Page Up 或 b:向上翻页
- Page Down 或 space:向下翻页
- Up Arrow:向上滚动一行
- Down Arrow:向下滚动一行
- G:滚动到文件结尾
- 1G 或 g:滚动到文件开头
- /characters:查找指定字符
- n:要查找的下一个指定字符
- h:显示帮助信息
- q:退出less程序
4. 操作文件和目录
mkdir 目录...
:创建目录,可以是一个目录也可以同时创建多个目录cp item1 item2
:复制文件或目录(需要-r
选项)cp item... 目录
:复制文件(一个或多个)到指定目录
-a(--archive)
:复制文件或目录,并且复制保留原有的所属信息和权限属性,一般来说,复制文件或文件夹的属性是执行命令用户的属性-i(--interactive)
:当存在写覆盖时会提示用户进行确认。如果没有指定该选项,则是默认覆盖-r(--recursive)
:当复制文件夹时,需要指定该选项-u(--update)
:当复制若干文件到另一个目录时,只会复制目标目录没有的文件和比已有文件更新的文件-v(--verbose)
:显示复制的相关信息
mv item1 item2
:移动文件或目录mv item... 目录
:移动文件(一个或多个)到指定目录
-i(--interactive)
:当存在写覆盖时会提示用户进行确认。如果没有指定该选项,则是默认覆盖-u(--update)
:当移动若干文件到另一个目录时,只会移动目标目录没有的文件和比已有文件更新的文件-v(--verbose)
:显示移动的相关信息
rm item...
:删除文件或目录(需要-r
选项)
-i(--interactive)
:在删除文件前需要用户确认。如果没有指定该选项,则会直接删除没有提示-r(--recursive)
:当删除涉及目录时,需要指定该选项-f(--force)
:忽略不存在的文件,并且不给出提示。此选项会使--interactive
选项失效-v(--verbose)
:显示删除的相关信息
ln file link
:创建文件的硬链接ln -s item link
:创建文件或目录的符号(软)链接
5. 用命令工作
type 命令
:显示命令的类别(可执行程序,shell内建命令,shell函数或命令别名)which 可执行程序
:显示可执行程序的位置help shell内建命令
:显示shell內建命令帮助信息--help
:显示使用信息的选项,大部分命令都支持该选项man [section] 命令
:显示命令的用户手册,也可以指定显示某一节的用户手册信息。man使用less来显示,所以可以使用less中的相关操作apropos 命令
:模糊查询命令信息,相当与在man命令中使用-k
选项whatis 命令
:查询指定命令的简单描述info 命令
:查询命令的info内容alias 命令别名='命令或命令的组合'
:给命令或命令的组合(用分号分隔的命令)取别名。注意当shell会话关闭后,用命令行创建的别名就失效了。unalias 命令别名
:删除命令别名alias
:显示系统中存在的命令别名
6. 重定向
<(标准输入重定向
:将文件作为标准输入来源>(标准输出重定向); 2>(标准错误输出重定向); &>(标准输出和标准错误输出重定向)
:写入文件开头,即会清除原有文件内容>>(标准输出重定向); 2>>(标准错误输出重定向); &>>(标准输出和标准错误输出重定向)
:写入文件结尾,即追加新的内容cat [文件名...]
:读取一个或多个文件,并复制到标准输出文件,即打印到屏幕上。如果没有提供文件名作为参数,则从标准输入中读取,使用Ctrl+d作为EOF。|
:管道操作符,将一个命令的标准输出作为另一个命令的标准输入。sort [文件名]
:对文件内容排序。没有文件则从标准输入中读取。(很多命令在没有给出文件名参数时会从标准输入中读取。)uniq [文件名]
:去除重复的行,注意要先将输入内容排序。没有文件则从标准输入中读取。
-d
:显示重复的行
wc [文件名]
:打印对行、单词数、字节数的计数。没有文件则从标准输入中读取。
-l
:只显示行数
grep 模式 [文件名...]
:打印匹配模式的行。没有文件则从标准输入中读取。head [文件名]
:打印文件的前10行。没有文件则从标准输入中读取。
-n 数字
:显示指定打印的行数
tail [文件名]
:打印文件的最后10行。没有文件则从标准输入中读取。
-n 数字
:显示指定打印的行数-f
:实时显示指定文件内容,Ctrl+c用于终止显示
tee
:从标准输入中读取内容并同时输出到标准输出和文件中,例如ls /usr/bin | tee ls.txt | grep zip
7. 以shell的视角看世界
- 路径名扩展:可以在表示路径的字符串中使用通配符,shell会匹配所有符合条件的内容,形成不同的路径字符串
- 波浪线(
~
)扩展:~
代表当前用户的主目录,~用户名
代表对应用户的主目录 - 算数扩展(
$((算数表达式))
):只支持整数运算,可以嵌套,也可以使用括号。部分支持的运算符:加法(+),减法(-),乘法(*),整除(/),取模(%)和指数运算(**) - 大括号扩展:可以创建多个特定形式的字符串
- 形式1——
{str1,str2[,str3...]}
,{c1,c2[,c3...]}
:生成逗号隔开的字符串或字符(中间无空白字符),例如echo Front-{A,B,C}-Back
输出Front-A-Back Front-B-Back Front-C-Back
- 形式2——
{数字1..数字2}
,{字母1..字母2}
:生成指定范围内的数字或字母。例如echo Number_{1..5}
,对应的输出为Number_1 Number_2 Number_3 Number_4 Number_5
;还可以支持显示指定位数,空位由0补齐,echo {01..15}
输出为01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
;生成反序序列echo {Z..A}
,输出为Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
;还可以嵌套使用echo a{A{1,2},B{3,4}}b
,输出为aA1b aA2b aB3b aB4b
。
- 形式1——
- 参数扩展:显示变量对应的值,例如
echo $USER
输出me
- 命令替换(
$()
):将一个命令的输出作为另一个命令的参数,例如,ls -l $(which cp)
输出“-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp”。早期的shell使用反引号也有同样的功能,例如,ls -l `which cp`
输出-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
。 - word-splitting:去除多余的空白字符。例如:
echo this is a
test
,输出this is a test
- 双引号:使得全部的特殊字符被视作普通字符,失去了特殊的意义,除了
$
,\
(反斜杠),`
(反引号)之外。例如:ls -l "two words.txt"
,输出-rw-rw-r-- 1 me me 18 2016-02-20 13:03 two words.txt
。如果没有双引号,则会被视为两个参数。 - 单引号:使得所有的扩展都失效。例如:
echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
,输出text ~/*.txt {a,b} \$(echo foo) \$((2+2)) $USER
。 - 转义字符:使得具有特殊意义的字符变成普通字符。例如:
echo "The balance for user $USER is: \$5.00"
,输出The balance for user me is: $5.00
8. 高级键盘技巧
Ctrl-a
:移动光标到行首Ctrl-e
:移动光标到行尾Ctrl-f
:光标向前移动一个字符,和右箭头作用一样Ctrl-b
:光标向后移动一个字符,和左箭头作用一样Alt-f
:光标向前移动一个单词Alt-b
:光标向后移动一个单词Ctrl-l
:清除屏幕并且移动光标到左上角。与clear
命令作用一样Ctrl-d
:删除光标所在字符Ctrl-t
:交换光标所在字符与前一个字符的顺序Alt-t
:交换光标所在单词和前一个单词的顺序Alt-l
:将从光标处到单词结尾的字符转换为小写Alt-u
:将从光标处到单词结尾的字符转换为大写Ctrl-k
:删除光标处到行尾的字符Ctrl-u
:删除光标前一个字符到行首的字符Alt-d
:删除光标到单词结尾的字符Alt-Backspace
:删除光标前一个位置到单词开头处的字符。如果光标已经处于单词的开头,则删除前一个单词Ctrl-y
:把kill-ring缓冲区中的文本粘贴到光标前Alt-?
:显示所有可能的自动补齐列表。在大多数系统上,可以通过按第二次tab键来实现。(该快捷键需要结合Shift键)Alt-*
:直接插入所有可能的补全项。当你需要使用多个匹配项时会很有用。(该快捷键需要结合Shift键)
9. 权限
id
:显示用户身份信息chmod <[ugoa][+-=][rwx]|表示模式的三个八进制数字> 文件名
:改变文件的模式umask
:显示默认权限umask 四个八进制数字
:设置默认权限su [-[l]] [用户名]
:以另一个用户的身份来启动shell。-l
选项可以缩写为-
,如果包含该选项,择该用户的运行环境会被加载,工作目录也将更改为该用户的主目录。如果没有给出用户名,则默认用户名是超级用户。exit
命令用于退出。su -c '命令'
:以超级用户身份执行单条命令,输入的密码是超级用户的密码sudo 命令
:以超级用户身份执行命令,输入的密码是用户自己的密码chown [ower][:[group]] 文件...
:改变文件或目录所属的用户和组passwd [用户名]
:更改用户密码。如果不指定用户名,则是更改当前用户的密码
10. 进程
ps [选项]
:查看进程信息。常用方法为ps aux
(选项前不带连字符,将使命令以BSD模式运行)。top
:动态查看进程信息。ps命令显示的是机器进程状态的快照。Ctrl-C
:终止程序运行Ctrl-Z
:暂停程序运行命令 &
:让程序在后台运行jobs
:显示作业状态列表(可以显示后台进程)fg %作业编号
:将指定作业放到前台运行bg %作业编号
:将指定作业放到后台运行kill [-信号名或编号] PID...
:向进程发送指定信号killall [-u 用户名] [-信号名或编号] 进程名...
:向指定名称的进程发送信号,还可以指定用户名pstree
:以树状形式输出进程列表,该模式显示了进程间的父子关系vmstat [数字]
:输出系统资源使用情况,可以指定更新的频率的数字,以秒为单位。如果不指定数字,则只显示一份快照xload
:图像化显示系统负载情况tload
:在终端上显示系统负载情况