Linux 学习笔记
第十一组
成员: 陈希桐 郭贵鑫
分工:
陈希桐 编写
郭贵鑫 查找资料及复查
第二课
1.Linux 构成
Linux=Kernel+Shell+FS+Pro/Uti/Tol
即内核加壳加文件系统加应用程序
2.ls 命令
全拼list files
语法:ls [option][name]
用途:列出目前工作目录所含文件及其子目录
可选参数
- -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
- -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- -r 将文件以相反次序显示(原定依英文字母次序)
- -t 将文件依建立时间之先后次序列出
- -A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)
- -F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”
- -R 若目录下有文件,则以下之文件亦皆依序列出
3.快捷键
-
Tab Auto complete 自动完成
-
Tab Tab Show possible auto completes 显示可能的自动完成
-
Up/Down Command history 上/下命令历史
-
Left/Right Move cursor 左/右移动光标
-
Ctrl+A Move cursor to beginning 移动光标到开始
-
Ctrl+C End running program 结束运行程序
-
Ctrl+D End current session 结束当前会话
-
Ctrl+E Move cursor to end 移动光标到结束
-
Ctrl+H Backspace 退格
-
Ctrl+L Clear 清除
-
Ctrl+R Search command history 搜索命令历史记录
-
Ctrl+Z Suspend the program 暂停程序
4.cd 命令
全拼:Changge directory
语法: cd [路径]
用途:改变路径
常用方法:
-
cd go主目录
-
cd ~ go主目录
-
cd . .去父目录
-
CD / go root
-
CD -去以前的目录
5.pwd 命令
全拼:print work directory
语法:pwd [option]
用途:可立刻得知您目前所在的工作目录的绝对路径名称
参数:
-
-L, --logical 从环境中使用PWD,即使它包含符号链接
-
-P, --physical physical 避免所有符号链接
-
–help 显示帮助并退出
-
–version 输出版本信息并退出
6.cat 命令
全拼:concatenate
语法: cat [-AbeEnstTuv] [–help] [–version] fileName
用途:命令用于连接文件并打印到标准输出设备上
参数:
-
-n 或 --number:由 1 开始对所有输出的行数编号
-
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号
-
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行
-
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外
-
-E 或 --show-ends : 在每行结束处显示 $
-
-T 或 --show-tabs: 将 TAB 字符显示为 ^I
-
-A, --show-all:等价于 -vET
-
-e:等价于"-vE"选项
-
-t:等价于"-vT"选项
主要三大功能:
- 一次显示整个文件
- $ cat filename
- 从键盘创建一个文件
- $ cat > filename
- 能创建新文件,不能编辑已有文件
- 将几个文件合并为一个文件
- $cat file1 file2 > file
其他写法:
- cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:
cat /dev/fd0 > OUTFILE
- 相反的,如果想把 image file 写到软盘,输入:
cat IMG_FILE > /dev/fd0
3.cat<<EOF
,以EOF输入字符为标准输入结束: cat>filename<<EOF
,以EOF作为输入结束,和ctrl+d的作用一样:
7. exit命令
语法:exit [状态码]
用途:执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败。exit也可用在script,离开正在执行的script,回到shell
参数:
- 格式:exit n
退出。设置退出码为n。(Cause the shell to exit with a status of n.)
-
格式:exit退出。
退出码不变,即为最后一个命令的退出码。(If n is omitted, the exit status is that of the last command executed. ) -
格式:$?
一个命令的退出码。 -
格式:trap “commands” EXIT
退出时执行commands指定的命令。( A trap on EXIT is executed before the shell terminates.
退出码(exit status,或exit code)的约定:
-
0表示成功(Zero - Success)
-
非0表示失败(Non-Zero - Failure)
-
2表示用法不当(Incorrect Usage)
-
127表示命令没有找到(Command Not Found)
-
126表示不是可执行的(Not an executable)
-
值>=128 信号产生
8. info 命令
语法:info(选项)(参数)
用途:得到最多的帮助信息,无视外部命令还是内部命令
选项:
- -d:添加包含info格式帮助文档的目录
- f:指定要读取的info格式的帮助文档
- -n:指定首先访问的info帮助文件的节点
- -o:输出被选择的节点内容到指定文件
参数:
帮助主题:指定需要获得帮助的主题,可以是指令、函数以及配置文件
快捷键:
-
上箭头 向上移动一行
-
下箭头 向下移动一行
-
PgUp 向上翻一页
-
PgDn 向下翻一页
-
Tab 在有"*"符号的节点间进行切换
-
回车 进入有"*"符号的子页面,査看详细帮助信息
-
u 进入上一层信息(回车是进入下一层信息)
-
n 进入下一小节信息
-
P 进入上一小节信息
-
q 退出info信息
命令:
? 显示帮助窗口
在帮助窗口中:
-
Ctrl-x 0 关闭帮助窗口
-
Ctrl-x Ctrl-c 关闭整个 Info
-
q 退出 info
-
n 打开与本 Node 关联的下一个 Node
-
p 打开与本 Node 关联的前一个 Node
-
u 打开与本 Node 关联的上一个 Node
-
l 回到上一次访问的 Node
-
m或g 选择一个菜单项(Node 的名字)
输入指定菜单的名字后按回车,打开指定菜单项关联的 Node -
空格键 下一页(PageDown 也可以,下一页从当前页的最后两行开始算起)
-
Del 键 上一页(PageUp 也可以,上一页从当前页的开始两行开始算起)
上一个 Node (若当前页 Node 文档的开始) -
b 或 t 或 Home 文档的开始(b 是 begining 的意思)
-
e 或 End 文档的末尾(b 是 ending 的意思)
-
Ctrl-l 刷新当前页,若当前文档显示情况有问题时
-
Ctrl-g 取消所键入的指令
9. man 命令
语法:man [命令]
用途:man命令会列出一份完整的说明。 其内容包括命令语法、各选项的意义及相关命令 。更为强大的是,不仅可以查看Linux中命令的使用帮助,还可以查看软件服务配置文件、系统调用、库函数等帮助信息
参数:
-
-a 在所有的man帮助手册中搜索
-
-d 主要用于检查,如果用户加入了一个新的文件,就可以用这个参数检查是否出错
-
-f 显示给定关键字的简短描述信息
-
-p 指定内容时使用分页程序
-
-M 指定man手册搜索的路径
-
-w 显示文件所在位置
man的构成:
- 用户命令的使用方法,可以使用的参数等
- 系统调用,只有系统才能执行的函数
- 库调用,大多是libc函数,如qsort(3)
- 设备和特殊文件
- 文件格式和约定
- 游戏
- 宏命令包和约定
- 系统管理命令,多数只有root可以执行
- 内核程序
- Tcl或Tk指令
10. 命名规则
大小写、数字、英文句号、下划线
隐藏文件以英文句号开始命名
11. 文件类型对应后缀
-
- 常规文件
-
d 目录
-
l 链接
-
c 特殊的文件
-
s 套接字
-
p 命名管道
-
b 块设备
12. touch 命令
语法:touch [option][fileName]
用途:创建文件和修改文件或者目录的时间戳 (会覆盖)
参数:
-
-a 只修改文件的access(访问)时间.
-
-c 或–no-create 不创建不存在的文件。
-
-d 使用指定的日期时间,而非现在的时间
-
-m 指修改Modify(修改)时间,而不修改access(访问)时间
-
-r file 使用指定file文件的时间戳(access,modify)更新文件的时间(access,modify)
注:access 表示最后一次访问(仅仅是访问,没有改动)文件的时间 -
modify 表示最后一次修改文件的时间
-
change 表示最后一次对文件属性改变的时间,包括权限,大小,属性等等
-
-t 将时间修改为参数指定的日期,如:07081556代表7月8号15点56分
用例:
-
创建空文件file1
touch file1
-
将文件file1的时间记录更改为9月17日19点30分
touch -c -t 09171930 /root/file1
Bash -
/root/file4文件的访问/修改时间(atime和mtime)设置成与/etc/passwd文件相同
touch -r /etc/passwd /root/fi
13. mkdir 命令
全拼:make directory
语法:mkdir [option] directory…
用途:如果目录不存在,那么就创建目录
参数:
-
–version 显示命令版本信息
-
–help 显示帮助文档
-
-m | --mode=MODE 设置目录的权限
-
-p | --parents 创建多层目录的时候,如果父目录不存在,那么首先创建父目录
-
-v | --vervose 显示执行过程
用例:
- 创建一个最大权限的目录
mkdir -m 777 test
- 创建目录及其父目录
mkdir -v test01/test
//目录test01不存在,无法在其下创建test目录
mkdir: 无法创建目录"test01/test": 没有那个文件或目录
mkdir -p -v test01/test
//使用选项-p,当目录test01不存在的时候,首先创建test01
mkdir: 已创建目录 “test01”
mkdir: 已创建目录 “test01/test”
You have new mail in /var/spool/mail/多数只有root可以执行
14. cp 命令
全拼:copy file
语法:cp
用途:主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能
参数:
-
a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-
-f:覆盖已经存在的目标文件而不给出提示。
-
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
-
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-
-l:不复制文件,只是生成链接文件
用例:
-
复制多个文件到目标文件(夹)下
命令格式为:cp 源文件1 源文件2 目标文件夹 或 cp 文件* 目标文件夹 -
复制源文件夹到目标文件夹下:
命令格式为:cp -r 源文件夹 目标文件夹 -
只有源文件比目标文件新时,才会将源文件复制给目标文件,否则,及时执行了命令,也不会执行复制:
命令格式为:cp -u 源文件 目标文件
15. mv 命令
全拼:move file
语法:mv [option] |
用途:用来为文件或目录改名、或将文件或目录移入其它位置
参数:
-
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份
-
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作
-
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件
-
-n: 不要覆盖任何已存在的文件或目录
-
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作
命令格式一图过:
-
mv source_file(文件) dest_file(文件)
将源文件名 source_file 改为目标文件名 dest_file -
mv source_file(文件) dest_directory(目录)
将文件 source_file 移动到目标目录 dest_directory 中 -
mv source_directory(目录) dest_directory(目录)
目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory -
mv source_directory(目录) dest_file(文件)
出错
15. rm 命令
全拼:remove
语法:remove [option] name…
用途:命令用于删除一个文件或者目录
参数:
-
-i 删除前逐一询问确认
-
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认
-
-r 将目录及以下之档案亦逐一删除
注意,rm 命令是一个具有破坏性的命令,因为 rm 命令会永久性地删除文件或目录,这就意味着,如果没有对文件或目录进行备份,一旦使用 rm 命令将其删除,将无法恢复,因此,尤其在使用 rm 命令删除目录时,要慎之又慎。
用例:
全部删除:
rm -rf
16. rmdir 命令
全拼:remove directory
语法:rmdir [option] directory
用途:删除空目录,删不空会报错
参数:
-
-p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除
-
–ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息
-
-v或-verboes:显示命令的详细执行过程
-
–help:显示命令的帮助信息
-
–version:显示命令的版本信息
-
-r : 递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性
用例:
- 将工作目录下,名为 AAA 的子目录删除 :
rmdir AAA
- 在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。
rmdir -p BBB/Test
##第三课
1. vi和vim
区别:
Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
vi/vim的使用:
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式:
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
- 底线命令模式
- 在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- q 退出程序
- w 保存文件
- 按ESC键可随时退出底线命令模式。
vi/vim按键说明:
第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等
移动光标的方法:
- h 或 向左箭头键(←) 光标向左移动一个字符
- j 或 向下箭头键(↓) 光标向下移动一个字符
- k 或 向上箭头键(↑) 光标向上移动一个字符
- l 或 向右箭头键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
-
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
-
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
-
[Ctrl] + [d] 屏幕『向下』移动半页
-
[Ctrl] + [u] 屏幕『向上』移动半页
-
+光标移动到非空格符的下一行
-
-光标移动到非空格符的上一行
-
n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
-
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
-
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
-
H 光标移动到这个屏幕的最上方那一行的第一个字符
-
M 光标移动到这个屏幕的中央那一行的第一个字符
-
L 光标移动到这个屏幕的最下方那一行的第一个字符
-
G 移动到这个档案的最后一行(常用)
-
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
-
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
-
n n 为数字。光标向下移动 n 行(常用)
搜索替换
-
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
-
?word 向光标之上寻找一个字符串名称为 word 的字符串。
-
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
-
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词! -
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
『:100,200s/vbird/VBIRD/g』。(常用) -
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
-
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
-
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
-
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
-
dd 删除游标所在的那一整行(常用)
-
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
-
d1G 删除光标所在到第一行的所有数据
-
dG 删除光标所在到最后一行的所有数据
-
d$ 删除游标所在处,到该行的最后一个字符
-
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
-
yy 复制游标所在的那一行(常用)
-
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
-
y1G 复制游标所在行到第一行的所有数据
-
yG 复制游标所在行到最后一行的所有数据
-
y0 复制光标所在的那个字符到该行行首的所有数据
-
$ 复制光标所在的那个字符到该行行尾的所有数据
-
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
-
J 将光标所在行与下一行的数据结合成同一行
-
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
-
u 复原前一个动作。(常用)
-
Ctrl]+r 重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)
第二部分:一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式
-
i, I 进入输入模式(Insert mode):
-
i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
-
a, A 进入输入模式(Insert mode):
a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) -
o, O 进入输入模式(Insert mode):
这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用)
- r, R 进入取代模式(Replace mode):
r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
- [Esc] 退出编辑模式,回到一般模式中(常用)
第三部分:一般模式切换到指令行模式的可用的按钮说明
指令行的储存、离开等指令
-
:w 将编辑的数据写入硬盘档案中(常用)
-
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
-
:q 离开 vi (常用)
-
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~ -
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
-
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
-
ZQ 不保存,强制退出。效果等同于 :q!。
-
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
-
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
-
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
-
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如
-
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
vim 环境的变更 -
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
-
:set nonu 与 set nu 相反,为取消行号!
特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。
举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。
2. wc 命令
全拼:word count
语法: wc [option] [–version][文件…]
用途:计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据
参数:
- -c或–bytes或–chars 只显示Bytes数。
- -l或–lines 显示行数。
- -w或–words 只显示字数。
- –help 在线帮助。
- –version 显示版本信息。
注意:
-
如果你做试验的文件的编码格式是 UTF-8 或其他,则可能会影响统计结果,因为不同编码格式中汉字所占的字节数各不相同。
-
- 当用 -c 时,你会发现其实制表符也没什么特殊的,只是算作一个字符(\t),因为它的确就只是一个字符而已。
- 而当使用 -w 时,制表符和空格没什么两样,都是作为字的间隔来看待。
- 当使用 -m 时,从视觉上,你以为 hello 和 world 之间是有 3 个空格,其实 wc 只把它算作一个字符,即 Tab 制表符。
3. head和tail 命令
语法: head | head [n]
tail | tail [n]
用途:默认显示对应文件的前十/后十行,表示显示行数
4. > 命令
全拼:Output redirection
语法:
-
命令 > 文件 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。
-
命令 2> 文件 将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。
-
命令 >> 文件 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。
-
命令 >> 文件 2>&1 或者 命令 &>> 文件 将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。
注意:>会覆盖已有,>>会在后面追加
5. | 命令
全拼:Pipeline
语法:命令1 | 命令2(可嵌套使用)
用途:系统会将命令1的标准输出重定向为命令2的标准输入。可以在任何两个命令之间插入管道符。管道操作符之前的命令将把输出写到标准输出上。而管道后的命令将把这个标准输出当作它的标准输入来读入。
用例:
-
选择性删除命令:
echo ‘文件名’ |xargs rm
或者find -name “文件名"|xargs rm -rf
-
我们希望找到文件在其文件名或文件扩展中包含"页面"一词的文件
ls | grep '字段'
##第四课
1. groupadd 命令
语法:groupadd [option] < groupname >
用途:命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中
参数:
-
-g:指定新建工作组的 id
-
-r:创建系统工作组,系统工作组的组ID小于 500
-
-K:覆盖配置文件 “/ect/login.defs”
-
-o:允许添加组 ID 号不唯一的工作组
-
-f,–force: 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)
用例:
创建一个新的组,并添加组 ID。
groupadd -g 344 runoob
2. groupdel 命令
语法:groupdel [群组名称]
用途:删除群组
注意,不能使用 groupdel 命令随意删除群组。此命令仅适用于删除那些 “不是任何用户初始组” 的群组,换句话说,如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除
3. groupmod 命令
语法:groupmod groupname
用途:用于修改用户组的相关信息
参数:
-
g, --gid GID
给群组指定一个新的GID,即修改组ID。(类似groupadd,-g可和-o选项一起使用,指定一个已存在的GID给目标组)注意:
- 将更新将该组作为主组的用户,且保留该组继续作为用户的主组
- 任何具有旧组ID且必须继续属于组的文件,都必须手动更改其组ID
-
-n, --new-name NEW_GROUP 指定要更改的组名
-
-o, --non-unique 需和-g选项一起使用,允许为指定的组添加一个已存在的GID,即共享一个GID,使该GID不再具备唯一性
-
-p, --password PASSWORD 指定组密码
-
-R, --root CHROOT_DIR 指定在CHROOT_DIR(改变后的根目录)下更改生效以及使用CHROOT_DIR目录下的配置文件
用例:
- 把组名group1修改为testgrp
groupmod -n testgrp group1
4. 用户名规则
-
按约定长度小于8个字符
-
大小写敏感的
-
按照惯例都是小写的
-
用户名中允许有数字
-
不要使用特殊字符
5. useradd 命令
语法:useradd [option] < username >
用途:创建新系统用户
参数:
-
-u UID 手工指定用户的 UID,注意 UID 的范围(不要小于 500)
-
-d 主目录 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限
-
-c 用户说明 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置
-
-g 组名 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录
-
-G 组名 指定用户的附加组。我们把用户加入其他组,一般都使用附加组
-
-s shell 手工指定用户的登录 Shell,默认是 /bin/bash
-
-e 曰期 指定用户的失效曰期,格式为 “YYYY-MM-DD”。也就是 /etc/shadow 文件的第八个字段
-
-o 允许创建的用户的 UID 相同。例如,执行 “useradd -u 0 -o usertest” 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0
-
-m 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的
-
-r 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录
用例:
-
添加一般用户
useradd tt
-
为添加的用户指定相应的用户组
useradd -g root tt
-
创建一个系统用户
useradd -r tt` -
为新添加的用户指定home目录
useradd -d /home/myd tt` -
建立用户且制定ID
useradd caojh -u 544
6. usetdel 命名
全拼:user delete
语法:userdel [option] < username >
用途:用于删除指定的用户及与该用户相关的文件
参数:
-
-f:强制删除用户,即使用户当前已登录
-
-r:删除用户的同时,删除与用户相关的所有文件
用例:
-
直接使用命令,即可删除用户
userdel test
但是如果用户相关进程正在运行,则无法直接删除 -
对于无法直接删除的命令,可使用-f选项强制删除
userdel -f test
一般删除完用户之后,其相关数据文件还存在,这就需要加上-r选项,加上-r选项后,用户相关用户数据全部清除了
userdel -r test
7. usermod 命令
语法:usermod [option] < username >
用途:修改用户帐号的各项设定
参数:
-
-c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段
-
-e 日期:修改用户的失效曰期,格式为 “YYYY-MM-DD”,即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段
-
-g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID)
-
-u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID)
-
-G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件
-
-l 用户名:修改用户名称
-
-L:临时锁定用户(Lock)
-
-U:解锁用户(Unlock),和 -L 对应
-
-s shell:修改用户的登录 Shell,默认是 /bin/bash
用例:
-
更改登录目录
usermod -d /home/hnlinux root
-
改变用户的uid
usermod -u 777 root
7. whoami 命令
语法:whoami [option]
用途:用于显示自身用户名称
参数:
-
–help
在线帮助 -
–version
显示版本信息
8. who 命令
语法:who [option] [fileName]
用途:目前登录系统的用户信息。执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个X显示器
参数:
-
-H或–heading:显示各栏位的标题信息列
-
-i或-u或–idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串
-
-m:此参数的效果和指定"am i"字符串相同
-
-q或–count:只显示登入系统的帐号名称和总人数
-
-s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题
-
-w或-T或–mesg或–message或–writable:显示用户的信息状态栏
-
–help:在线帮助
-
–version:显示版本信息
fileName:指定查询文件
用例:
-
显示当前登录系统的用户
who
//显示当前登录系统的用户 -
显示标题栏
who -H
-
显示用户登录来源
who -l -H
-
显示终端属性
who -T -H
-
只显示当前用户
who -m -H
-
精简模式显示
who -q
9. who am i 命令
语法:who am i
用途:用来打印登陆当前 Linux 系统的用户名 (用于区别你的权限是不是su过去的)
10. id 命令
语法:id [option] < username >
用途:可以显示真实有效的用户ID(UID)和组ID(GID)
参数:
-
-g或–group 显示用户所属群组的ID
-
-G或–groups 显示用户所属附加群组的ID
-
-n或–name 显示用户,所属群组或附加群组的名称
-
-r或–real 显示实际ID
-
-u或–user 显示用户ID
-
-help 显示帮助
-
-version 显示版本信息
用例:
- 显示当前用户信息
id
//显示当前用户ID
uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t
11. su 命令
全拼:switch user
语法:su [option] [user][ARG]
用途:用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码
参数:
-
-f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-
-m -p 或 --preserve-environment 执行 su 时不改变环境变数
-
-c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-
-s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
-
–help 显示说明文件
-
–version 显示版本资讯
-
- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
-
USER 欲变更的使用者帐号
-
ARG 传入新的 shell 参数
用例:
-
变更帐号为 root 并在执行 ls 指令后退出变回原使用者
su -c ls root
-
变更帐号为 root 并传入 -f 参数给新执行的 shell
su root -f
-
变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)
su - clsung
12. 文件权限
-
r“只读”权限
-
w“写”许可
-
x“执行”许可
一共九位,前三位表示你的权限,中间三位表示组的权限,后面三位表示所有人的权限,有权限就有对应字母,无权限则是用划线’-代替
归属人
归属组
##第五课
1. sort 命令
语法:sort file_name
用途:对文本文件内容以行为单位排序
参数:
-
-b 忽略每行前面开始出的空格字符
-
-c 检查文件是否已经按照顺序排序
-
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-
-f 排序时,将小写字母视为大写字母
-
i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符
-
-m 将几个排序好的文件进行合并
-
-M 将前面3个字母依照月份的缩写进行排序
-
-n 依照数值的大小排序
-
-u 意味着是唯一的(unique),输出的结果是去完重了的
、 -
-o<输出文件> 将排序后的结果存入指定的文件
-
-r 以相反的顺序来排序
-
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位
-
–help 显示帮助
-
–version 显示版本信息
-
[-k field1[,field2]] 按指定的列进行排序
用例:
-
在使用 sort 命令以默认的式对文件的行进行排序,使用的命令如下:
sort testfile
sort 命令将以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。 -
使用 cat 命令显示 testfile 文件可知其原有的排序如下:
cat testfile # testfile文件原有排序
test 30
Hello 95
Linux 85
使用 sort 命令重排后的结果如下:
sort testfile
# 重排结果
Hello 95
Linux 85
test 30 -
使用 -k 参数设置对第二列的值进行重排,结果如下:
sort testfile -k 2
test 30
Linux 85
Hello 95
2. uniq 命令
**语法:uniq [OPTION]… [INPUT][OUTPUT]
用途:令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
注意:不相邻的行不算重复
参数:
- -c或–count 在每列旁边显示该行重复出现的次数
- -d或–repeated 仅显示重复出现的行列
- -f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位
- -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符
- -u或–unique 仅显示出一次的行列
- -w<字符位置>或–check-chars=<字符位置> 指定要比较的字符
- –help 显示帮助
- –version 显示版本信息
- [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据
- [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)
用例:
- 当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用:
cat testfile1 原有内容
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
这时我们就可以使用 sort:
sort testfile1 | uniq
Hello 95
Linux 85
test 30
-
统计各行在文件中出现的次数:
sort testfile1 | uniq -c
3 Hello 95
3 Linux 85
3 test 30 -
在文件中找出重复的行:
sort testfile1 | uniq -d
Hello 95
Linux 85
test 30
3. comm 命令
语法:comm [option] < file1 > < file2 >
用途:
命令用于比较两个已排过序的文件。这项指令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成 3 列显示:第 1 列仅是在第 1 个文件中出现过的列,第 2 列是仅在第 2 个文件中出现过的列,第 3 列则是在第 1 与第 2 个文件里都出现过的列。若给予的文件名称为 - ,则 comm 指令会从标准输入设备读取数据
参数:
-
-1 不显示只在第 1 个文件里出现过的列
-
-2 不显示只在第 2 个文件里出现过的列
-
-3 不显示只在第 1 和第 2 个文件里出现过的列
-
–help 在线帮助
-
–version 显示版本信息
用例:
aaa.txt 与 bbb.txt 的文件内容如下:
cat aaa.txt
aaa
bbb
ccc
ddd
eee
111
222
cat bbb.txt
bbb
ccc
aaa
hhh
ttt
jjj
执行 comm 命令输出结果如下:
comm aaa.txt bbb.txt
第一列 | 第二列 | 第三列 |
---|---|---|
aaa | ||
ccc | ||
aaa | ||
ddd | ||
eee | ||
111 | ||
222 | ||
hhh | ||
ttt | ||
jjj |
4. tr 命令
**语法:tr [OPTION]…< SET1>
用途:对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大
参数:
-
-c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-
-d, --delete:删除指令字符
-
-s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
-
-t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等
-
–help:显示程序用法信息
-
–version:显示程序本身的版本信息
-
字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”
-
字符集2:指定要转换成的目标字符集
字符集合的范围:*
-
\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
-
\ 反斜杠
-
\a Ctrl-G 铃声
-
\b Ctrl-H 退格符
-
\f Ctrl-L 走行换页
-
\n Ctrl-J 新行
-
\r Ctrl-M 回车
-
\t Ctrl-I tab键
-
\v Ctrl-X 水平制表符
-
CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
-
[CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
-
[CHAR*REPEAT] :这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
-
[:alnum:] :所有字母字符与数字
-
[:alpha:] :所有字母字符
-
[:blank:] :所有水平空格
-
[:cntrl:] :所有控制字符
-
[:digit:] :所有数字
-
[:graph:] :所有可打印的字符(不包含空格符)
-
[:lower:] :所有小写字母
-
[:print:] :所有可打印的字符(包含空格符)
-
[:punct:] :所有标点字符
-
[:space:] :所有水平与垂直空格符
-
[:upper:] :所有大写字母
-
[:xdigit:] :所有 16 进位制的数字
-
[=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)
用例:
-
将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令
cat testfile |tr a-z A-Z
或者
cat testfile |tr [:lower:] [:upper:]
-
去除oops.txt里面的重复的小写字符
tr -s "[a-z]"<oops.txt >result.txt
-
删除空行
tr -s "[\012]" < plan.txt
或
tr -s ["\n"] < plan.txt
-
有时需要删除文件中的^M,并代之以换行
tr -s "[\015]" "[\n]" < file
或
tr -s "[\r]" "[\n]" < file
-
大写到小写
cat a.txt |tr "[a-z]" "[A-Z]" >b.txt
-
删除指定字符
一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[a-z]和[A-Z],命令tr -cs "[a-z][A-Z]" "[\012*]"
将文件每行所有不包含在[a-z]或[A-Z](所有希腊字母)的字符串放在字符串1中并转换为一新行。-s选项表明压缩所有新行, -c表明保留所有字母不动。原文件如下,后跟tr命令:
tr -cs "[a-z][A-Z]" "[\012*]" <diary.txt
-
转换控制字符
tr的第一个功能就是转换控制字符,特别是从dos向UNIX下载文件时,忘记设置ftp关于回车换行转换的选项时更是如此。cat -v filename 显示控制字符。
cat -v stat.txt
box aa^^^^12M
apple bbas^^^23M
^Z
猜想‘^ ^ ^ ^ ^ ^’是tab键。每一行以Ctrl-M结尾,文件结尾Ctrl-Z,以下是改动方法。
使用-s选项,查看ASCII表。的八进制代码是136,M是015,tab键是011,^Z是032 ,下面将按步骤完成最终功能。
用tab键替换^ ^ ^ ^ ^ ^,命令为"\136" "[\011*]"
。将结果重定向到临时工作文件stat.tmp
{tr -s "[\136]" "[\011*]" <stat.txt >stat.tmp
用新行替换每行末尾的^M,并用 \n 去除^Z,输入要来自于临时工作文件stat.tmp。
tr -s "[\015][\032]" "\n" <stat.tmp
要删除所有的tab键,代之以空格,使用命令
tr -s "[\011]" "[\040*]" <input.file
-
替换passwd文件中所有冒号,代之以tab键,可以增加可读性
tr -s "[:]" "[\011]" < /etc/passwd
或者
tr -s "[:]" "[\t]" < /etc/passwd
-
使路径具有可读性
如果用echo $PATH
或者echo $LD_LIBRARY_PATH
等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了
echo $PATH | tr ":" "\n"
-
可以在vi内使用所有这些命令!只要记住:在tr命令前要加上您希望处理的行范围和感叹号 (!),如 1,$!tr -d ‘\t’(美元符号表示最后一行)。
-
另外,当有人给您发送了一个在 Mac OS 或 DOS/Windows 机器上创建的文本文件时,您会发现tr非常有用。
如果没有将文件保存为使用 UNIX 换行符来表示行结束这种格式,则需要将这样的文件转换成本机 UNIX 格式,否则一些命令实用程序不会正确地处理这些文件。Mac OS 的行尾以回车字符(\r)结束,许多文本处理工具将这样的文件作为一行来处理。为了纠正这个问题,可以用下列技巧:
Mac -> UNIX:tr "\r" "\n"<macfile > unixfile
UNIX -> Mac:tr "\n" "\r"<unixfile > macfile
Microsoft DOS/Windows 约定,文本的每行以回车字符(\r)并后跟换行符(\n)结束。为了纠正这个问题,可以使用下列命令:
DOS -> UNIX:tr -d "\r"<dosfile > unixfile
UNIX -> DOS:在这种情况下,需要用awk,因为tr不能插入两个字符来替换一个字符。要使用的 awk 命令为 awk '{ print $0"\r" }'<unixfile > dosfile
注:都可以用sed 来完成。
grep 命令
语法: grep [OPTION] “string” file
  或者
  grep [option] “string”
用途:指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据
参数:
-
-a 或 --text : 不要忽略二进制的数据
-
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容
-
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号
-
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容
-
-c 或 --count : 计算符合样式的列数
-
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容
-
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作
-
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式
-
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用
-
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式
-
-F 或 --fixed-regexp : 将样式视为固定字符串的列表
-
-G 或 --basic-regexp : 将样式视为普通的表示法来使用
-
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称
-
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称
-
-i 或 --ignore-case : 忽略字符大小写的差别
-
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称
-
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称
-
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号
-
-o 或 --only-matching : 只显示匹配PATTERN 部分
-
-q 或 --quiet或–silent : 不显示任何信息
-
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同
-
-s 或 --no-messages : 不显示错误信息
-
-v 或 --invert-match : 显示不包含匹配文本的所有行
-
-V 或 --version : 显示版本信息
-
-w 或 --word-regexp : 只显示全字符合的列
-
-x --line-regexp : 只显示全列符合的列
-
-y : 此参数的效果和指定"-i"参数相同
-
string 范本样式(正则表达式)
基本正则表达式和扩展正则表达式
世界上的正则表达式种类繁多且复杂,面对这样的状况,POSIX 将正则表达式进行了标准化,并把实现方法分为了两大类:
-
基本正则表达式(BRE)
-
扩展正则表达式(ERE)
-
^r表示以r开头的行
-
$表示一行的末尾
-
\。$用于以。结尾的行
-
^fi$ 表示中间有fi的行
. 代表且只能代表任意一个字符(不包括空行) -
- 重复前面任意0个或多个字符
-
.* 匹配所有字符。(包括空行)
-
sed -ri ‘s#(.*)#\1#g’ bqh.txt
把前面正则匹配的括号内的结果,在后面用\1取出来操作。 -
^$ 表示空行
-
\ 例. 就只代表点本身,转义符号,让有着特殊身份移动的字符,脱掉马甲,还原原型$
-
^.* 以任意多个字符开头
-
.*$ 以任意多个字符结尾
-
(.*) 从第一字符匹配,到空格停止
-
[abc] 匹配字符集合内的任意一个字符【a-zA-Z】
-
[^abc] 匹配不包括后的任意字符的内容;中括号里的为取反,注意和以…开头区别
-
a{n,m} 重复n到m次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线
-
{n,} 重复至少n次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线
-
{n} 重复n次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线
扩展的正则表达式:ERP(egrep或grep -E)
-
- 重复一个或一个以上前面的字符
-
? 复0个或一个0前面的字符
-
| 用或的方式查找多个符合的字符串
-
() 找出“用户组”字符串
-
^fi$匹配完全由fi组成的行
两者的区别,更多的是元字符的区别。
在基本正则表达式(BRE)中,只承认“^”、“$”、“.”、“[”、“]”、“*”这些是元字符,所有其他的字符都被识别为普通字符。
而在扩展正则表达式(ERE)中,则在BRE的基础上增加了“(”、“)”、“{”、“}”、“?”和“+”、“|”等元字符。
最后要特别说明的一点,只有在用反斜杠进行转义的情况下,字符“(”、“)”、“{”和“}”才会在扩展正则表达式(ERE)中被当作元字符处理,而在基本正则表达式(ERE)中,任何元字符前面加上反斜杠反而会使其被当作普通字符来处理。这样的设计,有些奇葩
用例:
-
在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test *file
-
以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
grep -r update /etc/acpi
-
反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
grep -v test *test*
-
搜索/etc/passwd文件中开头是 leo 的行:
^表示行首
grep '^leo' /etc/passwd
##第六课
**1. **