Linux

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"选项

主要三大功能:

  1. 一次显示整个文件
  • $ cat filename
  1. 从键盘创建一个文件
  • $ cat > filename
  • 能创建新文件,不能编辑已有文件
  1. 将几个文件合并为一个文件
  • $cat file1 file2 > file

其他写法:

  1. cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:
    cat /dev/fd0 > OUTFILE
  2. 相反的,如果想把 image file 写到软盘,输入:
    cat IMG_FILE > /dev/fd0
    3.cat<<EOF,以EOF输入字符为标准输入结束:
  3. 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的构成:

  1. 用户命令的使用方法,可以使用的参数等
  2. 系统调用,只有系统才能执行的函数
  3. 库调用,大多是libc函数,如qsort(3)
  4. 设备和特殊文件
  5. 文件格式和约定
  6. 游戏
  7. 宏命令包和约定
  8. 系统管理命令,多数只有root可以执行
  9. 内核程序
  10. 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分

用例:

  1. 创建空文件file1
    touch file1

  2. 将文件file1的时间记录更改为9月17日19点30分
    touch -c -t 09171930 /root/file1
    Bash

  3. /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 显示执行过程

用例:

  1. 创建一个最大权限的目录

mkdir -m 777 test

  1. 创建目录及其父目录
    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:不复制文件,只是生成链接文件

用例:

  1. 复制多个文件到目标文件(夹)下
    命令格式为:cp 源文件1 源文件2 目标文件夹 或 cp 文件* 目标文件夹

  2. 复制源文件夹到目标文件夹下:
    命令格式为:cp -r 源文件夹 目标文件夹

  3. 只有源文件比目标文件新时,才会将源文件复制给目标文件,否则,及时执行了命令,也不会执行复制:
    命令格式为:cp -u 源文件 目标文件


15. mv 命令

全拼:move file
语法:mv [option] |
用途:用来为文件或目录改名、或将文件或目录移入其它位置

参数:

  • -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份

  • -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作

  • -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件

  • -n: 不要覆盖任何已存在的文件或目录

  • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作

命令格式一图过:

  1. mv source_file(文件) dest_file(文件)
    将源文件名 source_file 改为目标文件名 dest_file

  2. mv source_file(文件) dest_directory(目录)
    将文件 source_file 移动到目标目录 dest_directory 中

  3. mv source_directory(目录) dest_directory(目录)
    目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory

  4. mv source_directory(目录) dest_file(文件)
    出错


16. rm 命令

全拼:remove
语法:remove [option] name…
用途:命令用于删除一个文件或者目录

参数:

  • -i 删除前逐一询问确认

  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认

  • -r 将目录及以下之档案亦逐一删除

注意,rm 命令是一个具有破坏性的命令,因为 rm 命令会永久性地删除文件或目录,这就意味着,如果没有对文件或目录进行备份,一旦使用 rm 命令将其删除,将无法恢复,因此,尤其在使用 rm 命令删除目录时,要慎之又慎。

用例:
全部删除:
rm -rf

17. rmdir 命令

全拼:remove directory
语法:rmdir [option] directory
用途:删除空目录,删不空会报错

参数:

  • -p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除

  • –ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息

  • -v或-verboes:显示命令的详细执行过程

  • –help:显示命令的帮助信息

  • –version:显示命令的版本信息

  • -r : 递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性

用例:

  1. 将工作目录下,名为 AAA 的子目录删除 :
    rmdir AAA
  2. 在工作目录下的 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 显示版本信息。

注意:

  1. 如果你做试验的文件的编码格式是 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的标准输入。可以在任何两个命令之间插入管道符。管道操作符之前的命令将把输出写到标准输出上。而管道后的命令将把这个标准输出当作它的标准输入来读入。

用例:

  1. 选择性删除命令:
    echo ‘文件名’ |xargs rm
    或者find -name “文件名"|xargs rm -rf

  2. 我们希望找到文件在其文件名或文件扩展中包含"页面"一词的文件
    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给目标组)

    注意:

    1. 将更新将该组作为主组的用户,且保留该组继续作为用户的主组
    2. 任何具有旧组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,代表你可自订的字符)

用例:

  1. 将文件testfile中的小写字母全部转换成大写字母,此时,可使用如下命令
    cat testfile |tr a-z A-Z
    或者
    cat testfile |tr [:lower:] [:upper:]

  2. 去除oops.txt里面的重复的小写字符
    tr -s "[a-z]"<oops.txt >result.txt

  3. 删除空行
    tr -s "[\012]" < plan.txt

    tr -s ["\n"] < plan.txt

  4. 有时需要删除文件中的^M,并代之以换行
    tr -s "[\015]" "[\n]" < file

    tr -s "[\r]" "[\n]" < file

  5. 大写到小写
    cat a.txt |tr "[a-z]" "[A-Z]" >b.txt

  6. 删除指定字符
    一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[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

  7. 转换控制字符
    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

  8. 替换passwd文件中所有冒号,代之以tab键,可以增加可读性
    tr -s "[:]" "[\011]" < /etc/passwd
    或者
    tr -s "[:]" "[\t]" < /etc/passwd

  9. 使路径具有可读性
    如果用 echo $PATH 或者echo $LD_LIBRARY_PATH等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了
    echo $PATH | tr ":" "\n"

  10. 可以在vi内使用所有这些命令!只要记住:在tr命令前要加上您希望处理的行范围和感叹号 (!),如 1,$!tr -d ‘\t’(美元符号表示最后一行)。

  11. 另外,当有人给您发送了一个在 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 来完成。


5. grep 命令

语法: grep [OPTION] “string” file
&nbsp 或者
&nbsp 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 可以去掉斜线

  • [] 表示字符集,[bcd]art can match bart、cart、dart

扩展的正则表达式:ERP(egrep或grep -E)

    • 重复一个或一个以上前面的字符
  • ? 复0个或一个0前面的字符

  • | 用或的方式查找多个符合的字符串

  • () 找出“用户组”字符串

  • ^fi$匹配完全由fi组成的行

两者的区别,更多的是元字符的区别。

在基本正则表达式(BRE)中,只承认“^”、“$”、“.”、“[”、“]”、“*”这些是元字符,所有其他的字符都被识别为普通字符。

而在扩展正则表达式(ERE)中,则在BRE的基础上增加了“(”、“)”、“{”、“}”、“?”和“+”、“|”等元字符。

最后要特别说明的一点,只有在用反斜杠进行转义的情况下,字符“(”、“)”、“{”和“}”才会在扩展正则表达式(ERE)中被当作元字符处理,而在基本正则表达式(ERE)中,任何元字符前面加上反斜杠反而会使其被当作普通字符来处理。这样的设计,有些奇葩

用例:

  1. 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
    grep test *file

  2. 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
    grep -r update /etc/acpi

  3. 反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。
    查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
    grep -v test *test*

  4. 搜索/etc/passwd文件中开头是 leo 的行:
    ^表示行首
    grep '^leo' /etc/passwd


第六课

1. ps 命令

全拼:process status
语法:ps [options] [–help]
用途:命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息

参数:

  • a:显示一个终端的所有进程,除会话引线外;
  • u:显示进程的归属用户及内存的使用情况;
  • x:显示没有控制终端的进程;
  • -l:长格式显示更加详细的信息;
  • -e:显示所有进程;
  • -f: 完整的清单格式
  • -w: 加宽显示更多信息
  • -p: 显示PID 的信息
  • -eH: 树状显示
    可以看到,ps 命令有些与众不同,它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”。

大家如果执行 “man ps” 命令,则会发现 ps 命令的帮助为了适应不同的类 UNIX 系统,可用格式非常多,不方便记忆。所以,我建议大家记忆几个固定选项即可。比如:

  • aux 可以查看系统中所有的进程;
  • -le 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
  • -l 只能看到当前 Shell 产生的进程;

字段:

  1. USER 该进程是由哪个用户产生的。

  2. PID 进程的 ID。

  3. %CPU 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。

  4. %MEM 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源

  5. VSZ 该进程占用虚拟内存的大小,单位为 KB。

  6. RSS 该进程占用实际物理内存的大小,单位为 KB。

  7. TTY 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。

  8. STAT 进程状态。常见的状态有以下几种:

  • -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
  • -R:该进程正在运行。
  • -S:该进程处于睡眠状态,可被唤醒。
  • -T:停止状态,可能是在后台暂停或进程处于除错状态。
  • -W:内存交互状态(从 2.6 内核开始无效)。
  • -X:死掉的进程(应该不会出现)。
  • -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
  • -<:高优先级(以下状态在 BSD 格式中出现)。
  • -N:低优先级。
  • -L:被锁入内存。
  • -s:包含子进程。
  • -l:多线程(小写 L)。
  • -+:位于后台。
  1. START 该进程的启动时间。

  2. TIME 该进程占用 CPU 的运算时间,注意不是系统时间。

  3. COMMAND 产生此进程的命令名

用例:

  1. 查找指定进程格式:
    ps -ef | grep 进程关键字

  2. 显示指定用户信息
    ps -u username

  3. 显示所有进程信息,连同命令行
    ps -ef

  4. 只想查看一下当前产生了哪些进程
    ps -l


2. 前台与后台进程
  1. 常规命令在前台执行

  2. 任何时候都只有一个前台进程

  3. 命令+&
    启动命令在后台。

  4. Ctrl-c
    终止前台进程。

  5. Ctrl-z
    暂停前台进程(放到后台)

  6. jops命令
    在后台列出所有进程

  7. fg #
    # 表示进程号。把#号作业放在前台


3. 时间表 at命令和cron命令
1. at

用途:一次性定时任务计划执行

语法:at [option]
参数:

  • -m 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户。

  • -c 工作标识号 显示该 at 工作的实际内容。

  • -t 时间 在指定时间提交工作并执行,时间格式为 [[CC]YY]MMDDhhmm。

  • -d 删除某个工作,需要提供相应的工作标识号(ID),同 atrm 命令的作用相同。atrm #

  • -l 列出当前所有等待运行的工作,和 atq 命令具有相同的额作用。或 atq

  • -f 脚本文件 指定所要提交的脚本文件。

at 命令时间参数可用格式:

  • HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。

  • Midnight(midnight) 代表 12:00 AM(也就是 00:00)。

  • Noon(noon) 代表 12:00 PM(相当于 12:00)。

  • Teatime(teatime) 代表 4:00 PM(相当于 16:00)。

  • 英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。

  • MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。

  • now+时间 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。

玩法:
第一步:先用rpm -q at检查是否有安装at软件包,如果没有则用yum -y install at安装

第二步:用service atd start开启服务(如果想让服务在开机就启动,可以用chkconfig atd on设置)

第三步:按语法输入参数和时间

第四步:按行输入这次要执行的指令

第五步:用D 即是ctrl+shift+d保存并退出设置

注意事项:date时间已过,会在下个周期执行指令。有些命令是权限不够无法执行的,可以先在外面跑一次或者sudo +at+option+date的方式执行

2. crontab

用途 :每天定时任务计划执行
全拼:cron table
语法:crontab [-u username] [option]
省略用户表表示操作当前用户的crontab

参数:

  • -e :编辑工作表
  • -l :列出工作表里的命令
  • -r :删除工作作
  • -i :删除前询问确认
cron格式
  • econds(秒)         :可以用数字0-59 表示,

  • Minutes(分)          :可以用数字0-59 表示,

  • Hours(时)             :可以用数字0-23表示,

  • Day-of-Month(天) :可以用数字1-31 中的任一一个值,但要注意一些特别的月份

  • Month(月)            :可以用0-11 或用字符串  “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC” 表示

  • Day-of-Week(每周):可以用数字1-7表示(1 = 星期日)或用字符口串“SUN, MON, TUE, WED, THU, FRI and SAT”表示

  • “/”:为特别单位,表示为“每”如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始, “3/20”表示表示每隔20分钟执行一次,“3”表示从第3分钟开始执行

  • “?”:表示每月的某一天,或第周的某一天

  • “L”:用于每月,或每周,表示为每月的最后一天,或每个月的最后星期几如“6L”表示“每月的最后一个星期五”

  • “W”:表示为最近工作日,如“15W”放在每月(day-of-month)字段上表示为“到本月15日最近的工作日”

  • ““#”:是用来指定“的”每月第n个工作日,例 在每周(day-of-week)这个字段中内容为"6#3" or “FRI#3” 则表示“每月第三个星期五”

Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

字段名允许的值允许的特殊字符
0-59, - * /
0-59, - * /
小时0-23, - * /
1-31, - * ? / L W C
1-12 or JAN-DEC, - * /
周几1-7 or SUN-SAT, - * ? / L C #
年(可选empty, 1970-2099, - * /
  • “?”字符:表示不确定的值

  • “,”字符:指定数个值

  • “-”字符:指定一个值的范围

  • “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

  • “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

  • “W”字符:指定离给定日期最近的工作日(周一到周五)

  • “#”字符:表示该月第几个周X。6#3表示该月第3个周五

实例:

实例1:每1分钟执行一次myCommand
* * * * * myCommand

实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb
0 */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7/1 * * * /etc/init.d/smb restart

七列的实例二:
每隔5秒执行一次:*/5 * * * * ?

每隔1分钟执行一次:0 */1 * * * ?

每天23点执行一次:0 0 23 * * ?

每天凌晨1点执行一次:0 0 1 * * ?

每月1号凌晨1点执行一次:0 0 1 1 * ?

每月最后一天23点执行一次:0 0 23 L * ?

每周星期天凌晨1点实行一次:0 0 1 ? * L

在26分、29分、33分执行一次:0 26,29,33 * * * ?

每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

玩法1:
第一步:systemctl enable crond启动服务

第二步:先vim一个txt文件,在里面按行编辑指令,并保存退出

第三步:crontab filename 完成安装

玩法2:
第一步:systemctl enable crond启动服务

第二步:crontab [-u username] -e 指定计划任务的用户,并开始按行编辑

第三步: :wr! :q 保存并退出


第七课

1. next
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值