《Linux命令行与shell脚本编程大全》读书笔记
shell
启动shell
GNU bash shell是作为普通程序
运行的,通常是在用户登录终端时启动。
/etc/passwd
文件包含了所有系统用户账户列表以及每个用户的基本配置信息。
/etc/group
文件包含了用户组。
shell提示符
①普通用户默认是$
②root用户默认是#
。
这个符号表明shell在等待用户输入。
bash手册
man
命令用来访问存储在Linux系统上的帮助手册。
阅读时注意第一段
或Description部分
的前两段
,在这里能学到各种各样的技术行话。
这些手册页是由分页程序
(pager)来显示的。
①空格键
翻页,回车键
逐行查看。
②箭头键
向前/向后滚动。
③q键
退出。
手册页将与命令相关的信息分成不同的节。每一节惯用的命令标准如下表所示。
节 | 描述 |
---|---|
Name | 显式命令名和一段简短的描述 |
Synopsis | 命令的语法 |
Configuration | 命令的配置信息 |
Description | 命令的一般性描述 |
Options | 命令的选项描述 |
Exit Status | 命令的退出状态指示 |
Return Value | 命令的返回值 |
Errors | 命令的错误信息 |
Environment | 描述所使用的环境变量 |
如果不记得命令名,可以使用关键字搜索手册。语法是:man -k 关键字
。
手册页还有对应的内容区域。每个内容区域都分配了一个数字,1~9
。
区域号 | 所涵盖的内容 |
---|---|
1 | 可执行程序或shell命令 |
2 | 系统调研 |
3 | 库调用 |
4 | 系统文件 |
5 | 文件格式与约定 |
6 | 游戏 |
7 | 概览、约定及杂项 |
8 | 超级用户和系统管理员命令 |
9 | 内核例程 |
①man工具通常提供的是命令所对应的最低编号
的内容。当使用man 命令
之后出现的界面的左上角和右上角有命令(编号)
。
②要查看所需要的页面,可以输入man 编号 命令
。
③手册页不是唯一的参考资料。还有另一种叫作info页面
的信息。例如info 命令
。
④大多数命令都可以接受-help
或--help
选项。
Linux文件系统
Linux将文件存储在单个目录结构中(类似Windows的文件夹),这个目录被称为虚拟目录(Virtual directory)
。虚拟目录将安装在PC上的所有存储设备的文件路径纳入单个目录结构中。
在Linux文件系统中,通用的目录名用于表示一些常见的功能。
目录 | 用途 |
---|---|
/ | 虚拟目录的根目录。通常不会在这里存储文件 |
/bin | 二进制目录,存放许多用户级的GNU工具 |
/boot | 启动目录,存放启动文件 |
/dev | 设备目录,Linux在这里创建设备节点 |
/etc | 系统配置文件 |
/home | 主目录,Linux在这里创建用户目录 |
/lib | 库目录,存放系统和应用程序的库文件 |
/media | 媒体目录,可移动媒体设备的常用挂载点 |
/mnt | 挂载目录,另一个可移动媒体设备的常用挂载点 |
/opt | 可选目录,常用于存放第三方软件包和数据文件 |
/proc | 进程目录,存放现有硬件及当前进程的相关信息 |
/root | root用户的主目录 |
/sbin | 系统二进制目录,存放许多GNU管理员级工具 |
/run | 运行目录,存放系统运作时的运行时数据 |
/srv | 服务目录,存放本地服务的相关文件 |
/sys | 系统目录,存放系统硬件信息的相关文件 |
/tmp | 临时目录,可以在该目录中创建和删除临时工作文件 |
/usr | 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里 |
/var | 可变目录,用以存放经常变化的文件,比如日志文件 |
常见的目录名均基于文件系统层级标准(filesystem hierarchy standard,FHS)
。
查看文件系统(目录和文件)
切换虚拟目录命令cd
语法:cd 目标路径
如果没有指定目标路径,将切换到当前用户家目录
。
目标路径可用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。
- 绝对文件路径
绝对文件路径总是以正斜线(/
)作为起始,指明虚拟文件系统的根路径。
可以使用pwd
命令来显式当前所处工作目录。 - 相对文件路径
有两个特殊字符可用于相对文件路径中:
①单点符(.
):表示当前目录。
②双点符(..
):表示当前目录的父目录。
列表查看文件/目录命令ls
ls
命令输出的列表是按字母排序
的(按列排序而不是按行排序)。
参数说明
- 用
-F
选项:区分文件和目录。目录名后加正斜线(/
),可执行文件后面加星号(*
),注意参数大小写。 - 用
-a
选项:显示隐藏文件。 - 用
-R
选项:列出当前目录下包含的子目录中的文件,这个参数也叫递归选项
。 - 用
-i
选项:查看文件/目录的inode编号
,inode编号是由内核分配给文件系统中的每一个对象的用于标识的唯一数字。 - 用
-l
参数:长列表格式的输出,包含了目录中每个文件的更多相关信息。
输出的第一行显示了在目录中包含的总块数。
在此之后,每一行都包含了关于文件(或目录)的下述信息:
①文件类型,比如目录(d)、文件(-)、字符型文件(c)、块设备(b);
②文件的权限;
③文件的硬链接
总数;
④文件所属用户名
;
⑥文件所属组名
;
⑦文件的大小
(以字节为单位);
⑧文件的上次修改时间
;
⑨文件/目录名
。 - 用
--time=atime
参数:查看文件的访问时间。
atime=accessTime
mtime=modifyTime
窍门:选项并不一定分开输入:ls -F -R
。它们可以合并:ls -FR
。
正则表达式过滤输出列表
这个过滤器就是:一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器。
- 问号(
?
)代表一个字符; - 星号(
*
)代表零个或多个字符。 - 中括号(
[ ]
)表示一个字符位置并给出多个可能的选择。可以把待选的字符列出来,也可以指定字符范围。例如my_scr[ai]pt
,或my_scr[a-i]l
。 - 感叹号(
!
)排除不需要的内容。例如my_scr[!a]l
。
在过滤器中使用星号和问号被称为文件扩展匹配(file globbing)
,指:使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)
。
处理文件
创建文件命令touch
功能1::创建空文件
。
功能2::改变文件的修改
时间,这个操作并不改变文件的内容。
用-a
选项:只改变访问
时间。
用--
选项:创建特殊字符开头的文件。
复制文件命令cp
基本语法:cp 源文件 目标文件名
。
新的文件就像全新的文件一样,有新的修改时间,而且并不会提示。
用-i
选项:强制shell询问是否需要覆盖已有文件。
用-d
选项:避免列出目录中的内容,而只列出目录本身信息。
用-R
选项:在一条命令中递归地复制整个目录的内容。
在目标目录名尾部加上了一个正斜线(/
),以表明是目录而非文件。这有助于明确目的,而且在复制单个文件时非常重要。
如果没有使用正斜线,子目录又不存在,就会有麻烦。在这种情况下,试图将一个文件复制到子目录,但却创建一个和目录
名相同的文件
,连错误消息都不会提示!
自动补全Tab
技巧:给shell足够的文件名信息,使其能够将需要的文件同其他文件区分开
。假如有另外一个或多个文件名也是以really开头,就算按了制表键,也无法完成文件名自动补全。这时会听到嘟的一声。要是再按一次制表键,shell会列出所有以really开头的
文件名。
链接文件命令ln
(类似Windows下的快捷方式)
如需要在系统上维护同一文件的多个副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接
。
链接:目录中指向文件真实位置的占位符
。
在linux中有两种不同类型的文件链接:
①符号链接(比较常用)
②硬链接(很少用)
符号链接:就是一个实实在在的
文件
,(因此要取消符号链接,只要删除这个文件就行,注意是删除文件,文件名后不能有表示目录的正斜线),它指向存放在虚拟目录结构中某个地方的另一个文件,这两个通过符号链接在一起的文件,彼此的内容并不相同
。
语法:ln -s 源文件 符号链接文件
。
用-s
选项:创建符号链接。
区分源文件和符号链接文件:
①比较源文件与符号链接文件的大小。是不同的,因此是两个完全不同的文件。
②查看文件的inode编号。硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。创建硬链接使用
ln
命令时不再需要加入额外的参数。
只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接,只能使用符合链接。
尽量不要复制链接文件,需要副本时可以再创建另外一个链接。同一个文件拥有多个链接完全没有问题。但是,千万不要创建软链接文件的软链接。这会形成混乱的链接链,不仅容易断裂,还会造成各种麻烦。
重命名文件mv
移动(moving)
功能1:将文件和目录移动到另一个位置
功能2:重命名。
注意:mv
命令只影响文件名,但inode编号和时间戳保持不变。
用-i
选项:在命令试图覆盖已有的文件时,会得到提示。
也可以使用mv命令移动文件位置同时修改文件名称。
也可以使用mv命令移动整个目录及其内容,但是内容不变,只是目录名发生改变。
删除文件rm
移除(removing)
语法格式:rm -i 目标文件/目录
。
用-i
选项:提示是否真要删除该文件。bash shell中没有回收站,文件一旦删除,就无法找回。
用-r/R
recursive选项:递归删除目录及其内容。
用-f
force选项:强制删除,以便在删除多个文件并不受提示符干扰。
用--
(常用)或者绝对路径:删除特殊字符开头的文件,例如:rm -- -foo
/rm ./-foo
。
处理目录
创建目录命令mkdir
语法:mkdir 目标目录名
。
用-p
选项:同时创建多个目录和子目录。
语法:mkdir -p 目录/子目录/孙子目录
。
删除目录命令rmdir
默认情况下,只删除空目录
。并没有-i
选项询问是否要删除目录。
用-r
选项:递归删除目录内的文件,然后再删除目录本身。
查看文件内容
查看文件类型命令file
功能:探测文件内部,并决定文件是什么类型的。甚至能告诉你它链接到了哪个文件上。
查看整个文件内容命令cat
/more
/less
-
cat
命令
-n
参数会给所有的行加上行号。 -
more
命令
cat命令的缺陷是,一旦运行,就无法控制后面的操作。more是分页工具,只支持文本文件
中的基本移动。
选项:
+n
选项:从笫n行开始显示
-n
选项:定义屏幕大小为n行
+/pattern
选项:在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c
选项:从顶部清屏,然后显示
-d
选项: 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l
选项:忽略Ctrl+l(换页)字符
-p
选项:通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s
选项:把连续的多个空行显示为一行
-u
选项:把文件内容中的下画线去掉
操作:
回车键
:向下n行,需要定义。默认为1行
q键
:退出
空格键
:向下滚动一屏
Ctrl+B
:返回上一屏
=
:输出当前行的行号
:f
:输出文件名和当前行的行号 -
less
命令
来源于(less is more),是more命令的升级版。除了支持和more命令相同的命令集,还包含更多选项。比如能识别上下键
以及上下翻页键
。
查看文件部分内容命令tail
/head
-
tail
命令
功能:显示文件最后几行的内容("尾部"),默认情况下,显示末尾10行。
用-n
/--lines=K
选项:显示末尾K行。
用-f
/--follow
选项:允许在其他进程使用改文件时查看文件的内容。tail命令会保持活跃状态,并不断显示追加到文件中的内容。这是实时监测系统日志的绝妙方式。 -
head
命令
功能:默认显示文件前10行。
用-n
参数:这两个命令都允许在破折号后输入想要显示的行数。
技巧:这两个命令可以直接在破折号后输入想要显示的行数,而不需要加字母n
。