这是《Linux命令行大全》这本书第一部分的笔记,笔记分节不完全参考书中叙述,以思维导图为主,辅以导图中无法存放的文字记录。
文章目录
思维导图
阿里云服务器
因为自己的破电脑安装虚拟机问题有点大,想起来去年用学生价买了一年阿里云轻量应用服务器,就直接上云操作了。在阿里云控制台远程连接进去时是普通用户,进的是/home目录,用xshell登录root账号后所处目录是/root,在此记录一下。顺手在/home文件夹下下载了Nginx并且解压安装了,有一丢丢成就感(。
参考文章:Nginx 极简入门教程!
以下内容大标题的区分按照书中目录排列,方便查看对应章节
第一部分 学习shell
第1~2章:shell是什么/导航
shell是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序,改程序来自于称之为 bash 的 GNU 项目。
终端仿真器
当时用图形用户界面时,需要另外一种叫做终端仿真器的程序与shell进行交互,启动终端仿真器后会出现如下所示:
[root@xxxxxxxxxxxxxxx ~]#
在阿里云的终端连接窗口和打开 xshell 后都会出现这样的语句,这被称为shell提示符,通常包括 username@machinename,其后是当前工作目录。最后附带的 # 符号如果是 $ ,则意味着当前登录用户是普通用户,不是根用户。
文件系统树
类Unix操作系统(比如Linux)与Windows系统一样,将文件以分层目录结构的方式组织起来,该树形结构目录可能包含文件和其他目录。
在Linux中,无论多少驱动器或存储设备与计算机相连,通常只有一个文件系统树。根据系统管理员的设置,存储设备将会连接(挂载)到文件系统树的不同位置。系统管理员要负责系统的维护。
第一次登录系统时(或是启动 xshell 终端仿真器会话时),当前工作目录被设置成主目录。每个用户账号都有一个主目录,作为普通用户操作时,这是唯一一个允许用户写文件的地方。
简单命令
date :显示当前系统时间和日期
cal:显示当月的月历
df :查看磁盘驱动器当前可用空间
free:显示可用内存
exit:结束终端会话
pwd:查看当前工作目录
cd:改变目录
- cd xxx:进入到xxx文件夹中
- cd:将工作目录改变为登陆后所在的主目录
- cd -username:将工作目录改为username的主目录,例如,cd-bob 将目录改变为用户bob的主目录
ls:列出目录内容
注意
- 以“.”字符开头的文件名表示这些文件是隐藏的,输入 ls -a 才能显示
- Linux中区分大小写,file1和File1分别指向不同的文件
- 文件名中不要嵌入空格,否则会使很多命令行任务的实现变得困难。
第3章:Linux系统
ls:列出目录内容
输入ls可以查看目录内容,确定各种重要文件和目录的属性,可以查看当前工作目录中包含的一系列文件和子目录。
- ls/文件夹:指定要显示的目录
- ls [A文件夹] ~/ B文件夹:指定多个目录,如列出当前A文件夹到B文件夹中的内容,如果A文件夹不指定,则表示列出主目录下截止到B文件夹下的所有文件
- ls -l (或者ll):以长格式显示输出来得到更多细节
选项和参数
通常,命令后面跟有一个或多个选项,带有不同选项的命令其功能也不一样。此外,命令后面还会跟有一个或多个参数,这些参数是命令作用的对象。所以大部分命令看起来如下所示:
command -options argument
如:
- ls -lt: “l”产生长格式输出,“t”表示以文件修改时间进行排序,-lt表示按修改时间顺序长格式输出目录
- ls -lt -reverse : “-reverse”表示以相反的顺序输出
长格式输出的数据里显示了许多信息,以下表格举例:
字段 | 列数 | 含义 |
---|---|---|
-rw-r-r– | 1 | 对文件的访问权限。后面详述 |
1 | 2 | 文件硬链接数目。链接内容后面详述 |
root | 3 | 文件所有者的用户名 |
root | 4 | 文件所属用户组的名称 |
32059 | 5 | 以字节数表示的文件大小 |
Jun 5 21:49 | 6 | 上次修改文件的日期和时间 |
auto | 7 | 文件名 |
file:确定文件类型
file 文件名: 打印出文件内容的简短说明,例如 file Makefile
文件的种类有很多,在类Unix操作系统中,有个普遍的观念:“所有东西都是一个文件”。
less:查看文件内容
包含系统设置的多数配置文件都是以这种格式存储的,阅读这些文件有利于更好地理解系统是如何工作的。此外许多实际程序(即脚本)也是以这种格式存储的。
less命令的使用方式:
less 文件名:查看文件,例如,想要查看定义了系统用户账户的文件,可以输入: less /etc/password
一旦 less 程序运行起来,就可以查看文件内容,如果文件不止一页,还可以上下滚动文件。
以下表格里是 less 程序最常用的几个命令。以 less 文件 命令 的方式使用,出自《Linux命令行大全》。实际操作时可以按 h 查看具体的操作提示,表后以图片附上。
命令 | 功能 |
---|---|
PAGE UP或b | 后翻一页 |
PAGE DOWN或Spacebar | 前翻一页 |
向上箭头键 | 向上一行 |
向下箭头键 | 向下一行 |
G | 跳转到文本文件的末尾 |
1G或g | 跳转到文本文件的开头 |
charecters | 向前查找指定的字符串 |
n | 向前查找下一个出现的字符串,这个字符串是之前所指定查找的 |
h | 显示帮助屏幕 |
q | 退出less |
Linux一些目录简介
符号链接
指向文件,如果有一个文件被许多其他文件引用或依赖,而其内容或版本又会经常更新,导致文件名会变动,则使用符号连接可以创建一个中介,在文件有改动时直接改动符号链接文件的指向即可。
第4章 操作文件与目录
主要命令:
cp:复制文件和目录
mv :移动或重命名文件和目录
mkdir:创建目录
rm:移除文件和目录
ln:创建硬链接和符号链接
通配符
用于快速指定一组文件名,也叫文件名替换,允许用户依据字符模式选择文件名,下标列出了通配符以及其所选择的对象。
通配符 | 匹配项 |
---|---|
* | 匹配任意多个字符(包括0个和1个) |
? | 匹配任意单个字符(不包括0个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不属于字符集中的字符 |
[[:class]] | 匹配任意一个属于指定字符类中的字符 |
通配符的使用使得为文件名构建复杂的筛选标准成为可能。
具体命令
- mkdir:创建
- mkdir xx [xx]:创建目录,可带一个或多个参数,表示创建一个或多个目录
- cp :复制
- cp file1 file2:将 file1 复制到 file2。如果 file2 存在,则会被 file1 的内容覆盖
- cp -i file1 file2:同上,区别在于 file2 存在时,覆盖前通知用户确认
- cp file1 file2 dir1:将 file1 和 file2 复制到目录 dir1 里,dir1 必须已经存在
- cp dir1/* dir2:通过使用通配符,将 dir1 中的所有文件复制到 dir2 中。dir2必须已经存在
- cp -r dir1 dir2:将 dir1 目录(及其内容)复制到 dir2 目录中,如果 dir2 不存在,创建 dir2,且包含于 dir1 目录相同的内容
- mv:移动
- mv file1 file2:将 file1 移动到 file2。如果 file2 存在,则会被 file1的内容覆盖。如果 file2 不存在,则创建 file2。无论哪一种情况,file1 不再存在
- mv -i file1 file2:同上,仅当 file2 存在时,覆盖之前通知用户确认
- mv file1 file2 dir1:将 file1 和 file2 移动到目录 dir1 下。dir1必须已经存在
- mv dir1 dir2:将目录 dir1(和其内容)移动到目录 dir2 下。如果 dir2 不存在,则创建它,并且将 dir1 目录下的内容移动到 dir2 下,同时删除 dir1
- 相关选项
- -i,-interactive:覆盖一个已经存在的文件之前,提示用户确认。如果没有制定该选项,mv会默认覆盖文件【xshell实测,如果被覆盖目录里有同名文件或文件夹,不论有没有加 -i 都会有提示,以 y/n 进行选择】
- -u,-update:将文件从一个目录移动到另一个目录,之一懂那些目标目录中不存在的文件或是目标目录里相应文件的更新文件
- -v,-verbose:移动文件时显示信息性消息
- rm :删除
- rm file1:在不提示用户的情况下,删除 file1
- rm -i file1:删除 file1 前,提示用户确认
- rm -r file1 dir1:删除 file1、dir1以及他们的内容
- rm -rf file1 dir1:同上,当 file1 或 dir1 不存在时,rm 仍会继续执行,并且不提示用户
- 选项
- -i,-interactive:删除一个已存在的文件前,提示用户确认。如果没有指定这个选项,rm 命令会默认删除文件
- -r,-recursive:递归地删除目录。即删除的目录有子目录时,需要制定此选项【xshell实测使用 rm -r dir 时会逐层提示是否descend文件夹及remove文件夹】
- -f,-force:忽略不存在的文件并无需提示确认。该选项会覆盖-interactive选项
- -v,-verbose:删除文件时显示信息性消息
- ln :创建链接
- ln file link:创建硬链接
- ln - s item link:创建符号链接,item可以是文件,也可以是目录
硬链接
硬链接是最初Unix用来创建链接的方式,默认情况下每个文件有一个硬链接,该硬链接会给文件起名字。当创建一个硬链接的时候,也为这个文件创建了一个额外的目录条目。
局限:
- 不能引用自身文件系统之外的文件,即无法引用于该链接不在同一磁盘分区的文件
- 无法引用目录
- 没有特别的链接指示说明
- 当硬链接被删除时,只删除了这个链接,文件本身的内容还在,即空间没有释放,除非该文件的所有链接都被删除了
符号链接
符号链接是为了克服硬链接的局限性而创建的。符号链接会创建一个特殊类型的文件,里面包含了指向引用文件或目录的文本指针,
特点:
- 如果将一些东西写进符号链接里,那么这些东西同样也写进了引用文件
- 删除一个符号链接时,其指向的文本文件仍存在
- 如果先于符号链接之前删除文件,则该符号链接不指向任何文件,被称为“坏链接”
第5章 命令的使用
相关命令:
type:说明如何解释命令名
which:显示会执行哪些可执行程序
man:显示命令的手册页
apropos:显示一系列合适的命令
info:显示命令的info条目
whatis:显示一条命令的简述
alias:创建一条命令的别名
上面除了 alias 创建新命令外,其他使用方法都是直接在命令后面加上 command 命令。
alias的用法:
alias newCommand='com1;com2;com3’
不同命令之间使用分号区分,等号左右没有空格
第6章 重定向
I/O是输入/输出的缩写,这个功能可以把命令行的输入重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中。如果将多个命令行关联起来,将形成强大的命令——管道。
相关命令:
cat:合并文件
sort:对文本进行排序
uniq:报告或删除文件中的重复行
wc:打印文件中的换行符、字和字节的个数
grep:打印匹配行
head:输出文件的第一部分内容
tail:输出文件的最后一部分内容
tee:读取标准输入的数据,并将其内容输出到标准输出和文件中
标准输入、标准输出和标准错误
标准输入 standard input(stdin):得到输入的设备,默认连接到键盘
标准输出 standard output(stdout):存储程序运行结果的特殊文件,默认输出到屏幕上且不会被保存
标准错误 standard error(stderr):存储程序的状态信息,默认输出到屏幕上且不会被保存
标准输出重定向
使用重定向操作符“>”,后截文件名,就可以把标准输出重定向到另一个文件中,例如:ls -l >ls-output.txt 。ls-output.txt文件会自动创建。
如果命令执行时出错,比如没有该目录或该文件,则运行上述命令后会返回错误信息在屏幕上,且 ls-output.txt 这个文件的内容会被覆盖。这是因为此时还没有定义标准错误重定向
如果要使新执行的命令结果从文件的尾部开始输出,则使用“>>”,如:ls -l >>ls-output.txt
标准错误重定向
标准错误的文件描述符是 2,这是shell在内部用来标记标准输入、标准输出和标准错误这三种文件的索引编号,所以重定向时使用“2>”即可,如:ls -l 2>ls-2outerror.txt
将标准输出和标准错误重定向到同一个文件
使用“&>”标记符可以将两种输出都重定向到一个文件中,例如: ls -l &>ls-outerr.txt
处理不想要的输出
使用“2>/dev/null”可以将不想要的错误信息重定向到 dev 文件夹下的 null 这个文件中,这个文件被称为“位桶(bit bucket)”,他接收输入但不对输入进行任何处理,是一个Unix系统里的古老概念。
标准输入重定向
使用“cat <file”命令,将 file 中的文本内容作为输入源。
cat 命令本身是用来合并文件的,它可以读取一个或多个文件,并把它们复制到标准输出文件中,如果有一系列后缀从001开始递增的文件,可以使用 cat file0*>file 的命令来使文件连接起来并输出出来。
如果 cat 后面不带任何参数,则等于将键盘作为输入源获取数据,数据输入完成后需要按键 Ctrl D 来结束输入。结束输入后 cat 会将标准输入内容复制到标准输出文件中,因此会看到文本行重复显示。
管道及其中选项
管道“|”: 把一个命令的标准输出传送到另一个命令的标准输入中过滤器(多个管道中用到的命令):例如 ls | sort | less,将当前要输出的数据先进行过滤,在此例中即排序,最后输出的是排好序的数据
报告或忽略文件中重复的行“uniq”: 经常与 sort 结合使用,如 ls | sort | uniq | less,输出的将是没有重复行的已排序过的数据;如果想要查看重复行的列表,可以在uniq命令后添加 -d,如果ls | sort | uniq -d | less
打印行数、字数和字节数“wc”: 可以以 wc file 的方式直接使用,也可以在管道里加上 -l 字符限制数据只报告行数
打印匹配行“grep” :以 grep pattern [file] 的方式使用,在管道中只需 grep pattern 即可。加上选项 -i 可以使搜索结果忽略大小写,选项 -v 可以使grep只输出和模式不匹配的行
打印开头10行或者末尾10行“head/tail” :可以使用 -n 选项来调整输出的行数。tail 查看实时文件可以用 tail -f log.file。使用 -f 选项时 tail 将持续监视这个文件,一旦添加了新行,新行就会立即显示在屏幕上,该动作在按下 Ctrl C后停止
从stdin读取数据,并同时输出到stdout和文件:“tee”:读取标准输入,再把读取到的数据复制到标准输出(允许数据继续向下传递到管道中)和一个或多个文件中去。当在某个中间处理阶段来捕获一个管道中的内容时,会很有用。例如 ls |sort|tee ls.txt|grep zip
第7章 透过shell看世界
每次按下enter时,bash执行命令前会对文本进行扩展,如果输入的是通配符 *,bash就会把这个字符扩展成“匹配文件名中的任意字符,对命令来说,它看到的是 * 扩展后的所有文件内容
* 星号扩展
ls -d .[!.]?*
正确执行路径名扩展,显示以“ . ”开头的隐藏文件,扩展为以一个点字符开头的所有文件名,文件名中并不包含第二个点字符,担保函一个额外的字符,后面可能还跟着其他字符
~ 波浪号扩展
echo ~ / echo ~foo
如果把它用在一个单词的开头,那么它将被扩展为指定用户的主目录名,如果没有指定用户命名,则扩展为当前用户的主目录
$((expression)) 算数扩展
echo $((2+2))
expression是包含数值和算术操作符的算术表达式,算数扩展只支持整数,可以执行加减乘除法模运算和幂运算(**)。表达式可嵌套。空格在表达式中无意义
{} 花括号扩展
echo front-{A,B,C}-Back
用于花括号扩展的模式信息可以包含一个称为前导字符的开头和一个称为附言的结尾。花括号表达式本身可以包含一系列逗号分隔的字符串,也可以包含一系列整数或单个字符。花括号支持嵌套。不能内嵌空格。常用于创建一系列只有顺序不同的文件或目录
$PARAM 参数扩展
echo $USER
参数扩展用在shell脚本中比直接用在命令行中更为有用,它的许多特性与系统存储小块数据以及给每个小块数据命名的性能有关,这些“小块数据”也被称为变量,如USER就是一个变量包。当需要在原有变量后扩展更多内容时,可以使用 param=$param"new text" 的方式来扩展补充原有内容。
- 查看可用的变量列表用:printenv | less
$(command) 命令替换
echo $(ls)
把一个命令的输出作为一个扩展模式使用
引用
“” 双引号
ls -l “two words.txt”
$、\、’ 这几个字符在双引号里面会失去其特殊含义,但参数扩展、算数扩展和花括号扩展仍然有效。使用双引号引用能够处理文件名中含有空格的情况
‘’ 单引号
echo 'text ~/*.txt{a,b}$(echo foo)$((2+2))$USER
单引号可以抑制所有的扩展,即在双引号里仍有效的扩展,在单引号里将会失效
\ 转义字符
echo “This is $100 dollars”
在双引号中加入转义字符反斜杠,选择性地阻止扩展。在单引号中反斜杠将失去特殊含义,只被当作一个普通字符
第8章 高级键盘技巧
组合键 | 作用 |
---|---|
Ctrl D | 删除光标处的字符 |
Ctrl T | 使光标处的字符和它前面的字符对调位置 |
Alt T | 使光标处的字和它前面的字对调位置 |
Alt L | 把从光标到字尾的字符转换成小写字母形状 |
Alt U | 把从光标到字尾的字符转换成大写字母形式 |
Ctrl A | 移动光标到行首 |
Ctrl E | 移动光标到行尾 |
Ctrl F | 光标向前移动一个字符,作用同右箭头 |
Ctrl B | 光标向后移动一个字符,作用同左箭头 |
Alt F | 光标向前移动一个字 |
Alt B | 光标向后移动一个字 |
Ctrl L | 清屏并把光标移到左上角,同clear命令 |
部分 | 内容 |
---|---|
1 | 用户命令 |
2 | 内核系统调用的程序接口 |
3 | C库函数程序接口 |
4 | 特殊文件,如设备节点和驱动程序 |
5 | 文件格式 |
6 | 游戏和娱乐,例如屏幕保护程序 |
7 | 其他杂项 |
8 | 系统管理命令 |
第9章 权限
所有者、组成员和其他所有用户
创建用户相关文章:Linux上新建用户及赋权操作
id命令会输出用户ID、有效组ID(gid)、和groups
读取、写入和执行
ls输出的第一个字符表示文件类型,后面九个字符称为文件模式,分别表示文件所有者、文件所属群组以及其他所有用户对该文件的读取、写入和执行权限。分别设置 r、w、x的模式属性会对文件和目录带来不同影响,如图
chmod——更改文件模式
使用chmod可以更改文件或目录的模式,只有文件所有者和超级用户才可以更改。chmod支持两种改变文件模式的方式:八进制数字表示法和符号表示法
八进制符号表示法
八进制数字的表示对应三个二进制数字,可以与存储文件模式的结构方式一一映射,如图,常用的映射有:7(rwx)、6(rw-)、5(r-x)、4(r–)、O(—)
符号表示法
符号表示法分为三个部分:更改会影响谁?要执行哪个操作?要设置哪种权限?通过字符 u、g、o、a 的组合来指定要影响的对象。如果没有指定字符,则假定使用 all 。操作符“+”表示添加一种权限,“-”表示删除一种权限,“=”表示只有指定的权限可用,其他权限都被删除
umask——设置默认权限
umask 0000:诸如此类的操作其实是在设置掩码,如果后面不加数字,则会显示出当前用户的当前掩码
更改身份
su [-[l]] [user]:用另一个用户的身份来启动shell,l可以省略,如果用户也省略了,则一般默认为超级用户。操作结束后输入 exit 可以返回到原来的用户
sudo root:使用 sudo 命令不用输入超级用户密码,sudo的具体使用帮助可以输入 sudo -l 查看
chown [own][:[group]] file:更改文件或目录的所有者和所属群组
chgrp:早起Unix版本中单独用于更改文件所属群组的命令
更改用户密码
Password [user]:这个命令可以设置或更改密码,如果要更改用户自己的密码,则只需要输入 passwd 命令
第10章 进程
进程如何工作
系统启动时,内核先把一些程序初始化为进程,然后运行 init 程序。这个程序会运行一系列称为脚本初始化的shell脚本,再由这些脚本去启动其他所有的系统服务。这其中有很多服务是通过手和陈旭来实现的,后台程序只是待在后台做自己的事情,因此在用户没有登录的时候,系统也会忙于执行一些例行的程序。
一个程序的运行可以触发其他程序的运行,在进程系统中,这称为父进程创建了子进程。
内核会保存每个进程的信息,以确保任务有序进行。每个进程会有一个自增的进程ID(pid),内核也记录分配给每个进程的内存信息以及用来恢复运行的进程就绪信息。和文件系统类似,进程系统中也存在所有者、用户ID、有效用户ID等。
相关命令
ps:显示当前所有进程的运行情况【后面加上 x 可以得到反映系统运行情况的更大视图界面,加上 aux 可以得到更多信息】
top:实时显示当前所有任务的资源占用情况,按照进程活动的顺序,以列表的形式持续更新显示系统进程的当前信息。其显示的定不是系统总体状态信息,下面是一张按CPU活动时间排序的进程情况表。进入top页面后输入 h 可以获得帮助界面,输入 q 可以退出top。
jobs:列出所有活动作业的状态信息,测试时想要让程序能够在后台运行,不受任何键盘输入的影响,可在命令后加上 &。如果要改回前台运行,可以使用 fg %[作业编号] 来实现
bg:设置在后台中运行作业,方法是 bg %[作业编号]
fg:设置在前台中运行作业,方法是 fg %[作业编号]
kill:发送信号给某个进程,方法是 kill [-信号编号/信号名] 进程编号
killall:杀死指定名字的进程,使用时必须有超级用户权限,方法是 killall [-u user][-signal] name…
shutdown:关机或重启系统
其他命令: