linux资料总章

96
O感悟人生O
0.3 2017.08.02 11:45* 字数 33959

linux资料总章2.1

  • 1.0写的不好抱歉
  • 但是2.0已经改了很多
  • 但是错误还是无法避免
  • 以后资料会慢慢更新
  • 大家期待吧

命令区

系统管理与维护命令

date

  • date(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-d, --date=STRING|显示由 STRING 指定的时间, 而不是当前时间
    |-f, --file=DATEFILE| 显示 DATEFILE 中每一行指定的时间, 如同将 DATEFILE 中的每行作为 --date 的参数一样
    |-r, --reference=FILE| 显示 FILE 的最后修改时间
    |-R, --rfc-822|根据 RFC-822 指定格式输出日期
    |-s, --set=STRING|根据 STRING 设置时间
    |-u, --utc, --universal|显示或设置全球时间(格林威治时间)

clear

  • clear命令用于清除当前屏幕终端上的任何信息。

alias

  • alias(选项)(参数)
选项 说明
-p 打印已经设置的命令别名

blkid

  • blkid -L | -U
  • blkid [-c ] [-ghlLv] [-o] [-s ][-t ] [-w ] [ ...]
  • blkid -p [-s ] [-O ] [-S ][-o] ...
  • blkid -i [-s ] [-o] ...
    | 选项 | 说明 |
    | :-------- | --------:|
    | -c | 指定cache文件(default: /etc/blkid.tab, /dev/null = none)
    | -d| don't encode non-printing characters
    | -h| 显示帮助信息
    | -g| garbage collect the blkid cache
    | -o | 指定输出格式
    | -k | list all known filesystems/RAIDs and exit
    | -s | 显示指定信息,默认显示所有信息
    | -t | find device with a specific token (NAME=value pair)
    | -l | look up only first device with token specified by -t
    | -L | convert LABEL to device name
    | -U | convert UUID to device name
    | -v | 显示版本信息
    | -w | write cache to different file (/dev/null = no write) specify device(s) to probe (default: all devices) Low-level probing options:
    | -p | low-level superblocks probing (bypass cache)
    | -i| gather information about I/O limits
    | -S| overwrite device size
    | -O | probe at the given offset
    | -u | filter by "usage" (e.g. -u filesystem,raid)
    | -n| filter by filesystem type (e.g. -n vfat,ext3)

clock

选项 说明
--adjust 自动调整硬件时钟时间
--debug 运行时,输出详细的处理过程
--directisa 不通过设备文件/etc/rtc,直接对硬件时钟进行存取
--getepoch 输出硬件时钟的数值到标准输出
--hctosys 时钟同步,使系统时钟和硬件时钟同步
--se--date 设置硬件时间
--show 显示硬件时钟到标准输出
--systohc 系统时间写入硬件时钟
--test 进行测试
--utc 将硬件时钟的时间设置为UTC

echo

  • echo(选项)(参数)
选项 说明
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制) 所代表的ASCII字符;

exit

  • exit命令同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败

logout

  • logout命令用于退出当前登录的Shell,logout指令让用户退出系统,其功能和login指令相互对应。

findfs

  • findfs 通过卷标或者uuid查找文件系统,找到的设备将输出到标准输出

hwclock

  • hwclock命令是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间
  • hwclock(选项)
选项 说明
--adjust hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用--adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟
--debug 显示hwclock执行时详细的信息
--directisa hwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时,可用此参数直接以I/O指令来存取硬件时钟
--hctosys 将系统时钟调整为与目前的硬件时钟一致
--set --date=<日期与时间> 设定硬件时钟
--show 显示硬件时钟的时间与日期
--systohc 将硬件时钟调整为与目前的系统时钟一致
--test 仅测试程序,而不会实际更改硬件时钟
--utc 若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作
--version 显示版本信息

init

  • init命令是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程
  • init(选项)(参数)
选项 说明
0 停机(千万不能把initdefault 设置为0 )
1 单用户模式
2 多用户,没有 NFS
3 完全多用户模式(标准的运行级)
4 没有用到
5 X11 (xwindow) 桌面
6 重新启动 (千万不要把initdefault 设置为6 )

iostat

  • iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况
  • 同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析
  • iostat(选项)(参数)
选项 说明
-c 仅显示CPU使用情况;
-d 仅显示设备利用率;
-k 显示状态以千字节每秒为单位,而不使用块每秒;
-m 显示状态以兆字节每秒为单位;
-p 仅显示块设备和所有被使用的其他分区的状态;
-t 显示每个报告产生时的时间;
-V 显示版号并退出;
-x 显示扩展状态

hostname

  • 用来显示或者设置当前系统的主机名,主机名被许多网络程序使用,来标识主机
  • hostname(选项)(参数)
选项 说明
-v 详细信息模式
-a 显示主机别名
-d 显示DNS域名
-f 显示FQDN名称
-i 显示主机的ip地址
-s 显示短主机名称,在第一个点处截断
-y 显示NIS域名

history

  • history 命令可以用来显示曾执行过的命令,也可以根据显示的治疗来重新执行需要的命令
  • history(选项)(参数)
选项 说明
-c 清空当前历史命令
-a 将历史命令缓冲区中命令写入历史命令文件中
-r 将历史命令文件中的命令读入当前历史命令缓冲区
-w 将当前历史命令缓冲区命令写入历史命令文件中

lscpu

  • lscpu,查看 CPU 信息
    | 选项 | 说明 |
    | :-------- | --------:|
    |-h --help | 显示帮助信息
    |-p --parse |<list> 打印出可读的格式,而不是一个可解析格式
    |-s --sysroot |<dir> 指定系统根目录
    |-x --hex| 打印十六进制数

lsblk

  • lsblk 列出所有的块设备,而且还能显示他们之间的依赖关系
选项 说明
-a, --all 显示所有设备
-b, --bytes 以bytes方式显示设备大小
-d, --nodeps 不显示 slaves 或 holders
-D, --discard print discard capabilities
-e, --exclude 排除设备 (default: RAM disks)
-f, --fs 显示文件系统信息
-h, --help 显示帮助信息
-i, --ascii use ascii characters only
-m, --perms 显示权限信息
-l, --list 使用列表格式显示
-n, --noheadings 不显示标题
-o, --output 输出列
-P, --pairs 使用key="value"格式显示
-r, --raw 使用原始格式显示
-t, --topology 显示拓扑结构信息

lsof

  • lsof(list open files)是一个列出当前系统打开文件的工具
  • lsof(选项)
选项 说明
-a 列出打开文件存在的进程
-c<进程名> 列出指定进程所打开的文件
-g 列出GID号进程详情
-d<文件号> 列出占用该文件号的进程
+d<目录> 列出目录下被打开的文件
+D<目录> 递归列出目录下被打开的文件
-n<目录> 列出使用NFS的文件
-i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号> 列出指定进程号所打开的文件
-u 列出UID号进程详情
-h 显示帮助信息
-v 显示版本信息

jobs

  • jobs 显示后台运行的程序
  • jobs(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -l| 显示进程号
    | -p| 仅任务对应的显示进程号
    | -n| 显示任务状态的变化
    | -r| 仅输出运行状态(running)的任务
    | -s| 仅输出停止状态(stoped)的任务

hexdump

  • hexdump命令一般用来查看“二进制”文件的十六进制编码
  • 但实际上它能查看任何文件,而不只限于二进制文件
  • hexdump [选项] [文件]...
选项 说明
-n length 只格式化输入文件的前length个字节。
-C 输出规范的十六进制和ASCII码。
-b 单字节八进制显示。
-c 单字节字符显示。
-d 双字节十进制显示。
-o 双字节八进制显示。
-x 双字节十六进制显示。
-s 从偏移量开始输出。
-e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'

htop

  • htop是一款运行于Linux系统监控与进程管理软件,用于取代Unix下传统的top。与top只提供最消耗资源的进程列表不同,htop提供所有进程的列表,并且使用彩色标识出处理器、swap和内存状态

| Shortcut Key | Function Key | Description | 中文说明
| :-------- | --------:|
| h, ?| F1| Invoke htop Help | 查看htop使用说明
| S | F2 | Htop Setup Menu | htop| 设定
| / | F3| Search for a Process | 搜索进程
| \ | F4 | Incremental process filtering | 增量进程过滤器
| t | F5 | Tree View | 显示树形结构
| <, >| F6 | Sort by a column | 选择排序方式
| [ | F7 | Nice - (change priority) | 可减少nice值,这样就可以提高对应进程的优先级
| ]| F8| Nice + (change priority) | 可增加nice值,这样就可以降低对应进程的优先级
| k | F9 | Kill a Process | 可对进程传递信号
| q | F10 | Quit htop| 结束htop

fuser

  • fuser命令用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号,那些本地进程使用file,参数指定的本地或远程文件。对于阻塞特别设备,此命令列出了使用该设备上任何文件的进程
  • fuser(选项)(参数)
选项 说明
-l 显示信号
-4 IPv4
-6 IPv6
-a 与程序相关的所有文件
-k 删除程序相关的所有文件
-I 互交模式
-s 不显示处理信息
-u PID显示用户名
-v 运行时,显示相信处理信息
- 清零
-m 挂载文件系统
-signal 发送信号
-n 指定关键字进行搜索,如 文件、UDP、TCP
-V 显示版本显示
【文件类型说明】
c 当前目录
e 扩展
f 打开的文件
r 跟目录
m 共享库

finger

  • finger命令用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。单独执行finger指令,它会显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话
选项 说明
-l 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容;
-m 排除查找用户的真实姓名;
-s 列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话;
-p 列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容。

e2fsck

  • e2fsck(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -a| 不询问使用者意见,便自动修复文件系统
    | -b| 指定superblock,而不使用预设的superblock
    | -B<区块大小>| :指定区块的大小,单位为字节
    | -c| 一并执行badblocks,以标示损坏的区块
    | -C| 将检查过程的信息完整记录在file descriptor中,使得整个检查过程都能完整监控
    | -d|显示排错信息
    | -f|即使文件系统没有错误迹象,仍强制地检查正确性
    | -F|执行前先清除设备的缓冲区
    | -l<文件>|将文件中指定的区块加到损坏区块列表
    | -L<文件>|先清除损坏区块列表,再将文件中指定的区块加到损坏区块列表。因此损坏区块列表的区块跟文件中指定的区块是一样的
    | -n|以只读模式开启文件系统,并采取非互动方式执行,所有的问题对话均设置以"no"回答
    | -p|不询问使用者意见,便自动修复文件系统
    | -r|此参数只为了兼容性而存在,并无实际作用
    | -s|如果文件系统的字节顺序不适当,就交换字节顺序,否则不做任何动作
    | -S|不管文件系统的字节顺序,一律交换字节顺序
    | -t|显示时间信息
    | -v|执行时显示详细的信息
    | -V|显示版本信息
    | -y|采取非互动方式执行,所有的问题均设置以"yes"回答

chage

  • chage [选项] 用户名
选项 说明
-m 密码可更改的最小天数。为零时代表任何时候都可以更改密码
-M 密码保持有效的最大天数
-w 用户密码到期前,提前收到警告信息的天数
-E 帐号到期的日期。过了这天,此帐号将不可用
-d 上一次更改的日期
-i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用
-l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期

chfn

  • chfn(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-f<真实姓名>或--full-name<真实姓名>|设置真实姓名
    | -h<家中电话>或--home-phone<家中电话>|设置家中的电话号码
    | -o<办公地址>或--office<办公地址>|设置办公室的地址
    | -p<办公电话>或--office-phone<办公电话>|设置办公室的电话号码
    | -u或--help|在线帮助
    | -v或-version|显示版本信息

chsh

  • chsh(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-s或--shell|更改系统预设的shell环境
    | -l或--list-shells|列出目前系统可用的shell清单
    |-u或--help|在线帮助
    | -v或-version|显示版本信息

crontab

  • crontab(选项)(参数)
选项 说明
-e 编辑该用户的计时器设置
-l 列出该用户的计时器设置
-r 删除该用户的计时器设置
-u<用户名称> 指定要设定计时器的用户名称

compress

  • compress(选项)(参数)
选项 说明
-f 不提示用户,强制覆盖掉目标文件
-c 将结果送到标准输出,无文件被改变
-r 递归的操作方式
-b<压缩效率> 压缩效率是一个介于9~16的数值,预设值为"16",指定愈大的数值,压缩效率就愈高
-d 对文件进行解压缩而非压缩
-v 显示指令执行过程
-V 显示指令版本及程序预设值。

chown

  • chown(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -c或——changes|效果类似“-v”参数,但仅回报更改的部分
    | -f或--quite或——silent|不显示错误信息
    | -h或--no-dereference|只对符号连接的文件作修改,而不更改其他任何相关文件
    | -R或——recursive|递归处理,将指定目录下的所有文件及子目录一并处理
    | -v或——version|显示指令执行过程

dumpe2fs

  • dumpe2fs(选项)(参数)
选项 说明
-b 打印文件系统中预留的块信息
-ob<超级块> 指定检查文件系统时使用的超级块
-OB<块大小> 检查文件系统时使用的指定的块大小
-h 仅显示超级块信息
-i 从指定的文件系统映像文件中读取文件系统信息
-x 以16进制格式打印信息块成员

declare

  • declare(选项)(参数)
选项 说明
-a 声明数组变量
-f 显示函数
-i 声明整数型变量
-x 设置变量为环境变量,同export命令功能相同
-r 设置变量为只读
+/- 改变属性 “-” 设置,+“+”取消

resize2fs

  • resize2fs(选项)(参数)
选项 说明
-d :打开调试特性
-p :打印已完成的百分比进度条
-f :强制执行调整大小操作,覆盖掉安全检查操作
-F :开始执行调整大小前,刷新文件系统设备的缓冲区

at

  • at(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -f | 指定包含具体指令的任务文件|
    | -q | 指定新任务的队列名称|
    | -l | 显示待执行任务的列表 |
    | -d | 删除指定的待执行任务 |
    | -m | 任务执行完成后向用户发送E-mail |

atrm

  • atrm(选项)(参数)
选项 说明
-v 显示版本号

bc

  • bc(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-i|强制进入交互式模式|
    | -l|定义使用的标准数学库|
    | -w|对POSIX bc的扩展给出警告信息|
    | -q|不打印正常的GNU bc环境信息|
    | -v|显示指令版本信息|
    | -h|显示指令的帮助信息|
  • ifcfg命令是一个Bash脚本程序,用来设置Linux中的网络接口参数
  • ifcfg(参数)
选项 说明
-e 文件存在
-f 文件是一个 普通文件(不是一个目录或设备文件)
-s 文件大小不为零
-d 文件是一个 目录
-b 文件是一个 块设备(软盘 、光驱、 等)
-c 文件是一个 字符设备(键盘、调制解调器、声卡、等)
-p 文件是一个 管道
-h 文件是一个 符号链接
-n 判断变量是否有值
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-z 代表的是该变量是否有值
-S 文件是一个 socket

查看文件及内容处理命令

cat

  • cd (选项) (参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-n或-number|有1开始对所有输出的行数编号
    |-b或--number-nonblank|和-n相似,只不过对于空白行不编号
    | -s或--squeeze-blank|当遇到有连续两行以上的空白行,就代换为一行的空白行
    | -A|显示不可打印字符,行尾显示“$”
    | -e|等价于"-vE"选项
    | -t|等价于"-vT"选项

ln

  • lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息
    | 选项 | 说明 |
    | :-------- | --------:|
    | -a| --all 显示所有设备
    | -b| --bytes 以bytes方式显示设备大小
    | -d| --nodeps 不显示 slaves 或 holders
    | -D| --discard print discard capabilities
    | -e| --exclude 排除设备 (default: RAM disks)
    | -f| --fs 显示文件系统信息
    | -h| --help 显示帮助信息
    | -i| --ascii use ascii characters only
    | -m| --perms 显示权限信息
    | -l| --list 使用列表格式显示
    | -n| --noheadings 不显示标题
    | -o| --output 输出列
    | -P| --pairs 使用key="value"格式显示
    | -r| --raw 使用原始格式显示
    | -t| --topology 显示拓扑结构信息
选项 说明
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了- depth选项,那么-prune选项将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
find 命令还有-atime和-ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍-mtime选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
s - socket文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth 查找最大目录层数 如 1,即只查找一层目录
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
/etc/fstab 中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

cal

  • cal(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-1 | 查看一个月内的日历
    |-3 | 查看三个月内的日历
    |-h | 关闭高亮显示
    |-j |查看罗马日历
    |-m |已星期一开头,显示日历
    |-s | 已星期日开头,显示日历
    |-y | 查看12个月的日历

cut

  • cut(选项)(参数)
选项 说明
-b 仅显示行中指定直接范围的内容
-c 仅显示行中指定范围的字符
-d 指定字段的分隔符,默认的字段分隔符为“TAB”
-f 显示指定字段的内容
-n 与“-b”选项连用,不分割多字节字符

hash

  • hash 命令:用来显示和清除哈希表,执行命令的时候,系统将先查询哈希表
  • hash (选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-l |显示哈希表
    |-r| 清除哈希表
    |-d<名称> |清除哈希表
    |-p<路径>| 向哈希表中增加内容
    |-t<命令> |显示命令的完整路径

file

  • file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程
  • file(选项)(参数)
选项 说明
-b 列出辨识结果时,不显示文件名称
-c 详细显示指令执行过程,便于排错或分析程序执行的情形
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称
-L 直接显示符号连接所指向的文件类别
-m<魔法数字文件> 指定魔法数字文件
-v 显示版本信息
-z 尝试去解读压缩文件的内容

head

  • head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容
  • head(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -c| 显示每个文件的前K 字节内容;
    | -n| 显示每个文件的前K 行内容;
    | -q| 不显示包含给定文件名的文件头
    | -v| 总是显示包含给定文件名的文件头

nano

  • nano是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano
  • nano [选项] [[+行,列] 文件名]...
  • 由于用的过少不过多介绍

chattr

  • chattr(选项)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-R|:递归处理,将指令目录下的所有文件及子目录一并处理
    | -v<版本编号>|设置文件或目录版本
    | -V|显示指令执行过程
    | +<属性>|开启文件或目录的该项属性
    | -<属性>|关闭文件或目录的该项属性
    | =<属性>|指定文件或目录的该项属性

locate

  • locate命令和slocate命令都用来查找文件或目录
  • locate/slocate(选项)(参数)
选项 说明
-b, --basename 匹配唯一的路径名称的基本文件名
-c, --count 只显示找到条目的号码
-d, --database DBPATH 用 DBPATH 替代默认的数据库(/var/lib/mlocate/mlocate.db)
-e, --existing 只显示当前存在的文件条目
-L, --follow 当文件存在时跟随蔓延的符号链接 (默认)
-h, --help 显示本帮助
-i, --ignore-case 匹配模式时忽略大小写区别
-l, --limit, -n LIMIT 限制为 LIMIT项目的输出 (或 计数)
-m, --mmap 忽略向后兼容性
-P, --nofollow, -H 当检查文件时不跟随蔓延的符号链接
-0, --null 输出时以 NUL 分隔项目
-S, --statistics 不搜索项目,显示有关每个已用数据库的统计信息
-q, --quiet 不报告关于读取数据库的错误消息
-r, --regexp REGEXP 搜索基本正则表达式 REGEXP 来代替模式
--regex 模式是扩展正则表达式
-s, --stdio 忽略向后兼容性
-V, --version 显示版本信息
-w, --wholename 匹配完整路径名 (默认)

more

  • more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。
  • more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)

less

  • less命令的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键
  • less(选项)(参数)
选项 说明
-b<缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
- i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o<文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x<数字> 将“tab”键显示为规定的数字空格

tail

  • tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入
选项 说明
-c --bytes=N输出最后N个字节
-f --follow[={name descriptor}]当文件增长时,输出后续添加的数据; -f, --follow以及 --follow=descriptor 都是相同的意思
-n --lines=N输出最后N行,而非默认的最后10行
-q --quiet, --silent从不输出给出文件名的首部
-s --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
-v, --verbose 总是输出给出文件名的首部

split

  • 分割文件为不同的小片段

paste

  • 按行合并文件内容

sort

  • sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入
选项 说明
-b 忽略每行前面开始出的空格字符
-c 检查文件是否已经按照顺序排序
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
-f 排序时,将小写字母视为大写字母
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符
-m 将几个排序号的文件进行合并
-M 将前面3个字母依照月份的缩写进行排序
-n 依照数值的大小排序
-o<输出文件> 将排序后的结果存入制定的文件
-r 以相反的顺序来排序
-t<分隔字符> 指定排序时所用的栏位分隔字符
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位

uniq

  • 去除重复行

wc

  • wc命令用来计算数字
  • 选项 说明
    -c或--bytes或——chars 只显示Bytes数;
    -l或——lines 只显示列数;
    -w或——words 只显示字数。
    利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据
    选项 说明
    -c或--bytes或——chars 只显示Bytes数;
    -l或——lines 只显示列数;
    -w或——words 只显示字数。

iconv

  • 转换文件的编码格式

dos2unix

  • 将DOS格式文件转换UNIX格式

diff

  • 全拼difference,比较文件的差异,常用于文本文件

vimdiff

  • 命令行可视化文件比较工具,常用于文本文件

rev

  • rev 显示最后一个字符显示到第一个字符
  • 反向输出文件内容

grep/egrep

  • 过滤字符串,三剑客老三

join

  • 按两个文件的相同字段进行合并

tr

  • 替换或删除字符串

vi/vim

  • 命令行文本编辑器

文件压缩及解压缩命令

bzip2

  • bzip2(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -c或—stdout| 将压缩与解压缩的结果送到标准输出
    | -d或—decompress| 执行解压缩
    | -f或-force| bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件若要覆盖。请使用此参数
    | -h或—help| 在线帮助
    | -k或—keep| bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数
    | -s或—small| 降低程序执行时内存的使用量;
    | -t或—test| 测试.bz2压缩文件的完整性
    | -v或—verbose|压缩或解压缩文件时,显示详细的信息
    | -z或—compress|强制执行压缩
    | -V或—version|显示版本信息
    | --repetitive-best|若文件中有重复出现的资料时,可利用此参数提高压缩效果
    | --repetitive-fast|若文件中有重复出现的资料时,可利用此参数加快执行效果

gzip

  • gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名
选项 说明
-a或--ascii 使用ASCII文字模式。
-c或--stdout或--to-stdout 把解压后的文件输出到标准输出设备。
-f或-force 强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-h或--help 在线帮助。
-l或--list 列出压缩文件的相关信息。
-L或--license 显示版本与版权信息。
-n或--no-name 解压缩时,若压缩文件内含有远来的文件名称及时间戳记,则将其忽略不予处理。
-N或--name 解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。
-q或--quiet 不显示警告信息。
-r或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-S<压缩字尾字符串>或--suffix<压缩字尾字符串> 更改压缩字尾字符串。
-t或--test 测试压缩文件是否正确无误。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息

bunzip2

  • bunzip2(选项)(参数)
选项 说明
-f或-force 解压缩时,若输出的文件与现有文件同名时,预设不会覆盖现有的文件
-k或—keep 在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数
-s或—small 降低程序执行时,内存的使用量
-v或—verbose 解压缩文件时,显示详细的信息
-l,-license 显示版本信息
-V或—version 显示版本信息

dd

  • dd(选项)
选项 说明
bs=<字节数> 将ibs(输入)与欧巴桑(输出)设成指定的字节数
cbs=<字节数> 转换时,每次只转换指定的字节数
conv=<关键字> 指定文件转换的方式
count=<区块数> 仅读取指定的区块数
ibs=<字节数> 每次读取的字节数
obs=<字节数> 每次输出的字节数
of=<文件> 输出到文件
seek=<区块数> 一开始输出时,跳过指定的区块数
skip=<区块数> 一开始读取时,跳过指定的区块数

cpio

  • cpio(选项)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-0或--null |接受新增列控制字符,通常配合find指令的“-print0”参数使用
    |-a或--rest-access-time |重新设置文件的存取时间
    | -A或--append |附加到已存在的备份文档中,且这个备份文档必须存放在磁盘上,而不能放置于磁带机里
    | -b或--awap |此参数的效果和同时指定“-ss”参数相同;
    | -B |将输入/输出的区块大小改成5210Bytes
    | -c |使用旧ASCII备份格式
    | -C<区块大小>或--io-size=<区块大小> |设置输入/输出的区块大小,单位是Byte
    | -d或--make-directories |如有需要cpio会自行建立目录
    | -E<范本文件>或--pattern-file=<范本文件> |指定范本文件,其内含有一个或多个范本样式,让cpio解开符合范本条件的文件,格式为每列一个范本样式
    | -f或--nonmatching |让cpio解开所有不符合范本条件的文件
    | -F<备份档>或--file=<备份档> |指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档
    | -H<备份格式> |指定备份时欲使用的文件格式
    | -i或--extract |执行copy-in模式,还原备份档
    | -l<备份档> |指定备份档的名称,用来取代标准输入,也能借此通过网络使用另一台主机的保存设备读取备份档
    | -k |此参数将忽略不予处理,仅负责解决cpio不同版本间的兼容性问题
    | -l或--link |以硬连接的方式取代复制文件,可在copy-pass模式下运用
    | -L或--dereference |不建立符号连接,直接复制该连接所指向的原始文件
    | -m或preserve-modification-time |不去更改文件的更改时间
    | -M<回传信息>或--message=<回传信息> |设置更换保存媒体的信息
    | -n或--numeric-uid-gid |使用“-tv”参数列出备份档的内容时,若再加上参数“-n”,则会以用户识别和群组识别码替代拥有者和群组名称列出文件清单
    | -o或--create |执行copy-out模式,建立备份档
    | -O<备份档> |指定备份档的名称,用来取代标准输出,也能借此通过网络使用另一台主机的保存设备存放备份档
    | -p或--pass-through |执行copy-pass模式,略过备份步骤,直接将文件复制到目的目录; -r或--rename:当有文件名称需要更改时,采用互动模式
    |-s或--swap-bytes |交换每队字节的内容
    | -S或--swap-halfwords |交换每半个字节的内容
    | -t或--list |将输入的内容呈现出来
    | -u或--unconditional |置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖
    |-v或--verbose |详细显示指令的执行过程
    | -V或--dot |执行指令时。在每个文件的执行程序前面加上“.”号
    | --block-size=<区块大小> |设置输入/输出的区块大小,假如设置数值为5,则区块大小为2500,若设置成10,则区块大小为5120,以此类推
    | --force-local |强制将备份档存放在本地主机
    |--no-absolute-filenames |使用相对路径建立文件名称;
    | --quiet |不显示复制了多少区块
    | --sparse |倘若一个文件内含有大量的连续0字节,则将此文件存在稀疏文件; --version:显示版本信息

gunzip

  • gunzip命令用来解压缩文件。gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成
    -gunzip是gzip的硬链接,请参考gzip

bzcat

  • bzcat(参数)
  • bz2压缩文件:指定要显示内容的.bz2压缩文件

xz

  • xz命令是压缩,解压缩.xz后缀的文件
选项 说明
-z, --compress 强制压缩
-d, --decompress 强制解压缩
-t, --test 测试压缩文件的完整性
-l, --list 列出压缩文件中的相关信息
-k, --keep 压缩但不删除,输入文件
-f, --force 解压强制覆盖文件
-c, --stdout 标准输入,但不删除文件
-0 .. -9 压缩等级;0-2快速压缩,3-5办好压缩,6-9优异的压缩,默认为6

uname

  • uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。
选项 说明
-a或--all 显示全部的信息;
-m或--machine 显示电脑类型;
-n或-nodename 显示在网络上的主机名称;
-r或--release 显示操作系统的发行编号;
-s或--sysname 显示操作系统名称;
-v 显示操作系统的版本
-p或--processor 输出处理器类型或"unknown";
-i或--hardware-platform 输出硬件平台或"unknown";
-o或--operating-system 输出操作系统名称;

unset

  • unset命令用于删除已定义的shell变量(包括环境变量)和shell函数
  • unset命令不能够删除具有只读属性的shell变量和环境变量
    | 选项 | 说明 |
    | :-------- | --------:|
    | -f| 仅删除函数
    | -v| 仅删除变量

uncompress

  • uncompress命令用来解压缩由compress命令压缩后产生的“.Z”压缩包
选项 说明
-f 不提示用户,强制覆盖掉目标文件
-c 将结果送到标准输出,无文件被改变
-r 递归的操作方式

zcat

  • zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合
选项 说明
-S 指定gzip格式的压缩包的后缀。
-c 将文件内容写到标注输出;
-d 执行解压缩操作;
-l 显示压缩包中文件的列表
-L 显示软件许可信息;
-q 禁用警告信息;
-r 在目录上执行递归操作;
-t 测试压缩文件的完整性;
-V 显示指令的版本信息;
-l 更快的压缩速度;
-9 更高的压缩比。

有关磁盘与文件系统的命令

df

  • df(选项)(参数)
选项 说明
-a, --all 列出包括BLOCK为0的文件系统
--block-size=SIZE use SIZE-byte blocks 指定块的大小
-h,--huma-readable 用常见的格式显示出大小(例如:1K 234M 2G)
-H,--si 同上,但是这里的1k等于1000字节而不是1024字节
-i, --inodes 用信息索引点代替块表示使用状况
-k, --kilobytes 指定块大小等于1024字节来显示使用状况
-l, --local 只显示本地文件系统使用状况
-m, --megabytes 以指定块大小等于1048576字节(1M)来显示使用状况
--no-sync 在取得使用信息前禁止调用同步 (default)
-P, --portability 使用POSIX格式输出
--sync 在取得使用信息前调用同步
-t, --type=TYPE 只显示指定类型(TYPE)的文件系统
-T, --print-type 输出每个文件系统的类型
-x, --exclude-type=TYPE 只显示指定类型(TYPE)之外的文件系统.
-v (忽略)

fsck

  • fsck(选项)(参数)
  • fsck命令被用于检查并且试图修复文件系统中的错误。当文件系统发生错误四化,可用fsck指令尝试加以修复
    | 选项 | 说明 |
    | :-------- | --------:|
    | -a| 自动修复文件系统,不询问任何问题
    | -A| 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
    | -N| 不执行指令,仅列出实际执行会进行的动作
    | -P| 当搭配"-A"参数使用时,则会同时检查所有的文件系统
    | -r| 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式
    | -R| 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查
    | -s| 依序执行检查作业,而非同时执行
    | -t<文件系统类型>|指定要检查的文件系统类型
    | -T| 执行fsck指令时,不显示标题信息
    | -V| 显示指令执行过程

fdisk

  • fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。它采用传统的问答式界面,而非类似DOS fdisk的cfdisk互动式操作界面,因此在使用上较为不便,但功能却丝毫不打折扣

  • fdisk(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-b<分区大小>|指定每个分区的大小
    | -l|列出指定的外围设备的分区表状况
    | -s<分区编号>|将指定的分区大小输出到标准输出上,单位为区块
    | -u|搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
    | -v|显示版本信息

enable

  • enable(选项)(参数)
选项 说明
-n 关闭指定的内部命令
-a 显示所有激活的内部命令
-f 从指定文件中读取内部命令

export

  • export(选项)(参数)
选项 说明
-f 带边环境变量为函数名称
-n 删除指定的环境变量
-p 列出所有的环境变量

edquota

  • edquota(选项)(参数)
选项 说明
-u 设置用户的quota,这是预设的参数
-g 设置群组的quota
-p<源用户名称> 将源用户的quota设置套用至其他用户或群组
-t 设置宽限期限

e2label

  • e2label命令用来设置第二扩展文件系统的卷标
  • 文件系统:指定文件系统所对应的设备文件名
  • 新卷标:为文件系统指定新卷标

mount

  • 挂载文件系统

umount

  • 卸载文件系统

fsck

  • 检查并修复Linux文件系统

dd

  • 转换或复杂文件

dumpe2fs

  • 导出 ext2,ext3,ext4文件系统信息

dump

  • ext2,ext3,ext4文件系统备份工具

fdisk

  • 磁盘分区命令,适用于2TB以下的磁盘分区

parted

  • 磁盘分区命令,没有磁盘大小的限制,常用于2TB以上的磁盘分区

mkfs

  • 格式化创建Linux文件系统

partprobe

  • 更新内核的硬盘分区表的信息

e2fsck

  • 检查 ext2,ext3,ext4类型文件系统

mkswap

  • 创建Linux交换分区

swapon

  • 启用交换分区

swapoff

  • 关闭交换分区

sync

  • 将内存缓冲区的数据写入磁盘

resize2fs

  • 调整ext2,ext3,ext4文件系统的大小

网络设置与维护

ifconfig

  • ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了
  • ifconfig(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    | up| 启动指定网络设备/网卡
    | down | 关闭指定网络设备/网卡
    | -arp | 设置指定网卡是否支持ARP协议
    | -promisc| 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
    | -allmulti | 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
    | -a | 显示全部接口信息
    | -s | 显示摘要信息(类似于 netstat -i)
    | add | 给指定网卡配置IPv6地址
    | del | 删除指定网卡的IPv6地址
    | <硬件地址>| 配置网卡最大的传输单元
    | mtu<字节数> | 设置网卡的最大传输单元 (bytes)
    | netmask<子网掩码>| 设置网卡的子网掩码
    | tunel | 建立隧道
    | dstaddr | 设定一个远端地址,建立点对点通信
    | -broadcast<地址>| 为指定网卡设置广播协议
    | -pointtopoint<地址> | 为网卡设置点对点通讯协议
    | multicast | 为网卡设置组播标志
    | txqueuelen<长度>| 为网卡设置传输列队的长度

ip

  • ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具
  • ip(选项)(参数)
选项 说明
-V 显示指令版本信息;
-s 输出更详细的信息;
-f 强制使用指定的协议族;
-4 指定使用的网络层协议是IPv4协议;
-6 指定使用的网络层协议是IPv6协议;
-0 输出信息每条记录输出一行,即使内容较多也不换行显示;
-r 显示主机时,不使用IP地址,而使用主机的域名

ifdown

  • ifdown命令用于禁用指定的网络接口

ifup

  • ifup命令用于激活指定的网络接口

ethtool

  • ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多
选项 说明
-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
-c display the Coalesce information of the specified ethernet card。
-C Change the Coalesce setting of the specified ethernet card。
-g Display the rx/tx ring parameter information of the specified ethernet card。
-G change the rx/tx ring setting of the specified ethernet card。
-i 显示网卡驱动的信息,如驱动的名称、版本等。
-d 显示register dump信息, 部分网卡驱动不支持该选项。
-e 显示EEPROM dump信息,部分网卡驱动不支持该选项。
-E 修改网卡EEPROM byte。
-k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
-K 修改网卡Offload参数的状态。
-p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
-r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation。
-S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
-t 让网卡执行自我检测,有两种模式:offline or online。
-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。

文件和目录操作命令

ls

  • ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件
  • ls(选项)(参数)
选项 说明
-a 显示指定目录下的所有文件以及子目录,包含隐藏文件(Linux 下将“.” 开头的文件或者目录视为隐藏文档)
-d 只显示目录列表,不显示文件
-l 除文件名称外,同时将文件或者子目录的权限.使用者和大小等详细列出
-s 在每个文件后输出该文件的大小
-k 以k字节的形式表示文件的大小
-u 以文件上次被访问的时间排序
-t 以时间排序
-o 显示除组信息外的详细信息
-x 按列输出.横向排序
-r 对目录反向排序
-q 用“?” 代替不可输出的字符
-m 横向输出文件名,并以“,” 作为分割符
-S 以文件大小排序
-R 列出所有子目录下的文件
-pf 在每个文件名后附上一个字符以说明该文件的类型
-C 按列输出,纵向排序
-R 列出所有子目录下的文件
-Q 把输出的文件名用双引号括起来

cp

  • cp(选项)(参数)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-a|此参数的效果和同时指定"-dpR"参数相同
    |-d|当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
    |-f|强行复制文件或目录,不论目标文件或目录是否已存在
    | -i|覆盖既有文件之前先询问用户
    | -l|对源文件建立硬连接,而非复制文件
    | -p|保留源文件或目录的属性
    | -R/r|递归处理,将指定目录下的所有文件与子目录一并处理;
    | -s|对源文件建立符号连接,而非复制文件
    | -u|使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件
    | -S|在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀
    | -b|覆盖已存在的文件目标前将目标文件备份
    | -v|详细显示命令执行的操作

cd

  • cd (选项) (参数)
选项 说明
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录
- 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。

mkdir

  • mkdir命令用来创建目录。
  • 该命令创建由dirname命名的目录
  • 如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录
  • 如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录
  • 在创建目录时,应保证新建的目录与它所在目录下的文件没有重名

find

  • find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
  • find(选项)(参数)

mv

  • mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。
  • 如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖

pwd

  • pwd命令以绝对路径的方式显示用户当前工作目录
  • 命令将当前目录的全路径名称(从根目录)写入标准输出
  • 全部目录使用/分隔。第一个/表示根目录,最后一个目录是当前目录
  • 执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称

rename

  • rename命令用字符串替换的方式批量改变文件名
  • -L, --logical
    显示当前目录
    -P, --physical
    显示当前目录的实际物理地址

rm

  • rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变

    | 选项 | 说明 |
    | :-------- | --------:|
    | -d | 直接把欲删除的目录的硬连接数据删除成0,删除该目录
    | -f | 强制删除文件或目录
    | -i | 删除已有文件或目录之前先询问用户;
    | -r或-R | 递归处理,将指定目录下的所有文件与子目录一并处理
    | --preserve-root | 不对根目录进行递归操作
    | -v | 显示指令的详细执行过程

rmdir

  • 删除指定的空目录

touch

  • touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来
  • 二是用来创建新的空文件

tree

  • tree命令以树状图列出目录的内容
选项 说明
-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@"," "号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-L 层级显示
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外

basename

  • basename(选项)(参数)
选项 说明
--help 显示帮助
--version 显示版本号

dirname

  • dirname(选项)(参数)
    --version:显示版本号

chattr

  • 改变文件的扩展属性

lsattr

  • 查看文件扩展属性

file

  • 显示文件类型

md5sum

  • 计算和校验文件的MD5值

搜索文件命令

which

  • 查找二进制命令,按环境变量ATTH路径查找

find

  • 从磁盘遍历查找文件或目录

whereis

  • 查找二进制命令,按环境遍历PATH路径查找

locate

  • 从数据库(/var/lib/mlocate/mlocate.db)

信息显示命令

uname

  • 显示操作系统相关信息的命令

hostname

  • 显示或设置当前系统的主机名

dmesg

  • 显示开机信息,用于诊断系统故障

uptime

  • 显示系统运行时间以及负载

stat

  • 显示文件或文件系统的状态

du

  • 计算磁盘空间的使用情况

df

  • 报告文件系统磁盘空间的使用情况

top

  • 实时显示系统资源的使用情况

free

  • 查看系统内存

date

  • 显示与设置系统时间

cal

  • 查看日历等时间信息

线上查询及帮助命令

mandb

  • 更新man数据库列表

help

  • help命令用于显示shell内部命令的帮助信息
  • help命令只能显示shell内部的命令帮助信息
  • 而对于外部命令的帮助信息只能使用man或者info命令查看

man

  • man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息

    | 选项 | 说明 |

    | :-------- | --------:|

    | -a | 在所有的man帮助手册中搜索
    | -f | 等价于whatis指令,显示给定关键字的简短描述信息
    | -P | 指定内容时使用分页程序
    | -M | 指定man手册搜索的路径

进程管理相关命令

bg

  • 将一个在后台暂停的命令变成继续执行(在后台执行)

fg

  • 将后台中的命令调至前台继续运行

jobs

  • 查看当前有多少命令在后台运行

kill

  • 终止进程

killall

-通过进程名终止进程

pkill

  • 通过进程名终止进程

crontab

  • 定时任务命令

ps

-显示进程的快照

pstree

  • 树形显示进程

nice

  • 调整程序运行的优先级

nohup

  • 忽略挂起信号运行指定的命令

pgrep

-查找匹配条件的进程

runlevel

  • 查看系统当前的运行级别

init

  • 切换运行级别

service

  • 启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态

关机、重启、注销和查看系统信息的命令

shutdown

  • 关机

halt

  • 关机

poweroff

  • 关闭电源

logout

  • 退出当前登录的Shell

exit

  • 退出当前登录的shell

Ctrl+D快捷键

  • 退出当前登录的shell的快捷键

系统管理与性能监视命令

chkconfig

  • 管理Linux系统开机启动项

vmstat

  • 虚拟内存统计

mpstat

  • 显示各个可以CPU的状态统计

iostat

  • 统计系统IO

sar

  • 全面获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断和网络等性能数据

ipcrm

  • 用来删除一个或更多的消息队列、信号量集或共享内存标识

strace

  • 用于诊断、调试Linxu用户空间的跟踪器,也可用于监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等

ltrace

  • 命令会跟踪进程的库函数调用,并显现出哪个库函数被调用

内置命令及其他

echo

  • 打印变量,或者直接输出指定的字符串

printf

  • 将结果格式输出到标准输出

rpm

  • 管理rpm 包的命令

yum

  • 自动化、简单化的管理rpm包的命令

watch

  • 周期性执行给定的命令,并将命令的输出以全拼的方式显示

alias

  • 设置系统别名

unalias

  • 取消系统别名

date

  • 查看或设置系统时间

clear

  • 清除屏幕、简称清屏

history

-查看命令执行的历史记录

eject

  • 弹出光驱

time

  • 计算命令的执行时间

nc

  • 功能强大的网络工具

xargs

  • 将标准输入转换成命令行参数

exec

  • 调用并执行指令的命令

export

  • 设置或显示环境变量

unset

  • 删除变量或函数

type

  • 用于判断另外一个命令是否为内置命令

bc

  • 命令行科学计算器

查看系统用户登录信息的命令

whoami

  • 显示当前有效的用户名称,相当于执行id -un 命令

who

  • 显示目录登录系统的用户信息

w

  • 显示已经登录系统的用户列表,并显示用户正在执行的指令

last

  • 显示登入系统的用户

lastlog

  • 显示系统中所有用户最近一次登录的信息

users

  • 显示当前登录系统的所有用户的用户列表、

finger

  • 查找并显示用户信息

系统及用户权限相关命令

useradd

  • useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中
选项 说明
-d<登入目录>:指定用户登入时的启始目录;
-D 变更预设值; -e<有效期限>:指定帐号的有效期限;
-f<缓冲天数> 指定在密码过期后多少天即关闭该帐号;
-g<群组> 指定用户所属的群组;
-G<群组> 指定用户所属的附加群组;
-m 自动建立用户的登入目录;
-M 不要自动建立用户的登入目录;
-n 取消建立以用户名称为名的群组;
-r 建立系统帐号;
-s 指定用户登入后所使用的shell;
-u 指定用户id。

usermod

  • usermod - 修 改 使 用 者 帐 号

userdel

  • 删除用户
选项 说明
-f 强制删除用户,即使用户当前已登录;
-r 删除用户的同时,删除与用户相关的所有文件。

chmod

  • 改变文件或目录权限、

chown

  • 改变文件或目录的属主和属组

chgrp

  • 更改文件用户组

umask

  • 显示或设置权限掩码

深入网络操作命令

nmap

  • 网络扫描命令

lsof

  • 全名为list open files,即列举系统中已经被打开的文件

mail

  • 发送和接收邮件

mutt

  • 邮件管理命令

nslookup

  • 交互式查询互联网DNS服务器的命令

dig

  • 查找DNS解析过程

host

  • 查询DNS的命令

traceroute

  • 追踪数据传输路由的状况

tcpdump

  • 命令行的抓包工具

基础网络操作命令

telnet

  • 使用TELNET协议远程登录

ssh

  • 使用SSH加密协议远程登录

scp

  • 全拼为secure copy, 用于在不同主机之间复杂文件

wget

  • 命令行下载文件

ping

  • 测试和主机之间的连通性

route

  • 显示和设置Linux 系统的路由表

ifconfig

  • 查看、配置、启用或禁用网络接口的命令

ifup

  • 启动网卡

ifdown

  • 关闭网卡

netstat

  • 查看网络状态

ss

  • 查看网络状态

用户管理命令

glances

  • getent 用来察看系统的数据库中的相关记录
  • 用法: getent [选项...] 数据库 [键 ...]
选项 说明
-s, --service=CONFIG 要使用的服务配置
-?, --help 给出该系统求助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号

getfacl

  • 获取文件访问控制列表
  • 使用方法: getfacl [-aceEsRLPtpndvh] 文件 ...
    | 选项 | 说明 |
    | :-------- | --------:|
    | -a, --access | 仅显示文件访问控制列表
    | -d, --default | 仅显示默认的访问控制列表
    | -c, --omit-header | 不显示注释表头
    | -e, --all-effective | 显示所有的有效权限
    | -E, --no-effective | 显示无效权限
    | -s, --skip-base | 跳过只有基条目(base entries)的文件
    | -R, --recursive | 递归显示子目录
    | -L, --logical | 逻辑遍历(跟随符号链接)
    | -P, --physical | 物理遍历(不跟随符号链接)
    | -t, --tabular | 使用制表符分隔的输出格式
    | -n, --numeric | 显示数字的用户/组标识
    | -p, --absolute-names | 不去除路径前的 '/' 符号
    | -v, --version | 显示版本并退出
    | -h, --help | 显示本帮助信息

groups

  • 显示用户所在的组

grpck

  • grpck命令用于验证组文件的完整性,在验证之前,需要先锁定(lock)组文件/etc/group和/etc/shadow。
  • grpck命令检查数据是否正确存放,每条记录是否都包含足够的信息,是否有一个唯一的组名,是否包含正确的用户,是否正确设置了组的管理员等。
  • grpck检查发现错误以后,在命令行提示用户是否删除错误的记录。如果用户没有明确回答删除记录,grpck终止运行
  • grpck(选项)
    | 选项 | 说明 |
    | :-------- | --------:|
    |-r|只读模式
    | -s|排序组id

groupadd

  • groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中
  • groupadd(选项)(参数)
选项 说明
-g 指定新建工作组的id
-r 创建系统工作组,系统工作组的组ID小于500
-K 覆盖配置文件“/ect/login.defs”
-o 允许添加组ID号不唯一的工作组

groupmod

  • groupmod命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作
  • groupmod(选项)(参数)
选项 说明
-g<群组识别码> 设置欲使用的群组识别码
-o:重复使用群组识别码
-n<新群组名称> 设置欲使用的群组名称

groupdel

  • groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组
  • groupdel(参数)
  • 组:要删除的工作组名

gpasswd

  • gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具
  • gpasswd(选项)(参数)
选项 说明
-a 添加用户到组
-d 从组删除用户
-A 指定管理员
-M 指定组成员和-A的用途差不多
-r 删除密码
-R 限制用户登入组,只有组中的成员才可以用newgrp加入该组

id

  • id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需要在你的控制台输入id。不带选项输入id会显示如下。结果会使用活跃用户
选项 说明
-g或--group 显示用户所属群组的ID。
-G或--groups 显示用户所属附加群组的ID。
-n或--name 显示用户,所属群组或附加群组的名称。
-r或--real 显示实际ID。
-u或--user 显示用户ID。 -help   显示帮助。
-version 显示版本信息。

useradd

  • 添加用户

userdel

  • 删除用户

usermod

  • 修改系统已经存在的用户属性

groupadd

  • 添加用户组

passwd

  • 修改用户密码

chage

  • 修改用户密码有效期

su

  • 切换用户身份

visudo

  • 编辑/etc/sudoers

sudo

  • 以另外一个用户身份(默认root用户)执行事先在sudoers文件中运行的命令、

其他命令

let

  • let命令是bash中用于计算的工具,提供常用运算符还提供了方幂**运算符。在变量的房屋计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1
  • let arg [arg ...] #arg代表运算式
    -自加操作let no++ 自减操作let no-- 简写形式let no+=10,let no-=20,分别等同于let no=no+10,let no=no-20

lsusb

  • lsusb命令用于显示本机的USB设备列表,以及USB设备的详细信息
  • lsusb(选项)
    | 选项 | 说明 |
    | :-------- | --------:|
    | -D | 设备路径 不扫描/proc/bus/usb,而以指定的设备路径取代
    | -p | 内核路径 使用其他USB设备在内核的路径,默认为/proc/bus/usb
    | -t | 将USB设备以树状架构输出
    | -v | 列出较详细的运行过程
    | -vv | 列出完整的运行过程
    | -V| 显示版本信息

lvscan

  • lvscan命令用于扫描当前系统中存在的所有的LVM逻辑卷。使用lvscan指令可以发现系统中的所有逻辑卷,及其对应的设备文件

  • -b:显示逻辑卷的主设备和次设备号

lvcreate

  • lvcreate命令用于创建LVM的逻辑卷。逻辑卷是创建在卷组之上的。逻辑卷对应的设备文件保存在卷组目录下,例如:在卷组"vg1000"上创建一个逻辑卷"lvol0",则此逻辑卷对应的设备文件为"/dev/vg1000/lvol0"
  • lvcreate(选项)(参数)
选项 说明
-L 指定逻辑卷的大小,单位为“kKmMgGtT”字节
-l 指定逻辑卷的大小(LE数)
-n 后面跟逻辑卷名
-s 创建快照

lvremove

  • lvremove命令用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令加载,则不能使用lvremove命令删除。必须使用umount命令卸载后,逻辑卷方可被删除
  • lvremove(选项)(参数)
  • -f:强制删除

lsmod

  • lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入

OpenSSL

  • OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用
  • 在OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大

pidof

  • pidof命令用于查找指定名称的进程的进程号id号
  • pidof(选项)(参数)
选项 说明
-s 仅返回一个进程号;
-c 仅显示具有相同“root”目录的进程;
-x 显示由脚本开启的进程;
-o 指定不显示的进程ID。

pstree

  • pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观
  • pstree(选项)
选项 说明
-a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c 不使用精简标示法;
-G 使用VT100终端机的列绘图字符;
-h 列出树状图时,特别标明现在执行的程序;
-H<程序识别码> 此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l 采用长列格式显示树状图;
-n 用程序识别码排序。预设是以程序名称来排序;
-p 显示程序识别码;
-u 显示用户名称;
-U 使用UTF-8列绘图字符;
-V 显示版本信息。

pmap

  • pmap命令用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具
  • pmap(选项)(参数)
选项 说明
-x 显示扩展格式;
-d 显示设备格式;
-q 不显示头尾行;
-V 显示指定版本。

ps

  • ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的
  • ps(选项)
选项 说明
-a 显示所有终端机下执行的进程,除了阶段作业领导者之外。
a 显示现行终端机下的所有进程,包括其他用户的进程。
-A 显示所有进程。
-c 显示CLS和PRI栏位。
c 列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
-C<指令名称> 指定执行指令的名称,并列出该指令的进程的状况。
-d 显示所有进程,但不包括阶段作业领导者的进程。
-e 此参数的效果和指定"A"参数相同。
e 列出进程时,显示每个进程所使用的环境变量。
-f 显示UID,PPIP,C与STIME栏位。
f 用ASCII字符显示树状结构,表达进程间的相互关系。
-g<群组名称> 此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
g 显示现行终端机下的所有进程,包括群组领导者的进程。
-G<群组识别码> 列出属于该群组的进程的状况,也可使用群组名称来指定。
h 不显示标题列。
-H 显示树状结构,表示进程间的相互关系。
-j或j 采用工作控制的格式显示进程状况。
-l或l 采用详细的格式来显示进程状况。
L 列出栏位的相关信息。
-m或m 显示所有的执行绪。
n 以数字来表示USER和WCHAN栏位。
-N 显示所有的进程,除了执行ps指令终端机下的进程之外。
-p<进程识别码> 指定进程识别码,并列出该进程的状况。
p<进程识别码> 此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
r 只列出现行终端机正在执行中的进程。
-s<阶段作业> 指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
s 采用进程信号的格式显示进程状况。
S 列出进程时,包括已中断的子进程资料。
-t<终端机编号> 指定终端机编号,并列出属于该终端机的进程的状况。
t<终端机编号> 此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
-T 显示现行终端机下的所有进程。
-u<用户识别码> 此参数的效果和指定"-U"参数相同。
u 以用户为主的格式来显示进程状况。
-U<用户识别码> 列出属于该用户的进程的状况,也可使用用户名称来指定。
U<用户名称> 列出属于该用户的进程的状况。
v 采用虚拟内存的格式显示进程状况。
-V或V 显示版本信息。
-w或w 采用宽阔的格式来显示进程状况。
x 显示所有进程,不以终端机来区分。
X 采用旧式的Linux i386登陆格式显示进程状况

pvcreate

  • pvcreate命令用于将物理硬盘分区初始化为物理卷,以便LVM使用
  • pvcreate(选项)(参数)
选项 说明
-f 强制创建物理卷,不需要用户确认
-u 指定设备的UUID
-y 所有的问题都回答“yes”
-Z 是否利用前4个扇区

pvs

  • pvs命令用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息,如果要得到更加详细的信息可以使用pvdisplay命令
  • pvs(选项)(参数)
  • --noheadings:不输出标题头
  • --nosuffix:不输出空间大小的单位

pvdisplay

  • pvdisplay命令用于显示物理卷的属性。
  • pvdisplay命令显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID
  • pvdisplay(选项)(参数)
  • -s:以短格式输出
  • -m:显示PE到LE的映射

pvremove

  • pvremove命令用于删除一个存在的物理卷。使用pvremove指令删除物理卷时,它将LVM分区上的物理卷信息删除,使其不再被视为一个物理卷
  • pvremove(选项)(参数)
选项 说明
-d 调试模式
-f 强制删除
-y 对提问回答“yes”

pvmove

  • pvmove 搬移PV中的资料(只限于同一VG中)

  • 用法:pvmove [-n ] []

paste

  • paste命令用于将多个文件按照列队列进行合并
  • paste(选项)(参数)
  • -d<间隔字符>或--delimiters=<间隔字符>:用指定的间隔字符取代跳格字符;
  • -s或——serial串列进行而非平行处理

partx

  • partx命令告用来诉内核当前磁盘的分区情况,对一个磁盘或者分区表类型,尝试解析分区表。可以增加或删除分区。但不是fdisk,增加,删除分区对磁盘造成改变,只是告诉内核当前磁盘的分区情况
  • partx [-a|-d|-l] [--type TYPE] [--nr M-N] [partition] disk
选项 说明
-a 增加制定的分区或读磁盘新增的分区
-d 删除制定或所有的分区
-l 列出分区
--type 指定分区类型。dos,bsd,solaris,unix,或者gpt
--nr M-N 指定分区范围

partprobe

  • partprobe命令用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区
  • partprobe(选项)(参数)
选项 说明
-d 不更新内核
-s 显示摘要和分区
-h 显示帮助信息
-v 显示版本信息

parted

  • parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具
  • 与fdisk不同,它支持调整分区的大小
  • 作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型
  • 但是,它可以处理最常见的分区格式
  • 包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区
  • parted(选项)(参数)
选项 说明
-h 显示帮助信息;
-i 交互式模式;
-s 脚本模式,不提示用户;
-v 显示版本号。

pwconv

  • pwconv命令用来开启用户的投影密码
  • Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于/etc目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽
  • 投影密码将文件内的密码改存在/etc目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性

pwunconv

  • pwunconv命令与pwconv功能相反,用来关闭用户的投影密码。它会把密码从shadow文件内,重回存到passwd文件里

pwd

  • pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔
  • 第一个/表示根目录,最后一个目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称
    | 选项 | 说明 |
    | :-------- | --------:|
    | -L | 显示当前目录
    | -P | 显示当前目录的实际物理地址

passwd

  • passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码
  • 只有管理者可以指定用户名称,一般用户只能变更自己的密码
  • passwd(选项)(参数)
选项 说明
-d 删除密码,仅有系统管理者才能使用;
-f 强制执行;
-k 设置只有在密码过期失效后,方能更新;
-l 锁住密码;
-s 列出密码的相关信息,仅有系统管理者才能使用;
-u 解开已上锁的帐号。

pgrep

  • pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行

  • pgrep(选项)(参数)

    | 选项 | 说明 |
    | :-------- | --------:|
    | -f 显示完整程序
    | -l 显示源代码
    | -n 显示新程序
    | -o 显示旧程序
    | -v 与条件不符合的程序
    | -x 与条件符合的程序
    | -p<进程号> | 列出父进程为用户指定进程的进程信息
    | -t<终端> | 指定终端下的所有程序
    | -u<用户> | 指定用户的程序

pkill

  • pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉

  • pkill(选项)(参数)

    | 选项 | 说明 |
    | :-------- | --------:|
    |-f | 显示完整程序
    |-l |显示源代码
    |-n | 显示新程序
    |-o |显示旧程序
    |-v |与条件不符合的程序
    |-x |与条件符合的程序
    |-p<进程号> |列出父进程为用户指定进程的进程信息
    |-t<终端> |指定终端下的所有程序
    |-u<用户> | 指定用户的程序

quotacheck

  • quotacheck 命令:用于扫描挂载的文件系统并设置磁盘的空间与限制\

  • quotacheck(选项)(参数)

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a | 扫描所有分区
    | -b | 备份
    | -d | 调试模式
    | -c | 重新创建文件
    | -f | 强迫检查
    | -i | 交互模式
    | -v | 运行时显示详细的处理信息
    | -g | 显示群组所占的目录文件数
    | -u | 显示每个用户所占的目录数
    | -M | 『强制』进行quotacheck的扫描。

quotaon

  • quotaon 命令:用来开启用户的磁盘空间的限制
  • quotaon(选项)(参数)
选项 说明
-a 开启在/ect/fstab文件里,有加入quota设置的分区的空间限制;
-g 开启群组的磁盘空间限制;
-u 开启用户的磁盘空间限制;
-v 显示指令指令执行过程。

quotaoff

  • quotaoff 命令:用来关闭用户的磁盘空间的限制

  • quotaoff(选项)(参数)

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a | 关闭所有的磁盘配额限制
    | -g | 组磁盘配额限制
    | -p | 列出状态
    | -u | 用户配额限制
    | -v | 运行时显示详细的处理信息

quota

  • 显示磁盘已使用的空间与限制

  • 语  法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...]

    | 选项 | 说明 |
    | :-------- | --------:|
    | -g | 列出群组的磁盘空间限制。
    | -q | 简明列表,只列出超过限制的部分。
    | -u | 列出用户的磁盘空间限制。
    | -v | 显示该用户或群组,在所有挂入系统的存储设备的空间限制。
    | -V | 显示版本信息。

kill

  • kill 命令:发送指定的信号到相应进程。不指定信号将发送SIGTERM(15)终止指定进程。若仍无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程
选项 说明
-l <信号变化>,若不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户

killall

  • killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。我们可以使用kill命令杀死指定进程PID的进程

  • 如果要找到我们需要杀死的进程

  • 我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,是一个很好用的命令

  • killall(选项)(参数)

    | 选项 | 说明 |
    | :-------- | --------:|
    | -e | 对长名称进行精确匹配;
    | -l | 忽略大小写的不同;
    | -p | 杀死进程所属的进程组;
    | -i | 交互式杀死进程,杀死进程前需要进行确认;
    | -l | 打印所有已知信号列表;
    | -q | 如果没有进程被杀死。则不输出任何信息;
    | -r | 使用正规表达式匹配要杀死的进程名称;
    | -s | 用指定的进程号代替默认信号“SIGTERM”;
    | -u | 杀死指定用户的进程。

mdadm

  • mdadm 用于建设,管理和监控RAID阵列
  • 用法:

mdadm --create device options...
用未使用的设备,创建raid选项,
mdadm --assemble device options...
合并先前创建的raid阵列。
mdadm --build device options...
创建或合并没有元数据的一个raid。
mdadm --manage device options...
对现有阵列进行更改
mdadm --misc options... devices
报告或修改各种MD相关设备的。
mdadm --grow options device
调整以激活的raid阵列
mdadm --incremental device
从一个raid中,添加/删除设备
mdadm --monitor options...
监视一个或多个raid阵列的变化
mdadm device options...
--manage的简写

mkfs

  • mkfs命令用于在设备上(通常为硬盘)创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行
  • 使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable]
选项 说明
fs 指定建立文件系统时的参数;
-t<文件系统类型> 指定要建立何种文件系统;
-v 显示版本信息与详细的使用方法;
-V 显示简要的使用方法;
-c 在制做档案系统前,检查该partition是否有坏轨。

mtr

  • Mtr是 Linux中有一个非常棒的网络连通性判断工具,它结合了ping, traceroute,nslookup 的相关特性

mke2fs

  • mke2fs命令被用于创建磁盘分区上的“etc2/etc3”文件系统9
选项 说明
-E <扩展参数> 为要创建的文件系统指定一些参数
-f <不连续区段大小> 不知道连续区段的大小
-F 强制执行,即使指定设备没有被挂载或者不是块设备
-l <文件> 从指定文件中读取坏的块列表
-i <字节> 指定每个inode的字节数
-j 创建使用ext3卷号的文件系统
-J <扩展参数> 为使用ext3卷号的文件系统指定一些参数
-L 设置创建的文件系统的标签
-N 指定iniode的数量
-q 执行时不显示任何信息
-E <扩展选项> 为要创建的文件系统指定一些可选项
-f <不连续区段大小> 指定不连接区段的大小
-F 强制执行,即使指定设备没有被挂载或者不是块设备
-l <文件> 从指定的文件中读取坏的块列表
-i <字节> 指定每个inode的字节数
-j 创建使用ext3卷号的文件系统
-J <扩展选项> 为使用ext3卷号文件系统指定一些选项
-L 设置创建的文件系统的标签
-m <百分比值> 指定给管理员保留区块的比例,预设为5%。
-N 指定inode的数量
-q 执行时不显示任何信息
-V 显示版本信息

mount

  • mount命令用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据
  • 因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载
选项 说明
-a 加载文件/etc/fstab中设置的所有设备
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程
-F 需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度
-h 显示在线帮助信息
-L <标签> 加载文件系统标签为<标签>的设备
-l 显示已加载的文件系统列表(同直接执行mount)
-n 不将加载信息记录在/etc/mtab文件中

modprobe

  • modprobe命令用于智能地向内核中加载模块或者从内核中移除模块

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a或--all | 载入全部的模块;
    | -c或--show-conf | 显示所有模块的设置信息;
    | -d或--debug | 使用排错模式;
    | -l或--list | 显示可用的模块;
    | -r或--remove | 模块闲置不用时,即自动卸载模块;
    | -t或--type | 指定模块类型;
    | -v或--verbose | 执行时显示详细的信息;
    | -V或--version | 显示版本信息;

选项 说明
-m, --mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask
-p, --parents 需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理
-v, --verbose 每次创建新目录都显示信息
-Z, --context=CTX 将每个创建的目录的SELinux 安全环境设置为CTX

mknod

  • mknod命令用于创建Linux中的字符设备文件和块设备文件
  • 用法:mknod [选项]... 名称 类型 [主设备号 次设备号]
    | 选项 | 说明 |
    | :-------- | --------:|
    | -m, --mode=模式 | 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask
    |-Z, --context=CTX |将对应名称文件的SELinux 安全环境设置为CTX

mesg

  • mesg命令用于设置当前终端的写权限,即是否让其他用户向本终端发信息。将mesg设置y时,其他用户可利用write命令将信息直接显示在您的屏幕上

mkswap

  • 设置交换区(swap area)

  • mkswap [-cf][-v0][-v1][设备名称或文件][交换区大小]

    | 选项 | 说明 |
    | :-------- | --------:|
    | -c | 建立交换区前,先检查是否有损坏的区块;
    | -f | 在SPARC电脑上建立交换区时,要加上此参数
    | -v0 | 建立旧式交换区,此为预设值;
    | -v1 | 建立新式交换区。

mkisofs

  • mkisofs命令用来将指定的目录与文件做成ISO 9660格式的映像文件,以供刻录光盘
  • mkisofs(选项)(参数)
  • 由于选项过多请去网上查

nl

  • nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能

  • 1.命令格式:
    nl [选项]... [文件]..

  • 2.命令参数:

  • -b :指定行号指定的方式,主要有两种:

    • -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    • -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:

    • -n ln :行号在萤幕的最左方显示;
    • -n rn :行号在自己栏位的最右方显示,且不加 0 ;
  • -n rz :行号在自己栏位的最右方显示,且加 0 ;

  • -w :行号栏位的占用的位数。

  • -p 在逻辑定界符处不重新开始计算。

netstat

  • netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a或--all:显示所有连线中的Socket;
    | -A<网络类型>或--<网络类型> | 列出该网络类型连线中的相关地址;
    | -c或--continuous | 持续列出网络状态;
    | -C或--cache | 显示路由器配置的快取信息;
    | -e或--extend | 显示网络其他相关信息;
    | -F或--fib | 显示FIB;
    | -g或--groups | 显示多重广播功能群组组员名单;
    | -h或--help | 在线帮助;
    | -i或--interfaces | 显示网络界面信息表单;
    | -l或--listening | 显示监控中的服务器的Socket;
    | -M或--masquerade | 显示伪装的网络连线;
    | -n或--numeric | 直接使用ip地址,而不通过域名服务器;
    | -N或--netlink或--symbolic | 显示网络硬件外围设备的符号连接名称;
    | -o或--timers | 显示计时器;
    | -p或--programs | 显示正在使用Socket的程序识别码和程序名称;
    | -r或--route | 显示Routing Table;
    | -s或--statistice | 显示网络工作信息统计表;
    | -t或--tcp | 显示TCP传输协议的连线状况;
    | -u或--udp | 显示UDP传输协议的连线状况;
    | -v或--verbose | 显示指令执行过程;
    | -V或--version | 显示版本信息;
    | -w或--raw | 显示RAW传输协议的连线状况;
    | -x或--unix | 此参数的效果和指定"-A unix"参数相同;
    | --ip或--inet | 此参数的效果和指定"-A inet"参数相同

newgrp

  • 登入另一个群组
  • 补充说明:newgrp指令类似login指令,当它是以相同的帐号,另一个群组名称,再次登入系统。欲使用newgrp指令切换群组,您必须是该群组的用户,否则将无法登入指定的群组。单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则newgrp指令会登入该用户名称的预设群组

ntpdate

  • ntpdate 使用网络计时协议(NTP)设置日期和时间

nc

  • 功能强大的网络工具

  • nc命令是netcat命令的简称,都是用来设置路由器

    | 选项 | 说明 |
    | :-------- | --------:|
    | -g<网关> | 设置路由器跃程通信网关,最多可设置8个
    | -G<指向器数目> | 设置来源路由指向器,其数值为4的倍数
    | -h | 在线帮助
    | -i<延迟秒数> | 设置时间间隔,以便传送信息及扫描通信端口
    | -l | 使用监听模式,管控传入的资料
    | -n | 直接使用IP地址,而不通过域名服务器
    | -o<输出文件> | 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存
    | -p<通信端口> | 设置本地主机使用的通信端口
    | -r | 乱数指定本地与远端主机的通信端口
    | -s<来源位址> | 设置本地主机送出数据包的IP地址
    | -u | 使用UDP传输协议
    | -v | 显示指令执行过程
    | -w<超时秒数> | 设置等待连线的时间
    | -z | 使用0输入/输出模式,只在扫描通信端口时使用

repquota

  • repquota 可以显示磁盘空间的限制以及磁盘的使用情况

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a | 列出所有文件系统的情况
    | -g | 显示群组的使用情况。
    | -n | 以数字的形式显示
    | -s | 显示详细情况
    | -u | 显示用户的磁盘使用情况
    | -v | 显示所有文件系统的磁盘使用情况

rmmod

  • rmmod命令用于从当前运行的内核中移除指定的内核模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心
  • 你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们

reboot

  • 电脑重启

    | 选项 | 说明 |
    | :-------- | --------:|
    | -d | 重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果
    | -f | 强制重新开机,不调用shutdown指令的功能
    | -i | 在重开机之前,先关闭所有网络界面
    | -n | 重开机之前不检查是否有未结束的程序
    | -w | 仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件

rz

  • 上传工具

route

  • route程序对内核的IP选路表进行操作。它主要用于通过已用ifconfig(8)程序配置好的接口来指定的主机或网络设置静态路由

    | 选项 | 说明 |
    | :-------- | --------:|
    | -A | 设置地址类型;
    | -C | 打印将Linux核心的路由缓存
    | -v | 详细信息模式
    | -n | 不执行DNS反向查找,直接显示数字形式的IP地址
    | -e | netstat格式显示路由表
    | -net | 到一个网络的路由表
    | -host | 到一个主机的路由表

read

  • read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
    | 选项 | 说明 |
    | :-------- | --------:|
    |-a | 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符
    |-d | 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志,会举例说明
    |-p | 后面跟提示信息,即在输入前打印提示信息
    |-e |在输入的时候可以时候命令补全功能
    |-n |后跟一个数字,定义输入文本的长度,很实用
    |-r |屏蔽,如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了
    |-s |安静模式,在输入字符时不再屏幕上显示,例如login时输入密码
    |-t |后面跟秒数,定义输入字符的等待时间
    |-u |后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的

sed

  • sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响
  • 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕
  • 接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出
  • Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

ss

  • 是类似netstat的工具。能显示查看网络状态信息,包括TCP、UDP连接,端口

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a | 显示所有网络连接
    | -l | 显示LISTEN状态的连接(连接打开)
    | -m | 显示内存信息(用于tcp_diag)
    | -o | 显示Tcp 定时器x
    | -p | 显示进程信息
    | -s | 连接统计
    | -d | 只显示 DCCP信息 (等同于 -A dccp)
    | -u | 只显示udp信息 (等同于 -A udp)
    | -w | 只显示 RAW信息 (等同于 -A raw)
    | -t | 只显示tcp信息 (等同于 -A tcp)
    | -x | 只显示Unix通讯信息 (等同于 -A unix)
    | -4 | 只显示 IPV4信息
    | -6 | 只显示 IPV6信息

sleep

  • sleep命令暂停指定的时间
  • 时间长度,后面可接 s、m、h 或 d,其中 s 为秒,m 为 分钟,h 为小时,d 为日数

swapon

  • swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存

swapoff

  • swapoff :关闭系统交换分区
  • -a 关闭所有交换设备
  • -h 帮助信息
  • -V 版本信息

setfacl

  • setfacl命令是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名

| -b,--remove-all | 删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留
| -k,--remove-default | 删除缺省的acl规则。如果没有缺省规则,将不提示
| -n,--no-mask | 不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
| --mask | 重新计算有效权限,即使ACL mask被明确指定。 -d,--default:设定默认的acl规则
| -R,--recursive | 递归的对所有文件及目录进行操作
| -L,--logical | 跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录
| -P |--physical | 跳过所有符号链接,包括符号链接文件

ssh

  • ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器

    | 选项 | 说明 |
    | :-------- | --------:|
    |-1 |强制使用ssh协议版本1
    |-2 |强制使用ssh协议版本2
    |-4 |强制使用IPv4地址
    |-6 |强制使用IPv6地址
    |-A |开启认证代理连接转发功能
    |-a |关闭认证代理连接转发功能
    |-b |使用本机指定地址作为对应连接的源ip地址
    |-C |请求压缩所有数据
    |-F |指定ssh指令的配置文件
    |-f |后台执行ssh指令
    | -g |允许远程主机连接主机的转发端口
    | -i |指定身份文件
    | -l |指定连接远程服务器登录用户名
    |-N |不执行远程指令
    |-o |指定配置选项
    |-p |指定远程服务器上的端口
    |-q |静默模式
    |-X |开启X11转发功能
    |-x |关闭X11转发功能
    |-y |开启信任X11转发功能

source

  • source 命令:常用于重新执行刚修改的初始化文件。如/etc/profile , bash_profile, bashrc?通过 source命令 在不重启的情况下生效
  • source 又称:“点命令”是一个点符号。如: abc env?来执行脚本

scp

  • scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的
  • 可能会稍微影响一下速度
  • 当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来
  • 另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了
  • 虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用

shred

  • 多次覆盖文件,使得即使是昂贵的硬件探测仪器也难以将数据复原

    | 选项 | 说明 |
    | :-------- | --------:|
    | -f | --force 必要时修改权限以使目标可写
    | -n, | --iterations=N 覆盖N 次,而非使用默认的3 次
    | --random-source=文件 | 从指定文件中取出随机字节
    | -s, | --size=N 粉碎数据为指定字节的碎片(可使用K、M 和G 作为单位)
    | -u, | --remove 覆盖后截断并删除文件
    | -v, | --verbose 显示详细信息
    | -x, | --exact 不将文件大小增加至最接近的块大小
    | -z, | --zero 最后一次使用0 进行覆盖以隐藏覆盖动作

stat

  • stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细

-L, --dereference 跟随链接
-f, --file-system 显示文件系统状态而非文件状态
-c --format=格式 使用指定输出格式代替默认值,每用一次指定格式换一新行
--printf=格式 类似 --format,但是会解释反斜杠转义符,不使用换行作
输出结尾。如果您仍希望使用换行,可以在格式中
加入"\n"
-t, --terse 使用简洁格式输出
--help 显示此帮助信息并退出
--version 显示版本信息并退出

startx

  • 启动图形界面

screen

  • Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能

  • 下面会单个解说

shutdown

  • shutdown命令用来系统关机命令。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作
选项 说明
-c 当执行“shutdown -h 11:50”指令时,只要按+键就可以中断关机的指令
-f 重新启动时不执行fsck;
-F 重新启动时执行fsck
-h 将系统关机;
-k 只是送出信息给所有用户,但不会实际关机;
-n 不调用init程序进行关机,而由shutdown自己进行;
-r shutdown之后重新启动; -t<秒数>:送出警告信息和删除信息之间要延迟多少秒。

su

  • su - 运行替换用户和组标识的shell
选项 说明
-, -l --login 使得shell为可登录的shell
-c --commmand=COMMAND 传递单个COMMAND给-c的shell.
-f --fast 传递-f给shell(针对csh或tcsh)
-m --preserve-environment 不重置环境变量
-p 与-m同
-s, --shell=SHELL 如果/etc/shells允许,运行SHELL.

set

  • set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值

  • 使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式

  • set命令不能够定义新的shell变量

  • 如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可

    | 选项 | 说明 |
    | :-------- | --------:|
    | -a | 标示已修改的变量,以供输出至环境变量
    | -b | 使被中止的后台程序立刻回报执行状态
    | -C | 转向所产生的文件无法覆盖已存在的文件
    | -d | Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行,使用-d参数可取消
    | -e | 若指令传回值不等于0,则立即退出shell
    | -f | 取消使用通配符
    | -h | 自动记录函数的所在位置
    | -H Shell | 可利用"!"加<指令编号>的方式来执行history中记录的指令
    | -k | 指令所给的参数都会被视为此指令的环境变量
    | -l | 记录for循环的变量名称
    | -m | 使用监视模式
    | -n | 只读取指令,而不实际执行
    | -p | 启动优先顺序模式
    | -P | 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连
    | -t| 执行完随后的指令,即退出shell
    | -u | 当执行时使用到未定义过的变量,则显示错误信息
    | -v | 显示shell所读取的输入值
    | -x | 执行指令后,会先显示该指令及所下的参数

top

  • top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理

    | 选项 | 说明 |
    | :-------- | --------:|
    |-b |以批处理模式操作
    |-c |显示完整的治命令
    |-d |屏幕刷新间隔时间
    |-I |忽略失效过程
    | -s |保密模式
    | -S |累积模式
    | -i<时间> |设置间隔时间
    |-u<用户名> |指定用户名
    | -p<进程号> |指定进程
    | -n<次数> |循环显示的次数

traceroute

  • traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes
选项 说明
-d 使用Socket层级的排错功能
-f<存活数值> 设置第一个检测数据包的存活数值TTL的大小
-F 设置勿离断位
-g<网关> 设置来源路由网关,最多可设置8个
-i<网络界面> 使用指定的网络界面送出数据包
-I 使用ICMP回应取代UDP资料信息
-m<存活数值> 设置检测数据包的最大存活数值TTL的大小
-n 直接使用IP地址而非主机名称
-p<通信端口> 设置UDP传输协议的通信端口
-q 设置每一跳的探测包数量。默认是3
-r 忽略普通的Routing Table,直接将数据包送到远端主机上
-s<来源地址> 设置本地主机送出数据包的IP地址
-t<服务类型> 设置检测数据包的TOS数值
-v 详细显示指令的执行过程
-w<超时秒数> 设置等待远端主机回报的时间
-x 开启或关闭数据包的正确性检验

tracepath

  • tracepath 用来追踪连接到目标地址的所经过的路由

tune2fs

  • tune2fs命令允许系统管理员调整“ext2/ext3”文件系统中的可该参数。Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式

    | 选项 | 说明 |
    | :-------- | --------:|
    | -c| 调整最大加载次数
    | -C| 设置文件系统已经被加载的次数
    | -e| 设置内核代码检测到错误时的行为
    | -f| 强制执行修改,即使发生错误
    | -i| 设置相邻两次文件系统检查的相隔时间
    | -j| 为“ext2”文件系统添加日志功能,将其转换为“ext3”文件系统
    | -l| 显示文件超级块内容
    | -L| 设置文件系统卷标
    | -m| 显示文件保留块的百分比
    | -M| 设置文件系统最后被加载到的目录
    | -o| 设置或清除文件系统加载的特性或选项
    | -O| 设置或清除文件系统的特性或选项
    | -r| 设置文件系统保留块的大小
    | -T| 设置文件系统上次被检查的时间
    | -u| 设置可以使用文件系统保留块的用户
    | -U| 设置文件系统的UUID

test

  • test命令是shell环境中测试条件表达式的实用工具
选项 说明
-b<文件>v如果文件为一个块特殊文件,则为真
-c<文件> 如果文件为一个字符特殊文件,则为真
-d<文件> 如果文件为一个目录,则为真
-e<文件> 如果文件存在,则为真
-f<文件> 如果文件为一个普通文件,则为真
-g<文件> 如果设置了文件的SGID位,则为真
-G<文件> 如果文件存在且归该组所有,则为真
-k<文件> 如果设置了文件的粘着位,则为真
-O<文件> 如果文件存在并且归该用户所有,则为真
-p<文件> 如果文件为一个命名管道,则为真
-r<文件> 如果文件可读,则为真
-s<文件> 如果文件的长度不为零,则为真
-S<文件> 如果文件为一个套接字特殊文件,则为真
-u<文件> 如果设置了文件的SUID位,则为真
-w<文件> 如果文件可写,则为真
-x<文件> 如果文件可执行,则为真

tac

  • tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示

    选项 说明
    -b, --before 在行前而非行尾添加分隔标志
    -r, --regex 将分隔标志视作正则表达式来解析
    -s, --separator=字符串 使用指定字符串代替换行作为分隔标志

tty

  • 显示当前终端

time

  • time命令用于统计给定命令所花费的总时间

type

  • type 命令被用于判断另外一个命令是否是内置命令

    选项 说明
    -a 显示一个名字的所有可能
    -t 判断一个名字当前是否是alias、keyword、function、builtin、file
    -p 查看一个外部命令的执行路径
    -P 查看内部命令路径

tar

  • tar 命令:用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的

    选项 说明
    -A 追加 tar 文件至归档
    -c 创建一个新归档
    -d 找出归档和文件系统的差异
    -r -追加文件至归档结尾
    -t 列出归档内容
    -u -仅追加比归档中副本更新的文件
    -x 从归档中解出文件

xargs

  • xargs 又称管道命令,构造参数等。是给命令传递参数的一个过滤器,也是组合多个命令的一个工具
  • 它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理
  • 简单的说 就是把 其他命令的给它的数据 传递给它后面的命令作为参数
选项 说明
-i 用 {} 代替 传递的数据
-I string 用string来代替传递的数据-n[数字] 设置每次传递几行数据
-n 选项限制单个命令行的参数个数
-t 显示执行详情
-p 交互模式
-P n 允许的最大线程数量为n
-s[大小] 设置传递参数的最大字节数(小于131072字节)
-x 大于 -s 设置的最大长度结束 xargs命令执行

uptime

  • uptime命令能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载

umask

  • umask命令用来设置限制新建文件权限的掩码
  • 当新文件被创建时,其最初的权限由文件创建掩码决定
  • 用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限
  • 用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉
选项 说明
-p 输出的权限掩码可直接作为指令来执行
-S 以符号方式输出权限掩码

umount

  • umount命令用于卸载已经加载的文件系统。利用设备名或挂载点都能umount文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱

    选项 说明

| -a | 卸除/etc/mtab中记录的所有文件系统;
| -h | 显示帮助;
| -n | 卸除时不要将信息存入/etc/mtab文件中
| -r | 若无法成功卸除,则尝试以只读的方式重新挂入文件系统;
| -t<文件系统类型> | 仅卸除选项中所指定的文件系统;
| -v | 执行时显示详细的信息;
| -V | 显示版本信息

vmstat

  • vmstat命令的含义为显示虚拟内存状态(“Viryual Memor Statics”)

  • 但是它可以报告关于进程、内存、I/O等系统整体运行状态

    选项 说明
    -a 显示活动内页;
    -f 显示启动后创建的进程总数;
    -m 显示slab信息;
    -n 头信息仅显示一次;
    -s 以表格方式显示事件计数器和内存状态;
    -d 报告磁盘状态
    -p 显示指定的硬盘分区状态;
    -S 输出信息的单位。

vipw

  • vipw:这个命令最主要就是会给文件加锁!以免在编辑文件时!其他用户也在同时使用文件!而造成其他用户修改的不成功!

    选项 说明
    -g, --group 编辑 group 数据库
    -h, --help 显示此帮助信息并推出
    -p, --passwd 编辑 passwd 数据库
    -q, --quiet 安静模式
    -R, --root CHROOT_DIR chroot 到的目录

| -s, --shadow | 编辑 shadow 或 gshadow 数据库

write

  • write命令用于向指定登录用户终端上发送信息
  • 。通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方
  • 如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号

wall

  • wall命令用于向系统当前所有打开的终端上输出信息。
  • 通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,
  • 若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户

watch

  • watch命令以周期性的方式执行给定的指令,指令输出以全屏方式显示。
  • watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行

w

  • w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。
  • 执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。
  • 选项 说明
    -h 不打印头信息;
    -u 当显示当前进程和cpu时间时忽略用户名;
    -s 使用短输出格式;
    -f 显示用户从哪登录;
    -V 显示版本信息
    单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息
    选项 说明
    -h 不打印头信息;
    -u 当显示当前进程和cpu时间时忽略用户名;
    -s 使用短输出格式;
    -f 显示用户从哪登录;
    -V 显示版本信息

who

  • who命令是显示目前登录系统的用户信息。执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个X显示器

whoami

  • whoami命令用于打印当前有效的用户名称,相当于执行id -un命令

which

  • which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。
  • which指令会在环境变量$PATH设置的目录里查找符合条件的文件
  • 也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令

whereis

  • whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

    选项 说明
    -b 定位可执行文件
    -m 定位帮助文件
    -s 定位源代码文件
    -u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
    -B 指定搜索可执行文件的路径
    -M 指定搜索帮助文件的路径
    -S 指定搜索源代码文件的路径

whatis

  • whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上

  • whatis命令在用catman -w命令创建的数据库中查找command参数指定的命令、系统调用、库函数或特殊文件名。whatis命令显示手册部分的页眉行

  • 然后可以发出man命令以获取附加的信息。whatis命令等同于使用man -f命令

grup install

  • 修复硬盘启动第一阶段或1.5阶段和二阶段的功能

seek

- 跳过扇区

sync

  • 写入缓存数据

vgs

  • vgscan命令查找系统中存在的LVM卷组,并显示找到的卷组列表。vgscan命令仅显示找到的卷组的名称和LVM元数据类型,要得到卷组的详细信息需要使用vgdisplay命令
  • -d:调试模式; --ignorerlockingfailure:忽略锁定失败的错误。

vgdisplay

  • vgdisplay命令用于显示LVM卷组的信息。如果不指定"卷组"参数,则分别显示所有卷组的属性
  • -A:仅显示活动卷组的属性;
  • -s:使用短格式输出的信息。

vgcreate

  • vgcreate命令用于创建LVM卷组。卷组(Volume Group)将多个物理卷组织成一个整体,屏蔽了底层物理卷细节。在卷组上创建逻辑卷时不用考虑具体的物理卷信息
    -l:卷组上允许创建的最大逻辑卷数; -p:卷组中允许添加的最大物理卷数; -s:卷组上的物理卷的PE大小。

vgextend

  • vgextend命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量
  • LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命令动态的添加
  • -d:调试模式;
  • -t:仅测试。

vgreduce

  • vgreduce命令通过删除LVM卷组中的物理卷来减少卷组容量。不能删除LVM卷组中剩余的最后一个物理卷
  • -a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷
  • --removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态

vgremove

  • vgremove命令用于用户删除LVM卷组。
  • 当要删除的卷组上已经创建了逻辑卷时,vgremove命令需要进行确认删除,防止误删除数据
  • -f:强制删除。

vgchange

  • vgchange命令用于修改卷组的属性,经常被用来设置卷组是处于活动状态或非活动状态。
  • 处于活动状态的卷组无法被删除,必须使用vgchange命令将卷组设置为非活动状态后才能删除
  • -a:设置卷组的活动状态。

文件系统区

Linux的文件系统

  • 文件系统类型就是分区的格式,对于不同的外设,Linxu也提供了不同的文件类型
  • 常用文件系统类型
    | 文件系统格式 | 备注 |
    | :-------- | --------:|
    | msdos | DOS文件系统类型 |
    | vfat | 支持长文件的DOS分区文件系统类型,也可以理解为Windows文件系统类型 |
    | iso9660 | 光盘格式文件 |
    | ext2/ext3/ext4 | Linux 下的助理文件系统类型 |
    | xfs | Linxu下一种高性能的日志文件系统,在Centso7.x版本中成为默认文件系统 |

Linux文件系统结构

  • 目录功能介绍
  • 很多Linux的发行版目录结构布局都遵循FSSTNMD标准,这一标准的特点是根目录非常简洁,只包括含系统最基本的文件
  • 遵循这一标准,有利于程序的编写和移植,也便于系统管理和维护

/etc目录

  • 这个目录主要存放于系统管理相关的配置文件已经子目录
  • 其中笔记重要的有系统初始化文件/etc/rc、用户信息文件/etc/passwd等
  • 相关网络配置文件和服务启动文件也在这个目录下
文件名和目录 主要作用
passwd 用户库文件、每个用户的用户名、UID、GID和工作目录等都存放在此文件中
shadow 存放用户密码的文件,每个用户的密码加密后都放入此文件
group 主要存储用户组信息
fstab 系统开机启动自动挂载分区列表,需要设置开机自动挂载的分区,都可以在此文件加入
systemd systemd的配置文件目录是CaentOS7.x版本之后新增目录,此目录是Linux启动的重要部分,用来完成对整个系统的基本初始化配置
hosts 设定用户自己的IP与名字的对应表,类似于Windiws下的hosts文件
resolv.conf 客户端DNS配置文件
systemd/system/*.wants 此目录包含所有服务启动脚本,开机时系统将自动启动这些服务,是CentOS7.x版本之后新增目录
sysconfig/network-scripts/ufcfg-eth0... IP地址配置文件,CentOS7.x版本之后网卡名从类似、eth0/eth1的标识变为enp0s3/enp0s4等标识
X11 X-windwos的配置文件
rsyslog.conf 系统日志输出配置文件,在CentOS5.x版本以及之前版本中对应的文件是syslog,CentOS6.x版本以及以后版本中是rsyslog.conf
crontab 系统级别的守护进程配置文件
sysctl.conf 系统内核参数配置文件,在CenOS7.x版本之后,内核参数配置文件转移到了/usr/lib/sysctl.d目录下,但sysctl.conf文件仍是有效,并且可覆盖/usr/lib/sysctl.d中的配置文件
services 定义系统服务与端口的对应关系
profile 系统全家环境变量配置文件

/usr目录

  • 此目录主要用于存放应用程序和文件
  • 如果在系统安装的时候选择了很多软件包,那么这些软件包默认会安装到此目录下
  • 平时安装的一些软件默认情况下也会安装到此 目录下
  • 因此这个目录一般比较大
文件或目录 主要作用
lib64以及local/lib64 64位操作系统中的函数库目录
src 该目录包含所有程序的源代码,其中主要是Linux核心程序源代码
bin以及cocal/bin 该目录存放本地安装的软件和其他文件,与Linux系统无关
lib以及cocal/lib 32位操作系统使用的函数看目录
sbin以及local/sbin 该目录存放系统管理员才能执行的指令
include 此目录包含C语言的头文件,文件扩展名大多是.h
share 该目录存放共享的文件和数据库

/var目录

  • 此目录主要用于存放系统运行以及软件运行的日志信息
    | 文件或目录 | 主要作用|
    | :-------- | --------:|
    | log | 该目录存放各种应用的日志文件,这里的文件是经常变动的,因此需要定期清理|
    | lib | 该目录存放系统正常运行时需要改变的库文件|
    | spool | 该目录mail、new、打印机队列和其他队列输入、输出的缓存目录|
    | tmp | 该目录运行比/tmp 存放更大的文件|
    | lock | 该目录存放被锁定的文件,很多程序都会在/var/lock下产生一个锁文件,以保证其他程序不能同时使用这个设备或文件|
    | local | 该目录存放/usr/local中所安装程序的可变数据|
    | accout | 该目录存放已经格式化的man页|
    | run | 该目录包含到下次系统启动的系统信息|

/dev目录

  • /dev/目录包含系统所有的设备文件
文件或目录 主要作用
fd* 代表软盘设备,fd0代表变化的第一个软盘设备,fd1代表第二个软盘设备
audio* 代表声卡设备
hd* 代表IDE硬盘设备,hda代表第一块IDE硬盘,hdb代表第二块IDE设备,以此类推
sd* 代表SCSI设备 ,sda代表第一块SCSI设备,adb代表第二块SCSI硬盘,以此类推
lp* 代表并行串口
pty* 代表网络中登录的远程终端设备
ram* 代表系统内存
tty* 代表Linux上的虚拟控制台,也叫字符控制台。tty1代表第一个虚拟控制,tty2代表第二个虚拟控制台,以此类推,Linux上一共有6个虚拟控制台
ttyS* 代表串行端口。tty0代表串行端口1,tty1代表串行端口2,类似于Windows下的COM1,COM2
console* 代表系统控制台,也就是桌面控制台,可以直接链接到显示器
null 输出空设备

/proc

  • 此目录是一个虚拟目录,目录中所有信息都是内存的映射,通过这个虚拟的内存映射目录,可以和内核内部数据结构进行交互,获取有关进程的有用信息
  • 同时也可以在系统运行中修改内核参数
  • 与其他目录不同,/proc存在于内存中,而不是硬盘上
文件或目录 主要作用
cpuinfo 关于系统CPU的详细信息,包括CPU名称、型号和类型等
meninfo 内存信息、包括物理内存和虚拟内存
fiesystems 当前系统支持的文件系统类型
devices 内核中的设备驱动程序列表
net 网络使用协议以及状态信息
dma 当前使用的dma通道
iopots 当前使用的I/O
modules 当前系统加载的内核模块信息
stat 系统的各种状态信息
uptime 系统总的时间和空闲时间,以秒为单位
version 内核版本信息
loadavg 系统平均负载
kcore 系统物理内存的映射,与物理内存大小完全一样,但实际不占用这么大的空间
kmsg 内核输出信息,同时被输出到rsyslog

其他目录

  • /boot目录:该目录存放的是启动Linux时的一些核心文件,具体包含一些镜像文件和链接文件,因此这个目录非常重要,如果遭到破坏,系统将无法启动
  • /bin和/sbin目录:这两个目录存放的都是可执行的二进制。bin其实就是binary的缩写,/bin目录下的就是我们经常使用的Linux命令。例如,文件操作命令ls,cd,cp;文本编辑命令dd,df,mount,等等。
  • /sbin目录:/sbin中的s是Super 、User的意思,也就是说,只有超级用户才能执行这些命令。常见的如磁盘检查修复命令fcsk、磁盘分区命令fdisk、创建文件系统命令mkfs、关机命令shutdwn和初始化系统命令命令而等。
  • /home目录:该目录是系统中每个用户的工作目录。在Linux系统中,每个用户都有一个自己的目录,而该目录一般是由用户的账号命名的。例如,如果有一个用户ixdba,那么它的默认目录就是/home/ixdba。
  • /lib目录:该目录中存放的是共享程序库和映像文件,可供很多程序使用。通过这些共享映射文件,每个程序就不必分别保存自己的库文件(这会增加占用的磁盘空间),Linux提供了一组可供所有程序使用的文件。在该目录中,还包含了引导进程所需要的静态文件
  • /root目录:该目录是Linux超级用户root默认主目录。如果通过root登录系统,就会自动进入此目录,一般用户没有进入此目录的权限。
  • /run目录:该目录是外在设备的自动挂载点目录,出现在CentOS7.x版本中,用来自动挂载光驱和U盘。另外,还有一个/media目录,与/run目录作用基本类似,在CentOS7.x之前版本中使用。最后,还有一个目录/mnt主要用来手动挂载一些移动设备,比如可以移动的磁盘等。
  • /lost-found目录:该目录用于保存丢失的文件。不恰当的关机操作和磁盘错误均会导致文件丢失,这些丢失的文件会临时放在/lost+found下,系统重启后,引导进程会运行fdck程序,该程序就能发现这些文件。除了"/"分区上的这个目录外,在每个分区上均有一个lost-found目录。
  • /tmp目录:该目录为临时文件目录,主要用于存放临时文件,这些临时文件可能会随时被删除,也可以随时删除

CentOS5和6开启启动流程区

  • CentoS5和6开机启动基本相似的,到了CentOS7才有了大的改变
  • 当CentOS和Windwos开机也是有很多相似的地方的,请看下图

ROM

  • ROM-Read Only Memory只读存储器,如我们主板的BIOS芯片
    -BOIS(Basic Input and Output System),保存着有关计算机系统最重要的基本输入输出程序
  • 断电后信息不丢失,如计算机启动用的BIOS芯片。存取速度很低,(较RAM而言)且不能改写
  • 由于不能改写信息,不能升级,现已很少使用
  • 还有系统信息设置、开机加电自检程序和系统启动自句举程序等

RAM

  • RAM-RamdomAccessMemory易挥发性随机存取存储器,高速存取,读写时间相等
  • 且与地址无关,如计算机内存等
  • 但是他一断电数据就丢了,所以和他配合的有一块CMOS电池,来保存里面的数据如时间等


启动流程介绍

POST加电自检

  • POST(Power-On-Self-Test),翻译出来就是加电自检
  • POST加电自检也就是在我们主板上有一个ROM,也就是BIOS,他只是只读的
  • 他是固化在我们主板的ROM里面的,他的作用就是开机的时候帮我们来检查各种硬件
  • BOIS还有一个功能就是选择第一启动引导和等等修改硬件参数
  • BOIS是不支持现在最新的GPT分区,GPT分区只有UEFI引导才支持

MBR引导

  • BIOS是配合的MBR引导,装系统的时候千万要注意哦,童鞋们
  • MBR是比较传统的引导了,一般适用与家庭电脑用户
  • MBR存放在我们硬盘的446字节的第一个扇区,他对应的MBR里面存放了,三部分内容,446字节,64字节的分区表,无为的标志位

bootloader:引导加载器,引导程序

  • BootLoader是在操作系统内核运行之前运行
  • 可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境
  • 早起的系统用的是LILO(Linux LOader)不过已经淘汰
  • 最新的都用的是GRUB()GRand Unified Bootloader)现在已经有很多版本,他还可以敲命令和加密等等,如我们现在的Linux系统

GRUB

  • GNU GRUB 和GRUB是GRand Unified Bootloader的缩写
  • 它是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux
  • 上面所说的446字节里面就放这GRUB的一小部分

加载内核

  • GRUB 运行成功以后就开始加载内核了
  • 内核加载完毕以后就开始运行我们第一个进程,init进程
  • init进程运行的话,他有一些初始化脚本如/etc/inittab等等,最终你就会看到一个登录界面出来了,中间的脚本一定要会

启动流程进阶

MBR:第一阶段

  • 446: bootloader, 64: 分区表, 2: 55AA
  • 446字节不属于任何分区,他表现是二进制

1.5阶段

  • primary boot loader : 1st stage,1.5 stage
  • 1.5阶段,就在MBR后续的分区里面,也就是后续的扇区里面
  • 因为一阶段存放不了驱动,就没法加载二阶段
  • 1.5阶段就是为了支持二阶段而存在
  • 因为二阶段,对应的是/boot分区,没有1.5阶段就进不去二阶段,二阶段的驱动你加载不了,进而就读取不了二阶段的相关文件,所以他的驱动就放在MBR后续的扇区里面

GRUB:第二阶段

  • 二阶段是放在/boot/grub目录下的文件 ,他是依赖于1.5阶段
  • secondary boot loader :2nd stage,分区文件

kernel:

  • 自身初始化:
  • vmlinz文件功能他主要探测可识别到的所有硬件设备,当然ext4的文件驱动也不可能会放在里面,因为他有一个单独的文件来放那就是initramfs文件来放ext4驱动
  • 内核的文件驱动和FRUB的加载文件驱动是两码事
  • 我们驱动一共是分三部分来存放:核心的是放在/boot/vmlinuz最重要的 、其二是在/boot/initramfs这里放的是额外的一些驱动、其三是放在/lib/modules剩下的大部分驱动是放在这个目录下
  • 硬件驱动程序借助于initramfs(虚拟文件系统)加载必要的驱动他才能去挂载操作系统的根
  • initramfs这个文件是安装系统的时候生成的,不是从光盘里面拷出来的,所以他的时间是你刚安装时候的时间,但是在CentOS5上名字不一样叫initrd
  • 他们的区别是CentOS5直接模拟文件系统,CentOS6模拟磁盘通过文件系统读取数据
  • 然而vmlinuz(内核文件)文件是出厂的时候就自带的,所以他的时间是出厂时候的时间
  • 以只读方式挂载根文件系统
  • 运行用户空间的第一个应用程序:/sbin/init

ramdisk命令

  • 内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动
    - ramdisk --> ramfs 提高速度
    - CentOS 5: initrd
    - 工具程序:mkinitrd
    - CentOS 6,7: initramfs
    - 工具程序:mkinitrd, dracut

  • ramdisk文件的制作:

    • (1) mkinitrd命令
    • 为当前正在使用的内核重新制作ramdisk文件
    • mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
    • (2) dracut命令
    • 为当前正在使用的内核重新制作ramdisk文件
    • dracut /boot/initramfs-$(uname -r).img $(uname -r)
  • 详情情况请看:错误方案解决区

/sbin/init CentOS6之前

  • 运行级别:为系统运行或维护等目的而设定;0-6:7个级别
    • 0:关机
    • 1:单用户模式(root自动登录), single, 维护模式,破解root口令
    • 2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
    • 3:多用户模式,正常模式;文本界面
    • 4:预留级别;可同3级别
    • 5:多用户模式,正常模式;图形界面
    • 6:重启
  • 默认级别: 3, 5
  • 切换级别:init #
  • 查看级别:runlevel ; who -r
  • 在sbin/init程序加载完了 以后首先会先读取第一个文件那就是inittab文件

系统初始化:

- POST-->BootSequence(BIOS)-->Bootloader(MBR)--> kernel(ramdisk)-->rootfs(只读)--> init(systemd

init程序的类型

  • 系统的第一个进程
  • SysV: init, CentOS 5之前
    • 配置文件:/etc/inittab
  • Upstart: init,CentOS 6
    • 配置文件:/etc/inittab, /etc/init
  • Systemd:systemd, CentOS 7
    • 配置文件:/usr/lib/systemd/system
    • /etc/systemd/system
  • 可以通过/etc/inittab文件下修改开机启动的默认模式
  • CentOS6 破解root口令,那就是启动的时候进菜单界面按a在输入1回车就可以进入root界面了,到时候自己区用passwd改密码就可以了

CentOS 5的inittab文件

  • 配置文件:/etc/inittab
  • 每一行定义一种action以及与之对应的process
    • id:runlevel:action:process
    • action:
    • wait: 切换至此级别运行一次
    • respawn:此process终止
    • initdefault:设定默认运行级别
    • sysinit:设定系统初始化方式
  • /etc/rc.d/rc
  • ca::ctrlaltdel:/sbin/
  • id:3:initdefault:
  • si::sysinit:/etc/rc.d/rc.sysinit
  • l0:0:wait:/etc/rc.d/rc 0
  • l1:1:wait:/etc/rc.d/rc 1...
  • l6:6:wait:/etc/rc.d/rc 6

init初始化

  • nit读取其初始化文件
  • 初始运行级别(RUN LEVEL
  • 系统初始化脚本
  • 对应运行级别的脚本目录
  • 捕获某个关键字顺序
  • 定义UPS电源终端/恢复脚本
  • 在虚拟控制台生成getty
  • 在运行级别5初始化X

/etc/rc.d/rc.sysinit: 系统初始化脚本

  • (1) 设置主机名
  • (2) 设置欢迎信息
  • (3) 激活udev和selinux
  • (4) 挂载/etc/fstab文件中定义的文件系统
  • (5) 检测根文件系统,并以读写方式重新挂载根文件系统
  • (6) 设置系统时钟
  • (7) 激活swap设备
  • (8) 根据/etc/sysctl.conf文件设置内核参数
  • (9) 激活lvm及software raid设备
  • (10) 加载额外设备的驱动程序
  • (11) 清理操作

错误解决方案区

CentOS5和6启动解决方案

CentOS5和6第一阶段修复

  • CentOS5和6启动以后假如第一阶段就是引导界面,说简单就是启动条界面,没有就是第一阶段坏 ,也就是说MBR引导出了问题,需要修复,
  • 修复方案
  • 1、进救援模式,切根、用命令grub install 后面接引导硬盘路径

CentOS5和6(1.5)阶段修复

  • CentOS5和6(1.5)所表示的问题引导了但是没有引导完毕,会停止在启动界面,系统会自动自检,如果不行、系统会尝试重启
  • 1、进救援模式,切根、用命令grub-install 后面接引导硬盘路径

CentOS5和6第二阶段修复

  • CentOS5和6第二阶段所表示的问题,会引导,但是等会会报错
  • 1、进救援模式,切根、用命令grub-install 后面接引导硬盘路径

grub文件损坏修复

  • 出现这种问题需要自己写
  • 如下


  • 最后输入boot启动

给单用户模式加密

  • 首先需要需要进入/boot/grub/grub

/sbin/init 文本破坏修复

  • 表示的问题是19


内核编译区

Linux基础之内核编译

内核介绍

  • 在我们的Linux世界虽然版本众多,但是内核却不变
  • 内核就像我们人类的大脑负责,负责整个系统的运行
  • 这次告诉大家怎么编译Linux内核
  • 我们普通光盘里面的内核是已经编译好的,如CentOS ,乌班图,Debian,等等
  • 他们虽然版本各异,但是他们内核都一样
  • 在出厂的时候编译好的内核,已最稳定的方式来编译,所以关闭了很多功能
  • 有些功能我们需要用如今天给大家演示Windows的NTFS文件系统Linux有但是只是出厂的时候没打开
  • 当然编译系统很浪费时间,他还得看计算机的性能,时间的长短也就决定了你的计算机的速度
  • 那我们开始吧

内核编译

  • 编译内核我们首先得要内核包吧
  • 我们可以去www.kernel.org去下载
  • 可以自己选择自己喜欢的内核来编译
  • 我今天这里编译的是最新版linux-4.12.tar.xz版本

环境检查

  • 想要编译得需要编译环境
  • 怎么创建环境
  • 那就是你的yum源和开发组工具包

检查yum源

  • 关于yum的详细配置就不过多介绍
  • 但是我会说说如何检查
  • 命令行输入yum clean all 清除缓存
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel
Cleaning up everything
Cleaning up list of fastest mirrors
  • 命令行输入yum makecache载入缓存
[root@localhost ~]# yum makecache
Loaded plugins: fastestmirror
base                                                 | 3.6 kB     00:00     
epel                                                 | 4.3 kB     00:00     
(1/9): base/group_gz                                   | 155 kB   00:00     
(2/9): base/filelists_db                               | 6.6 MB   00:00     
(3/9): base/other_db                                   | 2.4 MB   00:00     
(4/9): epel/group_gz                                   | 170 kB   00:00     
(5/9): base/primary_db                                 | 5.6 MB   00:00     
(6/9): epel/updateinfo                                 | 757 kB   00:00     
(7/9): epel/filelists_db                               | 7.6 MB   00:00     
(8/9): epel/other_db                                   | 2.1 MB   00:00     
(9/9): epel/primary_db                                 | 4.6 MB   00:00     
Determining fastest mirrors
Metadata Cache Created
  • 如果中间出现错误要好好检查自己的源是否配置完成
  • 还是你用的源有问题等等

开发组包安装或检查

  • 开发组包很重要有GCC等等出名的开发包软件
  • 首先检查你的电脑是否已安装开发包组,Development Tools 这个包组
  • 命令行输入yum grouplist
  • 下面显示我电脑已经安装开发包组
  • Installed Groups 已安装的组 的意思
  • 其他包组不过多介绍
  • 那怎么看电脑有没有安装包组,那就是看Development Tools 就可以了
[root@localhost ~]# yum grouplist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Environment Groups:
   Minimal Install
   Compute Node
   Infrastructure Server
   File and Print Server
   MATE Desktop
   Basic Web Server
   Virtualization Host
   Server with GUI
   GNOME Desktop
   KDE Plasma Workspaces
   Development and Creative Workstation
Installed Groups: <<<<<<<<<<已安装的包组
   Development Tools
Available Groups:
   CIFS file server
   Compatibility Libraries
   Console Internet Tools
   Desktop
   Desktop Platform
   Desktop Platform Development
   Eclipse
   Educational Software
   Electronic Lab
   FCoE Storage Client
   Fedora Packager
   General Purpose Desktop
   Graphical Administration Tools
   Haskell
   Legacy UNIX Compatibility
   Messaging Client Support
   Messaging Server Support
   Milkymist
   MySQL Database client
   MySQL Database server
   NFS file server
   Network Storage Server
   SNMP Support
   Scientific Support
   Security Tools
   Server Platform
   Server Platform Development
   Smart Card Support
   Storage Availability Tools
   System Administration Tools
   System Management
   TeX support
   TurboGears application framework
   Virtualization
   Web-Based Enterprise Management
   Xfce
   iSCSI Storage Client
Done

开始编译

  • 由于我是用虚拟机演示
  • 需要上传内核,上次命令rz 这个命令是自己用包安装才有
  • 编译的时候千万要注意下自己的硬盘的容量用df 查看下
  • 因为编译的时候会出现很大量的数据流动会到达10G以上
  • 当然你功能越多内核就越大,看个人习惯

编译事项

  • 内核编译很多东西是和硬件相关的如、网卡、声卡、硬盘,文件系统驱动,大部分是很多和硬件打交道的功能和模块
  • 这里我们是用菜单选项来编译,我们在他的基础之上来编译
  • 在出厂的时候没有NTFS,我们就在他的基础上加个NTFS就可以了
  • 那怎么加,我们可以参考当前操作系统
  • 那怎么参考,在/boot下面有个vmlinuz-3.10.0-327.el7.x86_64,我们可以参考他来编译,在他现有的模板之上加个NTFS,或等等功能
- [root@localhost ~]# ll /boot/vmlinuz-3.10.0-327.el7.x86_64 
-rwxr-xr-x. 1 root root 5156528 Nov 19  2015 /boot/vmlinuz-3.10.0-327.el7.x86_64
- 那为什么要用他,因为这个模板对应的有个配置文件在/boot/config 里面,里面给我们说了当前那些模块打到里面去了,那些没有打进去
[root@localhost ~]# ll /boot/config-3.10.0-327.el7.x86_64 
-rw-r--r--. 1 root root 126426 Nov 19  2015 /boot/config-3.10.0-327.el7.x86_64
  • 注意他的功能启用方式有两种,一种是打到/boot/vmlinu文件里面去,还有些不是常用的我们可以放到/lib/modules里面,这里目录里面也放了一些驱动模块
  • 编译内核你可以放到核心文件里也可以放在模块里面,还有一个选择就是不要这个功能

编译开始

  • 那我们开始
  • 我的内核包已经上传到我虚拟机里面的家目录里面
[root@localhost ~]# ls
anaconda-ks.cfg  linux-4.12.tar.xz
  • 我们来看下他的大小用ll -h命令
[root@localhost ~]# ll
total 96868
-rw-------. 1 root root     1147 Jul  5 17:13 anaconda-ks.cfg
-rw-r--r--. 1 root root 99186576 Jul 11 08:47 linux-4.12.tar.xz
4.12.tar.xz
  • 我们先解压内核包用tar xfv命令,由于界面过长截图最后一张
[root@localhost ~]# tar xfv linux-4.12.tar.xz 
linux-4.12/virt/kvm/arm/vgic/vgic-v3.c
linux-4.12/virt/kvm/arm/vgic/vgic.c
linux-4.12/virt/kvm/arm/vgic/vgic.h
linux-4.12/virt/kvm/async_pf.c
linux-4.12/virt/kvm/async_pf.h
linux-4.12/virt/kvm/coalesced_mmio.c
linux-4.12/virt/kvm/coalesced_mmio.h
linux-4.12/virt/kvm/eventfd.c
linux-4.12/virt/kvm/irqchip.c
linux-4.12/virt/kvm/kvm_main.c
linux-4.12/virt/kvm/vfio.c
linux-4.12/virt/kvm/vfio.h
linux-4.12/virt/lib/
linux-4.12/virt/lib/Kconfig
linux-4.12/virt/lib/Makefile
linux-4.12/virt/lib/irqbypass.c
 
  • 解压完毕以后可以用ls命令查看
[root@localhost ~]# ls
anaconda-ks.cfg  linux-4.12  linux-4.12.tar.xz
  • 还可以用du -sh命令查看下解压的文件有多大
[root@localhost ~]# du -sh linux-4.12
842M    linux-4.12

编译功能模块

  • 在/boot/config下 这是我们生成功能模块的配置文件,在里面已经启动了一些功能,或没有启用的
 [root@localhost boot]# ls /boot/config-3.10.0-327.el7.x86_64 
/boot/config-3.10.0-327.el7.x86_64
  • 用vim命令打开,我们进里面去看下
[root@localhost boot]# vim  /boot/config-3.10.0-327.el7.x86_64 
# Automatically generated file; DO NOT EDIT.
# Linux/x86_64 3.10.0-327.el7.x86_64 Kernel Configuration
#
CONFIG_64BIT=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_INSTRUCTION_DECODER=y
CONFIG_OUTPUT_FORMAT="elf64-x86-64"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_MMU=y
  • y的意思是打到核心文件里面,那就是打到vmlinuz里面去了
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
  • 号开头的就是功能没启动

CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_DCTCP=m
  • m 的就是打到模块里
  • 我们这篇是要添加NTSF,我们看看NTFS是什么状态
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
# CONFIG_NTFS_FS is not set    《《《没有启用状态

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_VMCORE=y
CONFIG_PROC_SYSCTL=y
  • 那接下来我们来如何利于这个模板,编译安装
  • 说简单来就是直接把他,复制到我们刚才解压缩的路径
  • 用cp命令,注意复制的时候一定要改名
[root@localhost boot]# cp  /boot/config-3.10.0-327.el7.x86_64  /root/linux-4.12/.config
  • 复制和改名成功以后接下来我们用比较直观的菜单来定制内核选项

  • 首先切入我们解压的那个文件夹下面,然后执行命令make menuconfig

  • 执行这个命令需要安装ncurses-devel 才能打开菜单 ,因为他是个图形界面

  • 安装玩以后在执行mek menuconfig 命令,但是你用的是CRT或者是Xshell必须全屏不然打不开,这个软件


  • 带箭头的就表示他地下有子菜单

  • 在菜单里面*就是打到核心里面吗,M开头就是模块里面,什么都没有表示没有启用

  • 接下来我们来改文件系统,选择File systems项


  • 进入以后我们选择DOS/FAT/NT选项以后在回车


  • 回车以后在里面选择NTFS选项,用空格来切换来选择打到核心还是模块里面
  • 我们已模块的方式来进行
  • 选择完毕以后用EXC退出,如果你改动了他会提示你保存按yes就可以了


  • 这时候配置文件已经存到新的.config文件里面去了

  • 如果有兴趣可以比较下,这里不过多操作

  • 接下来正在进入编译过程中,时间很长,耐心等待,可能编译过程中,会遇到很多问题,耐心解决

  • 进入编译过程之前,我们先看下我们几颗CPU,用lscpu

[root@localhost linux-4.12]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
Stepping:              9
CPU MHz:               2594.107
BogoMIPS:              5188.21
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3
  • 我一共4颗,4线程的方式,为了计算速度我会全用上
  • 用命令make -j 4 ,但是一定要在我们解压的文件夹里面运行
  • 好了走起
[root@localhost linux-4.12]# make -j 4
  • 运气不好没有第一次成功,他的意思是缺少包,那我们就安装
  HOSTCC  scripts/sign-file
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
 #include <openssl/opensslv.h>
  • 他说的是缺少 openssl-devel这个包
- [root@localhost linux-4.12]# yum -y install openssl-devel
  • 好了在走起

  • 编译完成我好像花了快30分钟

  IHEX2FW firmware/emi26/firmware.fw
  IHEX2FW firmware/emi26/bitstream.fw
  IHEX2FW firmware/emi62/loader.fw
  IHEX2FW firmware/emi62/bitstream.fw
  IHEX2FW firmware/emi62/spdif.fw
  IHEX2FW firmware/emi62/midi.fw
  H16TOFW firmware/edgeport/boot.fw
  H16TOFW firmware/edgeport/boot2.fw
  H16TOFW firmware/edgeport/down.fw
  H16TOFW firmware/edgeport/down2.fw
  IHEX2FW firmware/whiteheat_loader.fw
  IHEX2FW firmware/whiteheat.fw
  IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
  IHEX2FW firmware/keyspan_pda/xircom_pgs.fw
  • 接下来开始安装运行make modules_install
[root@localhost linux-4.12]# make modules_install
  • 接下他们会安装在/lib/modules里面,看里面已经有了两个内核,这只是文件复制还没有安装
[root@localhost linux-4.12]# ls /lib/modules
3.10.0-327.el7.x86_64  4.12.0-1.0-li-linux
  • 接下来我们要把内核拷贝到我们/boo下,同时修改grub文件
  • 执行命令make intsall
[root@localhost linux-4.12]# make install
sh ./arch/x86/boot/install.sh 4.12.0-1.0-li-linux arch/x86/boot/bzImage \
    System.map "/boot"
  • 我来重启运行reboot


  • 第一条就是我编译的内核

  • 编译内核完成

  • 虽然内核编译内核完成但是我们系统里面的程序不知道支持新内核不

  • 所以生产过程中,升级内核需要谨慎

Linux基础之三剑客AWK基础篇

awk介绍

  • AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一
  • 这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识
  • AWK(Aho、Weinberger、Kernighan) ,报告生成器,简单的来说就是打报表,格式化文本输出
  • 它具备了一个完整的语言所应具有的几乎所有精美特性
  • 实际上AWK的确拥有自己的语言:AWK程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”
  • AWK版本还特别多;New AWK (nawk), GNU AWK (gawk),当然我们用的是GAWK,属于GNU项目

awk基本用法

  • awk报告生成器,格式化输出文本文件

  • awk基本语法格式

    • awk [options] ‘program’ var=value file…
    • awk [options] -f programfile var=value file…
    • awk [options] 'BEGIN{ action;… } pattern{ action;… } END
    • action;… }' file ...
  • optinos 表示可选的命令行选项

  • prgoramawk语句

  • var=value自己定义变量

  • file.... 处理文本文件

  • programfile 调用程序文件

  • program通常是被单引号或双引号中,建议用单引号,双引号在后面有其他用途

-awk程序
- awk 程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块,共3部分组成

  • awk选项
    • -F: 指明输入时用到的字段分隔符
[root@localhost ~]# awk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-bus-proxy
systemd-network
dbus
polkitd
colord
abrt
libstoragemgmt
rpc
 -  -v :var=value: 自定义变量
[root@localhost ~]# awk -v RS=':' '{print }'  /etc/passwd
root
x
0
0
root
/root
/bin/bash
bin
x
1
1
bin
/bin
/sbin/nologin
daemon
x
2
2
daemon
/sbin

awk语言

  • 基本格式:awk [options] 'program' file…
  • program:pattern{action statements;..}
  • pattern和action:
    • pattern:部分决定动作语句何时触发及触发事件
    • BEGIN:相当于处理文件内容之前执行的一个语句,用于打印标题
    • END:
      • action statements:对数据进行处理,如统计、汇总等
  • 分割符、域和记录
  • awk在执行时,由分割符来分割字段,可以用冒号或者斜线等等要看自己的指定
  • 切割完已后那就是一个字段,可以说是局部变量$1$2...... 用awk自己来调用,不用自己声明,有一个需要注意$0就是所有字段或所有列
  • 选项-F就是用来指定分割符的
  • 域的意思就是已经被切割完的字符,也可以称呼为列或字段等,比如说第一行就用$1他会把一列全打印显示处理
  • 记录就是说一行就是一条记录,怎么去区分行一行或几行,那就是分割符,分割符要看自己来指定千万别记太死
  • 默认空格为换行符,但是其他的换行符需要自己指定

awk工作原理

  • 第一步:执行BEGIN{action;… }语句块中的语句
  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕
  • 第三步:当读至输入流末尾时,执行END{action;…}语句块
  • BEGIN:这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句
  • END: 这也是一个科学的语句块,比如打印所有行的分析结果等信息汇总或awk输入流读取完所有信息将会执行END
  • pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

print

  • AWK是默认读取标准输入的命令

  • 读取多少行就打印多少行,用文件输入或手动输入都可以

  • 要点:

    • 逗号分隔符
    • 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式
    • 如省略item,相当于print $0
  • 示例

    [root@localhost ~]# awk '{print "hello,awk"}' /etc/passwd
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
hello,awk
  • 在输出的时候,打印的内容必须要以,号隔开不然会合并在一起
[root@localhost ~]# awk -F: '{print $1$4}' /etc/passwd 
root0
bin1
daemon2
adm4
lp7
sync0
shutdown0
halt0
mail12
operator0
games100
ftp50
nobody99
systemd-bus-proxy997
systemd-network192
dbus81
polkitd996
colord995
abrt173
  • 如果用,号将会分割开
[root@localhost ~]# awk -F: '{print $1,$4}' /etc/passwd 
root 0
bin 1
daemon 2
adm 4
lp 7
sync 0
shutdown 0
halt 0
mail 12
operator 0
games 100
ftp 50
nobody 99
systemd-bus-proxy 997
systemd-network 192
dbus 81
polkitd 996
colord 995
abrt 173
  • 如果你想用别的符号来分割你可以补上,中间加的是字符串哦,别搞混了
[root@localhost ~]# awk -F: '{print $1"===="$4}' /etc/passwd 
root====0
bin====1
daemon====2
adm====4
lp====7
sync====0
shutdown====0
halt====0
mail====12
operator====0
games====100
ftp====50
nobody====99
systemd-bus-proxy====997
systemd-network====192
dbus====81
polkitd====996
colord====995
abrt====173
  • 注意我们现在用的是变量不用加双引号,如果是字符串必须要加双引号,不然会这样
[root@localhost ~]# awk -F: '{print $1====$4}' /etc/passwd  
awk: cmd. line:1: {print $1====$4}
awk: cmd. line:1:            ^ syntax error
  • 那如果我想取磁盘利于分区利用率怎么取,可以这样
[root@localhost ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       41922560  385320  41537240   1% /
devtmpfs         2008832       0   2008832   0% /dev
tmpfs            2023456       0   2023456   0% /dev/shm
tmpfs            2023456    8772   2014684   1% /run
tmpfs            2023456       0   2023456   0% /sys/fs/cgroup
/dev/sda3       20961280 2679012  18282268  13% /usr
/dev/sda1         508580  148756    359824  30% /boot
tmpfs             404692       0    404692   0% /run/user/0
[root@localhost ~]# df|awk '{print $5}'
Use%
1%
0%
0%
1%
0%
13%
30%
0%
  • 如果我只想要数值,不想要符号,或我只想要分区的数值,怎么取,我们可以配合grep
[root@localhost ~]# df|grep '^/dev/sd'|awk '{print $5}'|awk -F% '{print $1 }'
1
13
30
  • 如果你什么都不写会产生什么后果,那就相当打印$0
[root@localhost ~]# awk '{print }' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
  • 格式输出的时候变量一定要一个一个的打印如
[root@localhost ~]# awk -F: '{print $1,$5,$3}' /etc/passwd
root root 0
bin bin 1
daemon daemon 2
adm adm 3
lp lp 4
sync sync 5
shutdown shutdown 6
halt halt 7
mail mail 8
operator operator 11
games games 12
ftp FTP User 14
nobody Nobody 99
  • 不能这样填写变量
[root@localhost ~]# awk -F: '{print $1-3}' /etc/passwd     
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
-3
  • 如果你想对其你可以加一个或多个TAB键,但是他是个字符串必须要加双引号
[root@localhost ~]# awk -F: '{print $1"\t\t\t"$3}' /etc/passwd
root                    0
bin                     1
daemon                  2
adm                     3
lp                      4
sync                    5

awk变量

  • 在awk里面也支持内置变量和自定义变量

内置变量

  • 内置变量
  • FS:输入字段分割符,默认为空白字符
  • FS是个变量需要赋值,功能和-F一样
[root@localhost ~]# awk -v FS=: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
  • 还可以引用变量
[root@localhost ~]# awk -v FS=':' '{print $1,FS,$3}' /etc/passwd
root : 0
bin : 1
daemon : 2
adm : 3
lp : 4
sync : 5
shutdown : 6
halt : 7
mail : 8
operator : 11
games : 12
ftp : 14
nobody : 99
  • OFS:输出字段分割符,默认为空白字符
[root@localhost ~]# awk -F: -v OFS='-' '{print $1,$3}' /etc/passwd    
root-0
bin-1
daemon-2
adm-3
lp-4
sync-5
shutdown-6
halt-7
mail-8
operator-11
games-12
ftp-14
  • RS:输入记录分割符,指定输入时的换行符,原换行符仍有效
[root@localhost ~]# awk -v RS=' ' '{print }' /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
  • ORS:输出记录分隔符,输出时用指定符号代替换行符
[root@localhost ~]# awk -F: -v ORS="---" '{print $1}' /etc/passwd 
root---bin---daemon---adm---lp---sync---shutdown---halt---mail---operator---games---ftp---nobody---systemd-bus-proxy---systemd-network---dbus---polkitd---colord---abrt---libstoragemgmt---rpc---setroubleshoot---rtkit---usbmuxd---tss---geoclue---chrony---mysql---pulse---gdm---rpcuser---nfsnobody---postfix---ntp---ssh
  • NF:字段数量,表示一共有7个字段
[root@localhost ~]# awk -F: 'END{print NF}' /etc/passwd   
7
  • NR :行号
[root@localhost ~]# awk -F: '{print NR,$1}'  /etc/passwd
1 root
2 bin
3 daemon
4 adm
5 lp
6 sync
7 shutdown
8 halt
9 mail
10 operator
11 games
12 ftp
13 nobody
14 systemd-bus-proxy
15 systemd-network
16 dbus
17 polkitd
18 colord
19 abrt
  • FNR: 各个文件分别计数,行号
[root@localhost ~]# awk '{print FNR,$0}' /etc/issue  /etc/fstab 
1 \S
2 Kernel \r on an \m
3 
4 Mage Education Learning Services
5 http://www.magedu.com
6 
1 
2 #
3 # /etc/fstab
4 # Created by anaconda on Thu Jul 13 08:26:25 2017
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
  • FILENAME:当前文件名
[root@localhost ~]# awk -F: '{print FILENAME,$0}' /etc/issue
/etc/issue \S
/etc/issue Kernel \r on an \m
/etc/issue 
/etc/issue Mage Education Learning Services
/etc/issue http://www.magedu.com
/etc/issue 
  • ARGC:命令行参数的个数
[root@localhost ~]# awk -F: '{print ARGC}'  /etc/passwd /etc/issue /etc/fstab 
4
4
4
4
4
4
4
4
4
  • ARGV:数组,保存的是命令行所给定的各参数
[root@localhost ~]# awk -F: '{print ARGC,ARGV[0]}'  /etc/passwd /etc/issue /etc/fstab  
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
4 awk
变量名 属性
$0 当前记录
$1~$n 当前记录的第n个字段
FS 输入只读分割符 默认的是空格
RS 输入记录分割符 默认为换行符
NF 当前记录中的字段个数,就是有多少列
NR 已经独处的记录数,就是行号,从1开始
OFS 输出字段分割符 默认也是空格
ORS 输出的记录分割符 默认为换行符
FNR 分别计数
FILENAME 显示当前文件名
ARGC 显示参数个数
ARGV 打印数组参数

注:内置变量很多,参阅相关资料

自定义变量

  • 自定义变量(区分字符大小写)
    • -v var=value
    • 在program中直接定义
  • 示例
[root@localhost ~]# awk -v name=root '{print name}' /etc/passwd  
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
  • 变量调取还可以这样
[root@localhost ~]# awk '{sex="male";print sex }'  /etc/passwd
male
male
male
male
male
male
male
male
male
male
male
male
male
male
male
  • 还可以把他写成一个脚本如
[root@localhost ~]# vi f1.awk 
 {sex="male";print sex}  
~                                                                 
~                                                                 
  • 把他显示调取出来,但是要记住在里面不要放单引号不然出错
[root@localhost ~]# awk -f  f1.awk /etc/passwd
male
male
male
male
male
male
male
male
male
male
male

printf

  • 格式化输出:printf “FORMAT”, item1, item2, ...

  • 必须指定FORMAT, 也就是格式

  • 不会自动换行,需要显式给出换行控制符,\n

  • FORMAT中需要分别为后面每个item指定格式符

  • 格式符:与item一一对应
    | 输出控制符 | 含义
    | :-------- | --------:|
    | %C | 显示字符的ASCII码
    | %d,%i | 显示十进制整数
    | %e ,%E | 显示科学计数法数值
    | %f | 显示为浮点数
    | %g ,%G | 以科学计数法或浮点形式显示数值
    | %s | 显示字符串
    | %u | 无符号整数
    | %% | 显示%自身

  • 修饰符:

    • [.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f

    • -: 左对齐(默认右对齐) %-15s
    • +:显示数值的正负符号 %+d
  • 示例

[root@localhost ~]# awk -F: '{printf "%s---%d\n", $1,$3}'  /etc/passwd
root---0
bin---1
daemon---2
adm---3
lp---4
sync---5
shutdown---6
halt---7
mail---8
operator---11
games---12
ftp---14
nobody---99
systemd-bus-proxy---999
systemd-network---192
dbus---81
  • 如果你想右对齐可以这样,因为默认是右对齐
[root@localhost ~]# awk -F: '{printf "%s---%d\n", $1,$3}'  /etc/passwd
root---0
bin---1
daemon---2
adm---3
lp---4
sync---5
shutdown---6
halt---7
mail---8
operator---11
games---12
ftp---14
nobody---99
systemd-bus-proxy---999
systemd-network---192
dbus---81
  • 如果你想左对齐,可以这样
[root@localhost ~]# awk -F: '{printf "%-30s---%d\n", $1,$3}'  /etc/passwd
root                          ---0
bin                           ---1
daemon                        ---2
adm                           ---3
lp                            ---4
sync                          ---5
shutdown                      ---6
halt                          ---7
mail                          ---8
operator                      ---11
games                         ---12
ftp                           ---14
nobody                        ---99
systemd-bus-proxy             ---999
systemd-network               ---192
  • 还可以这样玩,反正自己看着玩
[root@localhost ~]# awk -F: '{printf "%+30s---%+30d\n", $1,$3}'  /etc/passwd
                          root---                            +0
                           bin---                            +1
                        daemon---                            +2
                           adm---                            +3
                            lp---                            +4
                          sync---                            +5
                      shutdown---                            +6
                          halt---                            +7
                          mail---                            +8
                      operator---                           +11
                         games---                           +12
  • 还可以添加字符串,是里面不是外面注意
[root@localhost ~]# awk -F: '{printf "username:%-30s%-10d\n", $1,$3}'  /etc/passwd
username:root                          0         
username:bin                           1         
username:daemon                        2         
username:adm                           3         
username:lp                            4         
username:sync                          5         
username:shutdown                      6         
username:halt                          7         
username:mail                          8         
username:operator                      11        
username:games                         12        
username:ftp                           14        
username:nobody                        99        
username:systemd-bus-proxy             999       
username:systemd-network               192       
username:dbus                          81        

操作符

  • 算术操作符:
    • x+y, x-y, x*y, x/y, x^y, x%y
    • -x: 转换为负数
    • +x: 转换为数值
  • 字符串操作符:没有符号的操作符,字符串连接
  • 赋值操作符:
  • =, +=, -=, *=, /=, %=, ^=
  • ++, --
  • 比较操作符:
  • ==, !=, >, >=, <, <=
  • 模式匹配符:~:左边是否和右边匹配包含 !~:是否不匹配
  • 示例
  • 下面的意思是如果$0包含root就打印,没有就不打印
[root@localhost ~]# awk -F: '$0 ~ /root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  • 如下我想打印小于UID100的用户
[root@localhost ~]# awk -F: '$3<=1000{print $1,$3}'  /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-bus-proxy 999
systemd-network 192
  • 如果我想打印UID大于100的用户
[root@localhost ~]# awk -F: '$3>=1000{print $1,$3}'  /etc/passwd
nfsnobody 65534
mageedu 1000
  • 逻辑操作符:与&&,或||,非!
  • 示例
[root@localhost ~]# awk -F: '$3>=0 && $3<=1000 {print $1,$3}' /etc/passwd   
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-bus-proxy 999
systemd-network 192
dbus 81
  • 或者小于10大于1000,的打印出来
[root@localhost ~]# awk -F: '$3<=0 || $3>=1000 {print $1,$3}' /etc/passwd  
root 0
nfsnobody 65534
mageedu 1000
  • 还可以取非
[root@localhost ~]# awk -F: '  !  ($3>1000) {print $1,$3}' /etc/passwd 
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-bus-proxy 999
systemd-network 192
dbus 81

正则表达式

  • 正则表达式要多练这里只举几个例子

  • 如果我只想用AWK来提取磁盘信息,怎么取,我们可以用包含来提取

[root@localhost ~]# df|awk '$0 ~ "^/dev/sd"' 
/dev/sda2       41922560  388520  41534040   1% /
/dev/sda3       20961280 2679012  18282268  13% /usr
/dev/sda1         508580  148756    359824  30% /boot
  • 当前里面还可以取反
[root@localhost ~]# df|awk '$0 !~ "^/dev/sd"' 
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2008832       0   2008832   0% /dev
tmpfs            2023456       0   2023456   0% /dev/shm
tmpfs            2023456    8800   2014656   1% /run
tmpfs            2023456       0   2023456   0% /sys/fs/cgroup
tmpfs             404692       0    404692   0% /run/user/0

BEGIN 和END 模块

  • 通常,对于每个输入行,awk 都会执行每个脚本代码块一次。然而,在许多编程情况中
  • 可能需要在awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况,awk 允许
  • 您定义一个BEGIN 块。我们在前一个示例中使用了BEGIN 块。因为awk 在开始处理输入文件之前会执行BEGIN 块
  • 因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它
    在程序中以后会引用的全局变量的极佳位置

三目表达式

  • 三目就是三个元素,三个组成部分,第一部分冒号,以此类推
  • 示例
[root@localhost ~]# awk -F: '{$3>=1000?username="common user":username="sysuser";printf "%s  %s  %d\n" ,username,$1,$3}' /etc/passwd
sysuser  root  0
sysuser  bin  1
sysuser  daemon  2
sysuser  adm  3
sysuser  lp  4
sysuser  sync  5
sysuser  shutdown  6
sysuser  halt  7
sysuser  mail  8
sysuser  operator  11
sysuser  games  12
sysuser  ftp  14
sysuser  nobody  99
  • 或者来对齐下
[root@localhost ~]# awk -F: '{$3>=1000?username="common user":username="sysuser";printf "%s  %20s  %20d\n" ,username,$1,$3}' /etc/passwd 
sysuser                  root                     0
sysuser                   bin                     1
sysuser                daemon                     2
sysuser                   adm                     3
sysuser                    lp                     4
sysuser                  sync                     5
sysuser              shutdown                     6
sysuser                  halt                     7
sysuser                  mail                     8
sysuser              operator                    11
sysuser                 games                    12
sysuser                   ftp                    14
sysuser                nobody                    99
sysuser     systemd-bus-proxy                   999
sysuser       systemd-network                   192
sysuser                  dbus                    81
sysuser               polkitd                   998
sysuser                colord                   997
sysuser                  abrt                   173
sysuser        libstoragemgmt                   996
sysuser                   rpc                    32

linux三剑客之sed基础篇

sed介绍

  • sed(Stream EDitor) 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件, 简化对文件的反复操作
  • sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像。sed按顺序逐行读取文件。然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放到文件中。完成了一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。在这里要注意一点,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。说白了就是一行一行的操作
  • 利用被称为管道操作符的|,多个命令由管道连成了管道线。在UNIXLinux系统中,流过管道线的信息(数据)就叫做流(stream)。为了编辑或修改一条管道中的信息,就使用流编辑器(stream editor),这也正是sed这个命令名字的由来。其中,sstream的第一个字母,而ededitor(编辑器)的头两个字母
  • sed用法
    • 格式 sed [OPTION]...... 'script' inputfile....
    • OPTION是选项
    • script 地址命令
    • inputfile 输入文件 (文件可以有多个输入以后会处理第二个)、
    • 这是最简单的格式
  • sed选项
    • 常用选项:
    • -n :不输出模式空间内容到屏幕,即不自动打印
    • -e: 多点编辑
    • -f :/ PATH/SCRIPT_FILE : 从指定文件中读取编辑脚本
    • -r: 支持使用扩展正则表达式
    • d:删除模式空间匹配的行
    • p: 显示模式空间中的内容
    • a [\]text:在指定行 后面 追加文本
  • 支持 使用\n实现多行追加
    • i [\]text :在行前面 插入文本
    • c [\]text :替换行为单行或多行文本
    • w /path/somefile: 保存模式匹配的行至指定文件
    • r /path/somefile:读取指定文件的文本至 模式空间中
    • 匹配 到的行后
    • =: 为模式空间中的行打印行号
    • !:模式空间中匹配行取反处理

sed选项详解

-n选项

  • 不输出模式空间内容到屏幕,即不自动打印
  • 区别p可以理解为打印,后面还会详细讲解p的用途
[root@localhost app]# sed -n  'p' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@localhost app]# sed   'p' passwd    
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

d选项

  • 删除模式空间匹配的行
  • 删除第2行,但是磁盘里面的文件还没删除哦,想要删除就用-i,稍后介绍
[root@localhost app]# cat -n passwd|sed '2d'
     1  root:x:0:0:root:/root:/bin/bash
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
  • 删除奇数行,偶数行用cat -n passwd|sed '2~2d'
[root@localhost app]# cat -n passwd|sed '1~2d'
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     8  halt:x:7:0:halt:/sbin:/sbin/halt
    10  operator:x:11:0:operator:/root:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    14  systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    16  dbus:x:81:81:System message bus:/:/sbin/nologin
    18  abrt:x:173:173::/etc/abrt:/sbin/nologin
    20  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    22  usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    24  saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    26  rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    28  chrony:x:991:988::/var/lib/chrony:/sbin/nologin
    30  qemu:x:107:107:qemu user:/:/sbin/nologin

a选项

  • a [\]text:在指定行 后面 追加文本
  • 意思就是在匹配行的后面追加文本
[root@localhost app]# cat -n passwd|sed '5aasdasdasdasdasdasdasdasd' 
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  << 我追加的行
asdasdasdasdasdasdasdasd
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
  • \n 表示换行的意思可以追加多行
[root@localhost app]# cat -n passwd|sed '5a\asdasdas\ndfdsdsd\nsdsdsdsd'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
asdasdas
dfdsdsd
sdsdsdsd
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin

i选项

  • i []text :在行前面
  • 和a相反
[root@localhost app]# cat -n passwd|sed '5i\asdasdas\ndfdsdsd\nsdsdsdsd'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
asdasdas
dfdsdsd
sdsdsdsd
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin

c选项

  • c []text :替换行为单行或多行文本
  • 就是把中间的行替代
[root@localhost app]# cat -n passwd|sed '5c\asdasdas'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
asdasdas
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
  • 还可以多个替换多行如5到7
[root@localhost app]# cat -n passwd|sed '5,7c\asdasdas'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
asdasdas
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin

w选项

  • w /path/somefile: 保存模式匹配的行至指定文件
  • 意思就是把他匹配到的行另存为一个文件里面
[root@localhost app]# cat -n passwd|sed '11,21w /app/qqq'    
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    15  systemd-network:x:998:997:systemd Network Management:/:/sbin/nologin
    16  dbus:x:81:81:System message bus:/:/sbin/nologin
    17  polkitd:x:997:996:User for polkitd:/:/sbin/nologin
    18  abrt:x:173:173::/etc/abrt:/sbin/nologin
    19  unbound:x:996:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    20  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    21  colord:x:995:993:User for colord:/var/lib/colord:/sbin/nologin
  • 我们去查看下/app/qqq
[root@localhost app]# cat /app/qqq 
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    15  systemd-network:x:998:997:systemd Network Management:/:/sbin/nologin
    16  dbus:x:81:81:System message bus:/:/sbin/nologin
    17  polkitd:x:997:996:User for polkitd:/:/sbin/nologin
    18  abrt:x:173:173::/etc/abrt:/sbin/nologin
    19  unbound:x:996:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    20  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    21  colord:x:995:993:User for colord:/var/lib/colord:/sbin/nologin

r选项

  • r /path/somefile ,读取指定文件的文本至 模式空间中匹配 到的行后
  • 意思就是说把文件内容读到本文件里面
[root@localhost app]# cat -n passwd|sed '5r /etc/issue'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
\S
Kernel \r on an \m        <<<意思是把他读到第5行下面

     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
  • 还可以这样玩读到5到7行
[root@localhost app]# cat -n passwd|sed '5,7r /etc/issue'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
\S
Kernel \r on an \m

     6  sync:x:5:0:sync:/sbin:/bin/sync
\S
Kernel \r on an \m

     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
\S
Kernel \r on an \m

     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin

=号选项

  • =: 为模式空间中的行打印行号
  • 意思就是打印行号
[root@localhost app]# sed  '='  passwd     
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6
sync:x:5:0:sync:/sbin:/bin/sync
7
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8
halt:x:7:0:halt:/sbin:/sbin/halt
9
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10
operator:x:11:0:operator:/root:/sbin/nologin
11

!选项

  • !: 模式空间中匹配行取反处理
[root@localhost app]#  cat -n passwd |sed -n '10!p'
     1  root:x:0:0:root:/root:/bin/bash 
     2  bin:x:1:1:bin:/bin:/sbin/nologin  
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    14  systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    15  systemd-network:x:998:997:systemd Network Management:/:/sbin/nologin
    16  dbus:x:81:81:System message bus:/:/sbin/nologin
    17  polkitd:x:997:996:User for polkitd:/:/sbin/nologin
    18  abrt:x:173:173::/etc/abrt:/sbin/nologin

sed工具

  • s/// :查找替换, 支持使用其它分隔符,s@@@ ,s###
  • 替换标记:
  • g: 行内全局替换
  • p: 显示替换成功的行
  • w /PATH/TO/SOMEFILE :将替换成功的 行 保存至文件中

s/// :查找替换,#

  • 替换大写ROOT,但是只替换一行里面得到第一个,第二行不会替换
[root@localhost ~]# sed 's/root/ROOT/' qqq 
ROOT  root root root
ROOT 
ROOT
ROOT
ROOT
ROOT
ROOT
ROOT
ROOT
ROOT
  • 还可以指定偶数或奇数哦
[root@localhost ~]# sed '2~2s/root/ROOT/' qqq       
root  root root root
ROOT 
root
ROOT
root
ROOT
root
ROOT
root
ROOT
  • 分隔符用@,%,#等等都可以
[root@localhost ~]# sed '2~2s@root@ROOT@' qqq   
root  root root root
ROOT 
root
ROOT
root
ROOT
root
ROOT
root
ROOT

p选项

  • p: 显示替换成功的行
  • 意思就是说在显示
[root@localhost ~]# sed '2~2s@root@ROOT@gp' qqq
root  root root root
ROOT 
ROOT   <<<把匹配成功的行在打印一遍
root
ROOT
ROOT
root
ROOT
ROOT
root
ROOT
ROOT
root
ROOT
ROOT
  • w 就是把匹配到的另存为一下 和上面的w选项一样

地址定界

  • 单地址:
  • #: 指定的行
  • /pattern/ :被此处模式所能够匹配到的每一行
[root@localhost app]# sed '2p' passwd   
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin   把第2行显示2次
daemon:x:2:2:daemon:/sbin:/sbin/nologin 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
  • 显示r开头的行,下面我是以正则表达式来写的
[root@localhost app]# sed  -n /^r/p passwd 
root:x:0:0:root:/root:/bin/bash
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin 

地址范围详解(1)

  • 显示3到第10行
[root@localhost app]# sed  -n 3,6p passwd   
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[root@localhost app]# sed  -n 3,10p passwd  
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
  • 我们来用cat /etc/passwd来看看
[root@localhost app]# cat -n /etc/passwd
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
  • 还可以用+号来表示加行号,意思是在3的基础之上加10行
[root@localhost app]# sed  -n 3,+10p passwd          
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

地址范围详解(2)

  • 第二个地址范围作用
    -我搜索的是以h和s开头的行,看见没他是一行一行的搜索的
[root@localhost app]# sed -n '/^h/,/^s/p' passwd 
halt:x:7:0:halt:/sbin:/sbin/halt    <<<<<<<这是开头
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin 
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin  <这是结尾

地址范围详解(3)

  • 这是从第3行开始找到s开头的行
 [root@localhost app]# sed -n '3,/^s/p' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

步进

  • 1~2 奇数行
  • 下面是打印奇数行
[root@localhost app]# cat -n passwd|sed -n '1~2p' 
     1  root:x:0:0:root:/root:/bin/bash
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    11  games:x:12:100:games:/usr/games:/sbin/nologin
    13  nobody:x:99:99:Nobody:/:/sbin/nologin
    15  systemd-network:x:998:997:systemd Network Management:/:/sbin/nologin
    17  polkitd:x:997:996:User for polkitd:/:/sbin/nologin
    19  unbound:x:996:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    21  colord:x:995:993:User for colord:/var/lib/colord:/sbin/nologin
    23  geoclue:x:994:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
    25  libstoragemgmt:x:992:990:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
    27  rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
    29  radvd:x:75:75:radvd user:/:/sbin/nologin
    31  ntp:x:38:38::/etc/ntp:/sbin/nologin
  • 2~2 偶数行
  • 打印偶数行
[root@localhost app]# cat -n passwd|sed -n '2~2p'  
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     8  halt:x:7:0:halt:/sbin:/sbin/halt
    10  operator:x:11:0:operator:/root:/sbin/nologin
    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    14  systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    16  dbus:x:81:81:System message bus:/:/sbin/nologin
    18  abrt:x:173:173::/etc/abrt:/sbin/nologin
    20  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    22  usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    24  saslauth:x:993:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    26  rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    28  chrony:x:991:988::/var/lib/chrony:/sbin/nologin
    30  qemu:x:107:107:qemu user:/:/sbin/nologin 

Linux基础之三剑客AWK进阶

  • 上篇已经讲了AWK基础篇
  • 这篇开始讲进阶

awk工作原理

  • 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分,将每片直接保存在内建的变量中,$1,$2,$3….,引用指定的变量,可以显示指定断,或者多个断。如果需要显示全部的,需要使用$0来引用
  • 可以对单个片断进行判断,也可以对所有断进行循环判断
  • 其默认分隔符为空格

awk PATTERN

  • PATTERN:根据pattern条件,过滤匹配的行,再做处理
  • 格式 awk [option] 'pattern{action}' file
  • 那什么是PATTERN
  • 如果有一个文件 ,这个文件每读入一行,PATTERN就会根据条件做过滤处理
  • 如正则表达式,如果符合条件他就会进入action进去处理
  • 如果不符合他就不管他,接着读取另外一行,以此类推

不过PATTERN有多种写法

 - 如果为指定:空模式,匹配每一行 ,意思就是说不写PATTERN,只写action
 - 示例
     [root@localhost ~]# awk -F: '{print $1,3}' /etc/passwd
root 3
bin 3
daemon 3
adm 3
lp 3
sync 3
shutdown 3
halt 3
mail 3
operator 3
games 3
ftp 3
nobody 3
systemd-bus-proxy 3
systemd-network 3
dbus 3
polkitd 3
colord 3
abrt 3
  • 我没有写PATTERN,所以他会对所有行的第一和第三行打印出来,这就是空模式,匹配每行

  • 正则表达式的限定,/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来

  • 示例

[root@localhost ~]# awk  /^UUID/ /etc/fstab 
UUID=5fa28b49-456d-4303-81d0-811b1bfa3ae9 /                       xfs     defaults        0 0
UUID=b0e8912e-cb67-4973-8557-f190f961c0cd /boot                   xfs     defaults        0 0
UUID=c204831a-efc0-4b13-bc39-259bd22cb677 /usr                    xfs     defaults        0 0
UUID=c8298654-edd5-44df-8014-1dbf1fb8dba7 swap                    swap    defaults        0 0
  • 我没有填写print 那是因为默认自动打印$0,就算我写了也一样,想取什么,就取什么
[root@localhost ~]# awk  '/^UUID/ {print $0  }' /etc/fstab 
UUID=5fa28b49-456d-4303-81d0-811b1bfa3ae9 /                       xfs     defaults        0 0
UUID=b0e8912e-cb67-4973-8557-f190f961c0cd /boot                   xfs     defaults        0 0
UUID=c204831a-efc0-4b13-bc39-259bd22cb677 /usr                    xfs     defaults        0 0
UUID=c8298654-edd5-44df-8014-1dbf1fb8dba7 swap                    swap    defaults        0 0
  • 还可以取反哦
    [root@localhost ~]# awk '!/^UUID/ {print $0 }' /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Jul 13 08:26:25 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
  • 甚至我还可以拿他来取磁盘分区使用列表哦
[root@localhost ~]# df| awk '/^\/dev\/sd/ {print $5}'
1%
13%
30%
  • relational expression: 关系表达式,结果为“真”才会被处理
  • 真:结果为非0值,非空字符串
  • 假:结果为空字符串或0值
  • 意思就是只要不是为0都打印,为0就不打印
  • 示例
[root@localhost ~]# awk -F: '"" {print $0  }' /etc/fstab  
  • 没打印如果给他个任意字符串
[root@localhost ~]# awk -F: '"rrr" {print $0  }' /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Jul 13 08:26:25 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5fa28b49-456d-4303-81d0-811b1bfa3ae9 /                       xfs     defaults        0 0
UUID=b0e8912e-cb67-4973-8557-f190f961c0cd /boot                   xfs     defaults        0 0
UUID=c204831a-efc0-4b13-bc39-259bd22cb677 /usr                    xfs     defaults        0 0
UUID=c8298654-edd5-44df-8014-1dbf1fb8dba7 swap                    swap    defaults        0 0

line ranges:行范围

  • startline,endline:/pat1/,/pat2/ 不支持直接给出数字格式
  • 示例
[root@localhost ~]# awk -F: '/^b/,/^f/' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

-还可以取中间

[root@localhost ~]# awk -F: 'NR>=10&&NR<=20{print NR,$0}'  /etc/passwd  
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
15 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
16 dbus:x:81:81:System message bus:/:/sbin/nologin
17 polkitd:x:998:996:User for polkitd:/:/sbin/nologin
18 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
19 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
20 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

BEGIN/END模式

  • 通常,对于每个输入行,awk 都会执行每个脚本代码块一次。然而,在许多编程情况中
  • 可能需要在awk 开始处理输入文件中的文本之前执行初始化代码。对于这种情况,awk 允许
  • 您定义一个BEGIN 块。我们在前一个示例中使用了BEGIN 块。因为awk 在开始处理输入文件之前会执行BEGIN 块
  • 因此它是初始化 FS(字段分隔符)变量、打印页眉或初始化其它
  • 在程序中以后会引用的全局变量的极佳位置
  • 比如我打表头
[root@localhost ~]# awk -F: 'BEGIN{print" linenumber     username    userid"}NR>=10&&NR<=20{printf  "%s-12   %+15s %+10d \n " ,NR,$1,$3}'  /etc/passwd
 linenumber     username    userid
10-12          operator        +11 
 11-12             games        +12 
 12-12               ftp        +14 
 13-12            nobody        +99 
 14-12   systemd-bus-proxy       +999 
 15-12   systemd-network       +192 
 16-12              dbus        +81 
 17-12           polkitd       +998 
 18-12               tss        +59 
 19-12           postfix        +89 
 20-12              sshd        +74 

awk action,循环,数组

  • 常用的action分类
  • Expressions:算术,比较表达式等
  • Control statements:if, while等
  • Compound statements:组合语句
  • input statements
  • output statements:print等

awk控制语句if-else

  • 语法:if(condition){statement;…}[else statement]:简单语句,如果条件成立就执行语句,如果不成立我就执行else后面的语句
  • if(condition1){statement1}else if(condition2){statement2}:复杂语句,如果条件成立我就执行后面的语句,如果不成立我会检测后面的语句成立不成立,如果还不成立我就执行后面的else后面的语句
  • else{statement3}
  • 使用场景:对awk取得的整行或某个字段做条件判断,if,else可以写多个,和bash不同
  • 示例
  • 第一判断
[root@localhost ~]# awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd
root

-第二判断

[root@localhost ~]# awk '{if(NF>5) print $0}' /etc/fstab
# Created by anaconda on Fri Jul 14 03:57:39 2017
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/cl-root     /                       xfs     defaults        0 0
/dev/mapper/cl-app      /app                    xfs     defaults        0 0
UUID=c15af5a4-49d5-4551-abda-921540bf8424 /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
  • 第三判断
[root@localhost ~]# df -h|awk -F% '/^\/dev/{print $1}'|awk '$NF>=10{print $1,$5}' 
/dev/sda1 14

awk控制语句

  • while循环
  • 语法:while(condition){statement;…}
  • 条件“真”,进入循环;条件“假”,退出循环
  • 使用场景:
  • 对一行内的多个字段逐一类似处理时使用
  • 对数组中的各元素逐一处理时使用
  • while是处理字段的,要记住哦
  • 行循环AWK自带
  • awk 提供了非常好的类似于 C 语言的if 语句。
{ 
 if ( $1== "foo" ) { 
 if ( $2== "foo" ) { 
 print "uno" 
 } else { 
 print "one" 
 } 
 } elseif ($1== "bar" ) { 
 print "two" 
 } else { 
 print "three" 
 } 
} 
  • 示例一
[root@localhost ~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i); i++}}' /etc/grub2.cfg
linux16 7
/vmlinuz-3.10.0-514.el7.x86_64 30
root=/dev/mapper/cl-root 24
ro 2
crashkernel=auto 16
rd.lvm.lv=cl/root 17
rd.lvm.lv=cl/swap 17
rhgb 4
quiet 5
LANG=en_US.UTF-8 16
net.ifnames=0 13
linux16 7
/vmlinuz-0-rescue-a8151f75d28c4b7ba1db0b5ad8c60cd6 50
root=/dev/mapper/cl-root 24
ro 2
crashkernel=auto 16
rd.lvm.lv=cl/root 17
rd.lvm.lv=cl/swap 17
rhgb 4
quiet 5
  • 示例二
[root@localhost ~]# awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=10) {print $i,length($i)}; i++}}' /etc/grub2.cfg
/vmlinuz-3.10.0-514.el7.x86_64 30
root=/dev/mapper/cl-root 24
crashkernel=auto 16
rd.lvm.lv=cl/root 17
rd.lvm.lv=cl/swap 17
LANG=en_US.UTF-8 16
net.ifnames=0 13
/vmlinuz-0-rescue-a8151f75d28c4b7ba1db0b5ad8c60cd6 50
root=/dev/mapper/cl-root 24
crashkernel=auto 16
rd.lvm.lv=cl/root 17
rd.lvm.lv=cl/swap 17
  • do-while循环
  • 语法:do {statement;…}while(condition
  • 意义:无论真假,至少执行一次循环体
  • 示例
[root@localhost ~]#  awk 'BEGIN{ total=0;i=0;do{ total+=i;i++;}while(i<=100);print total}'
5050

for循环

  • for循环
  • 语法:for(expr1;expr2;expr3) {statement
  • 常见用法:
  • for(variable assignment;condition;iteration
  • {for-body}
  • 特殊用法:能够遍历数组中的元素
  • 语法:for(var in array) {for-body}
  • 示例
[root@localhost ~]# awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg
linux16 7
/vmlinuz-3.10.0-514.el7.x86_64 30
root=/dev/mapper/cl-root 24
ro 2
crashkernel=auto 16
rd.lvm.lv=cl/root 17
rd.lvm.lv=cl/swap 17
rhgb 4
quiet 5
LANG=en_US.UTF-8 16
net.ifnames=0 13
linux16 7
/vmlinuz-0-rescue-a8151f75d28c4b7ba1db0b5ad8c60cd6 50
root=/dev/mapper/cl-root 24
ro 2
crashkernel=auto 16
rd.lvm.lv=cl/root 17
rd.lvm.lv=cl/swap 17
rhgb 4
quiet 5

其他语句

  • switch语句
  • 语法:switch(expression) {case VALUE1 or /REGEXP/:
  • statement1; case VALUE2 or /REGEXP2/: statement2;
  • break和continue
  • awk ‘BEGIN{sum=0;for(i=1;i<=100;i++)
  • {if(i%2==0)continue;sum+=i}print sum}‘
  • awk ‘BEGIN{sum=0;for(i=1;i<=100;i++)
  • {if(i==66)break;sum+=i}print sum}‘
  • 示例
[root@localhost ~]# awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd
root 0
daemon 2
lp 4
shutdown 6
mail 8
games 12
ftp 14
systemd-network 192
polkitd 998
libstoragemgmt 996
rpc 32
rtkit 172
geoclue 994
gdm 42
nfsnobody 65534
ntp 38
sshd 74
tcpdump 72
mageedu 1000

AWK数组

  • 关联数组:array[index-expression]
  • index-expression:
  • 可使用任意字符串;字符串要使用双引号括起来
  • 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串”
  • 若要判断数组中是否存在某元素,要使用“index in array”格式进行遍历
  • 示例一
  • 数组非常绕好好看
[root@localhost ~]# awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}'
Monday
日记本
Web note ad 1