天天看点

Linux系统管理命令及详细参数系统管理

目录

系统管理

useradd命令

语法

选项

实例

passwd命令

语法

选项

实例

userdel命令

语法

选项

实例

init命令

语法

选项

参数

运行级别

runlevel命令

语法

实例

w命令

语法

选项

参数

实例

ps命令

语法

选项

进程状态说明(stat列)

killall命令

语法

选项

信号说明

实例

pkill命令

语法

选项

实例

kill命令

语法

选项

实例

id命令

语法

选项

实例

last命令

语法

选项

示例

实例

lastlog命令

语法

选项

实例

mount命令

语法

选项

实例

umount命令

语法

选项

实例

fsck命令

语法

选项

实例

crontab命令

语法

选项

示例

实例

mkfs命令

语法

选项

补充说明:

mke2fs选项

logrotate命令

语法

选项

配置文件参数

实例

tune2fs命令

语法

选项

示例

示例说明

实例

swapon/swapoff命令

语法

选项

实例

visudo命令

语法

选项

实例

su命令

语法

选项

实例

chpasswd命令

语法

选项

实例

pidof命令

语法

选项

实例

lastb命令

语法

选项

实例

ipcs命令

语法

选项

实例

setcap命令

语法

选项

实例

usermod命令

语法

选项

实例

pgrep命令

语法

选项

实例

sync命令

语法

选项

系统管理

useradd命令

useradd命令用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。

语法

useradd  (选项) 用户名

选项

-c<备注>:关于登录用户的简短描述。备注文字会保存在passwd文件的备注栏位中;

-d<登入目录>:指定用户的家目录;

-D:变更创建用户的预设值;

-e<有效期限>:指定帐号的有效期限;

-f<缓冲天数>:密码过期后,账户被彻底禁用之前的天数。0 表示立即禁用,-1 表示禁用这个功能;

-g<群组>:指定用户所属的群组;

-G<群组>:指定用户所属的附加群组;

-m:自动建立用户的登入目录;

-M:不要自动建立用户的登入目录;

-n:取消建立以用户名称为名的群组;

-r:建立系统帐号;

-s<shell>:指定用户登入后所使用的shell;

-u<uid>:指定用户id;

-o: 允许使用重复的 UID 创建用户账户,此选项必须与"-u"选项同时使用。

实例

#创建普通用户并设置对应属性

shell> useradd -u 544 -g test -G employees -c "test user" -e 2019-11-02 -f 2 test

#创建禁止登陆的用户

shell> useradd -M -s /sbin/nologin test01 

passwd命令

passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。

语法

passwd [选项...] <帐号名称>
           

选项

-d:删除已命名帐号的密码(只有root用户才能进行此操作)
-f:强制执行;
-l:锁定指名帐户的密码(仅限 root 用户);
-u:解锁指名账户的密码(仅限 root 用户);
-e:终止指名帐户的密码(仅限 root 用户),用户登录后需更改密码;
-S:列出密码的相关信息,仅有系统管理者才能使用;
-k:保持身份验证令牌不过期;
-x, --maximum=DAYS:密码的最长有效时限(只有根用户才能进行此操作)
-n, --minimum=DAYS:密码的最短有效时限(只有根用户才能进行此操作)
-w, --warning=DAYS:在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
-i, --inactive=DAYS:当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
--stdin:从标准输入读取令牌(只有根用户才能进行此操作)
           

实例

#免交互设置密码
shell> echo "123456" | passwd --stdin test
​
#设置密码的有效时限
shell> passwd -x 2 -n 1 -w 2 -i 1 test
           

userdel命令

userdel命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。

语法

userdel (选项) 用户名
           

选项

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

实例

#删除用户linuxde,但不删除其家目录及文件;
shell> userdel linuxde
​
#强制删除用户linuxde,其家目录及文件一并删除;
userdel -rf linuxde 
           

init命令

init命令是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。

语法

init (选项) (参数)
           

选项

-b:不执行相关脚本而直接进入单用户模式;
-s:切换到单用户模式。
           

参数

运行等级:指定Linux系统要切换到的运行等级。

运行级别

到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。你也可以在

/etc/inittab

中查看它的英文介绍。

0      停机(千万不能把initdefault 设置为0)
1,S,s  单用户模式
2      多用户,没有网络
3      完全多用户模式,有网络
4      没有用到
5      图形页面
6      重新启动(千万不要把initdefault 设置为6)
           

runlevel命令

runlevel命令用于打印Linux系统上一个和当前的运行等级。

语法

runlevel
           

实例

shell> runlevel
N 3
           

w命令

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

语法

w (选项) (参数)
           

选项

-h:不打印头信息;
-s:使用短输出格式;
-f:不显示用户从哪登录;
-V:显示版本信息。
           

参数

用户:仅显示指定用户。

实例

shell> w
 10:34:28 up 18:45,  1 user,  load average: 0.00, 0.01, 0.03
USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.20.254    10:34    3.00s  0.00s  0.00s w
           

ps命令

ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

ps命令支持三种语法格式:

  • Unix风格的参数,前面加单破折线
  • BSD风格的参数,前面不加破折线
  • GNU风格的长参数,前面加双破折线

语法

ps [options]
           

选项

-A: 显示所有的进程。
-e: 显示所有的进程。
-a: 显示除了会话领导者和与终端无关的进程之外的所有进程。
a: 显示除了与终端无关的进程之外的所有进程。
-c: 显示CLS和PRI栏位。
c: 列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
-C <进程名称>:指定进程的名称,并列出该进程的状况。
-d: 显示除了阶段作业领导者之外的所有进程。
-f: 显示UID,PPID,C与STIME栏位。
-g<群组名称>:此选项的效果和指定"-G"选项相同,可使用群组名称或者使用会话领导者的pid来指定。
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
-H:显示树状结构,表示程序间的相互关系。
-j:采用工作控制的格式显示程序状况(额外显示PGID,SID列)。
-l:采用详细的格式来显示程序状况。
-m:在进程下显示所有的线程。
-N:显示所有的程序,显示除了当前终端机下的程序之外的所有程序。
-p<程序识别码>:指定程序识别码,并列出该程序的状况。
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
-T:显示现行终端机下的所有程序。
-u<用户识别码>:此选项的效果和指定"-U"选项相同。
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
-v: 采用虚拟内存的格式显示程序状况。
-V或V:显示版本信息。
-w或w:采用宽阔的格式来显示程序状况。 
-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位。
-L:显示线程信息。
-o:格式化输出你想要的参数,常用的格式有lstart(程序开始时间),etime(程序运行时间),stat(进程状态)。更多格式可以通过man手册查看具体参数。
--cols<每列字符数>:设置每列的最大字符数。
--headers:重复显示标题列。
--help:在线帮助。
--info:显示排错信息。
           

进程状态说明(stat列)

D 不可中断
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
+ 位于后台的进程组;
l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
           

killall命令

killall命令使用进程的名称来杀死进程,使用此指令可以杀死一组同名进程。需要安装"psmisc"才可以使用此命令。

语法

killall [-Z 上下文] [-u 用户名] [ -eIgiqrvw ] [ -信号 ] 程序名
           

选项

-e: 精准匹配。由于命令名长于15个字符时,会杀死匹配前15个字符的所有进程。此时需要使用-e选项进行精准匹配。
-I: 进程名匹配不区分大小写。
-i: 交互式杀死进程,杀死进程前需要进行确认。
-o: 只匹配在指定时间之前启动的进程。时间是一个浮点数后跟一个单位,单位可以为s, m, h, d, w, M, y对应为秒,分钟,小时,天,星期,月,年。
-l: 打印所有已知信号列表。
-q: 静默模式,不输出信息。
-r: 使用正规表达式匹配要杀死的进程名称;
-s: 用指定的进程号代替默认信号“SIGTERM”;
-u: 杀死指定用户的进程。
-w: 等待killall执行完成,每秒检测一次,直到完成返回。如果信号被忽略或不起作用,或停留在僵尸状态,killall会永久等待。
-y: 仅匹配指定时间之后的进程,与-o选项相反。
           

信号说明

  • 1 HUP 终端断线 (无须关闭进程而让其重读配置文件)
  • 2 INT 中断进程 (同 Ctrl + c)
  • 3 QUIT 退出进程(同 Ctrl + \)
  • 9 KILL 无条件终止进程
  • 15 TERM 终止进程
  • 18 CONT 继续运行停止的进程 (同fg/bg命令)
  • 19 STOP 无条件停止进程,但不是终止进程
  • 20 TSTP 停止或暂停进程,但不终止进程 (同Ctrl+z)

实例

#正则匹配关闭
shell> killall -wr  n[gc]in*
​
#根据时间匹配关闭
shell> killall -q -o 19s11m11h  nginx
           

pkill命令

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

语法

pkill [选项] (参数)
           

选项

-<sig>: 发送指定信号;
-e: 显示被杀死的内容;
-c: 统计匹配的进程数;
-f: 使用完整的进程名来匹配;
-o: 匹配时间最新的进程;
-n: 匹配时间最老的进程;
-P: 只匹配给定父进程的子进程;
-g: 指定进程组id(父进程pid);
-G: 只匹配列出了实际组ID的子进程;
-t:指定开启进程的终端。
           

实例

#返回杀死进程的相关信息

shell> pkill -ec nginx

nginx killed (pid 1118)

nginx killed (pid 1119)

nginx killed (pid 1120)

3

#杀死指定组id的子进程;

shell> pkill -ecG 995

nginx killed (pid 1141)

nginx killed (pid 1142)

2

#根据终端杀死用户登录

shell> pkill -t -9 pts/1

kill命令

kill命令用来终止执行中的程序或工作。kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或job指令查看。

语法

kill  [选项] 进程号
           

选项

-s: 指定发送信号名称;
-n: 指定发送信号编号;
-l <信息编号>: 若不加<信息编号>选项,则-l参数会列出全部的信息名称;
           

实例

#强制杀死
shell> kill -9 1127
​
#根据信号编号杀死
shell> kill -n 1 1127
​
#根据信号名称杀死
shell> kill -s SIGHUP 1127
           

id命令

id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。 不带选项id命令会显示当前用户

语法

id [OPTION]... [USER]
           

选项

-g: 显示用户所属群组的ID。
-G: 显示用户所属附加群组的ID。
-n: 为-ugG显示名称而不是数字。
-r: 为-ugG打印真实的ID,而不是有效的ID。
-u: 显示用户ID。
-z: 用NUL字符分隔条目,而不是空格,需配合-ugG参数。
           

实例

shell> id root
uid=0(root) gid=0(root) 组=0(root)
​
shell> id -nu zabbix
zabbix
           

last命令

last命令用于显示用户最近登录信息。 通过last命令查看该程序的log,管理员可以获知谁曾经或者企图连接系统。 单独执行last命令,它会读取

/var/log/wtmp

的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。

语法

last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]
           

选项

-a: 把从何处登入系统的主机名称或ip地址,显示在最后一行;
-d: 将IP地址转换成主机名称;
-f <记录文件>: 使用特定文件代替/var/log/wtmp;
-F: 显示完整的登陆时间,包含退出时间;
-n <显示列数>: 设置列出名单的显示列数;
-R: 不显示登入系统的主机名称或IP地址;
-x: 显示系统关闭项和运行级别更改;
-t YYYYMMDDHHMMSS: 显示指定时间之前的登录情况;
username: 查看指定用户的登陆信息;
tty [n]: 查看指定终端的登陆信息;
           

示例

shell> last -n 2 root
root     pts/4        61.130.182.194   Wed Nov 20 10:08   still logged in
dc       pts/3        61.130.182.194   Tue Oct 29 11:33 - 16:18  (04:45)
           
  • 第一列:用户名
  • 第二列:终端位置,后面的数字代表连接编号
  • 第三列:登录IP或内核
  • 第四列:开始时间
  • 第五列:结束时间(still login in尚未退出,down直到正常关机,crash直到强制关机)
  • 第六列:持续时间

实例

shell> last -Rn 3
root     pts/4        Wed Nov 20 10:08   still logged in   
root     pts/1        Wed Nov 20 09:50   still logged in   
walle    pts/1        Wed Nov 20 09:37 - 09:39  (00:02)    
​
#指定日期之前的用户登录信息
shell> last -t 20191119180900
eboot   system boot  3.10.0-1062.el7. Tue Nov 19 18:08 - 10:20  (16:12)    
reboot  system boot  3.10.0-1062.el7. Tue Nov 19 18:08 - 10:20  (16:12)    
root    pts/0        192.168.137.1    Sun Oct 20 21:24 - crash (29+20:43)  
​
#查看系统启动时间
shell> last reboot
wtmp begins Mon Jun 10 08:26:18 2019
           

lastlog命令

lastlog命令用于报告所有用户的最近登录情况,或者指定用户的最近登录情况。 它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示

**Never logged**

。使用此命令需要root身份。

语法

lastlog [option]
           

选项

-b<天数>:显示指定天数前的登录信息;
-t<天数>:显示指定天数以来的登录信息;
-u<用户名>:显示指定用户的最近登录信息;
-S: 将用户的lastlog记录修改为当前时间,此选项只能与"-u"一起使用;
           

实例

#修改walle用户的登陆信息
shell>  lastlog -u walle -S
​
#查看两天前的用户登录信息
shell> lastlog -b 2
​
#查看两天内的用户登录信息
shell> lastlog -t 2
           

mount命令

mount命令用于加载文件系统到指定的挂载点,在Linux中根目录以外的文件要想被访问,需要将其"关联"到根目录下的某个目录来实现, 这种关联操作就是"挂载",这个目录就是"挂载点",解除次关联关系的过程称之为"卸载"。

语法

mount [选项] <源> <目录>
           

选项

-a: 加载文件"/etc/fstab"中描述的所有文件系统;
-l: 显示已加载的文件系统列表;
-h: 显示帮助信息并退出;
-v: 冗长模式,输出指令执行的详细信息;
-F: 为每个设备派生一个新的挂载进程。这将并行地在不同的设备或不同的NFS服务器上执行挂载。这样做的好处是更快。此外,NFS超时也是并行进行的。缺点是挂载按未定义的顺序执行;
-n: 在mount后不将挂载信息写入到"/etc/mtab"文件(默认写入);
-t <filetype>: 指定要挂载的设备上的文件系统类型;
-r: 将文件系统加载为只读模式;
-L <label>: 挂载具有指定标签的设备;
-U <UUID>: 挂载具有指定UUID的设备;
-o async: 打开异步模式,所有的档案读写动作都会用异步模式执行;
-o sync: 所有的档案读写动作都会用同步模式执行;
-o atime/noatime:当atime打开时,系统会在每次读取文件时更新档案的最近一次访问时间戳(默认),noatime选项会关闭此操作,提高文件系统的性能。
-o auto/noauto: auto选项会在系统启动时,或者"mount -a"命令时自动挂载文件系统。noauto选项只用单独执行命令时才会挂载文件系统;
-o defaults: 使用文件系统的默认挂载参数,例如ext4的默认参数为:rw,suid,dev,exec,auto, nouser,async;
-o dev/nodev: 是否支持在此文件系统上使用设备文件;
-o exec/noexec: 设定在文件系统中是否允许执行可执行文件;
-o suid/nosuid: 设定在文件系统中否支持suid和sgid权限;
-o user/nouser: 设定此文件系统是否允许让普通用户使用mount执行实现挂载,默认是不允许,仅有root可以。
-o remount:重新挂载已挂载的文件系统,一般用于指定修改特殊权限。
-o rw/ro: 是否对挂载的文件系统拥有读写权限,rw为默认值,表示拥有读写权限;ro表示只读权限。
           

实例

shell> mount  -o sync /root/test-dev /test/
           

umount命令

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

语法

umount [选项] <源> | <目录>
           

选项

-a: 卸除/etc/mtab中记录的所有文件系统;
-f: 强制卸载(遇到不响应的 NFS 系统时);
-l: 先将文件系统从文件系统层次结构中分离出来,并在文件系统空闲时尽快清除所有对它的引用。
-r: 若无法成功卸除,则尝试以只读的方式重新挂入文件系统;
-v: 执行时显示详细的信息;
           

实例

shell> umount -lvf /test/
umount: /test (/dev/loop0) 已卸载
           

fsck命令

fsck命令用于检查与修复 Linux文件系统,可以同时检查一个或多个 Linux文件系统。

语法

fsck [-lrsAVRTMNP] [-C [fd]] [-t fstype] [filesystem...]  [--] [fs-specific-options]
           

选项

-a: 自动修复文件系统,不询问任何问题;

-A: 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统;

-N: 不执行指令,仅列出实际执行会进行的动作;

-P: 当搭配"-A"参数使用时,则会并行检查所有的文件系统;

-r: 当fsck完成时,报告每个fsck的统计数据。这些统计数据包括退出状态,最大运行集大小

(以千字节为单位),fsck使用的所有时钟时间和用户和系统CPU时间。

-R: 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查;

-s: 序列化fsck操作,而非同时执行;

-t<文件系统类型>: 指定要检查的文件系统类型;

-T: 执行fsck指令时,不显示标题信息;

-V: 显示指令执行过程;

实例

shell> fsck -rVAT
正在检查所有文件系统。
           

crontab命令

crontab命令被用来提交和管理用户的周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。crond进程的配置文件位置为"/etc/cronta",执行任务的日志文件位置为"/var/log/cron",用户的配置文件位置在"/var/spool/cron/<username>"。

语法

crontab [options] file
           

选项

-u <user>: 设置指定"user"的定时器,如果不指定默认为当前用户;
 -e: 编辑用户的定时器,内定的文字编辑器是"vi";
 -l: 列出用户的定时器;
 -r: 删除用户的定时器;
 -i: 此选项修改-r选项,在实际删除crontab之前提示用户输入"y/Y"响应;
           

示例

Linux系统管理命令及详细参数系统管理

前三行是用来配置crond任务运行的环境变量

  • 第一行SHELL变量指定了系统要使用哪个shell,这里是bash
  • 第二行PATH变量指定了系统执行命令的路径
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户。如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。

时间的特殊字符

  1. 星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  2. 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,"1,2,5,7,8,9"。
  3. 中杠(-):可以用整数之间的中杠表示一个整数范围,例如"2-6"表示"2,3,4,5,6"。
  4. 正斜线(/):可以用正斜线指定时间的间隔频率,例如"*/2"表示每两小时执行一次。

实例

#每晚的21:30重启lighttpd服务
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
​
#每月1,10,22日的4:45重启lighttpd
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
​
#每周六,周日的1:10重启lighttpd
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
​
#每天18:00至23:00之间每隔30分钟重启lighttpd
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
​
#每隔一小时重启lighttpd
0 * * * * /usr/local/etc/rc.d/lighttpd restart
​
#晚上11点到早上7点之间,每隔一小时重启lighttpd
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
           

mkfs命令

mkfs命令用于在硬盘分区上创建Linux文件系统。mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。

语法

mkfs [options] [-t <type>] [fs-options] <device> [<size>]
           

选项

-v: 详细显示执行过程;
-V: 显示版本信息并退出;
-t <type>: 指定文件系统类型,若不指定,Linux默认的文件类型为"ext2";
device: 预备检查的硬盘分区,例如:/dev/sda1;
           

补充说明:

mkfs命令本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。例如,若在"-t"参数中指定ext4,则mkfs会调用mke2fs命令来建立文件系统。

mke2fs选项

-b <block-size>: 指定区块大小,单位为字节,有效的块大小值为1024,2048和4096字节。
-c: 创建文件系统之前,请检查设备是否有坏块。如果两次指定此选项,则使用较慢的读写测试,而不是快速的只读测试;
-F: 强制mke2fs创建文件系统,这个选项必须指定两次;
-i <字节>: 指定"磁盘空间/inode"的比例,mke2fs为磁盘上每"-i"字节的空间创建一个inode。每个索引节点的字节数比率越大,则创建的索引节点就越少。这个值通常不应该小于文件系统的块大小,因为在这种情况下,将生成比以往任何时候都要多的索引节点。请注意,在文件系统创建后,不可能更改它的比率,因此请小心决定此参数的正确值。
-I <inode-size>: 指定inode size大小,默认配置文件在/etc/mke2fs.conf。值为256字节。
-r revision: 为新文件系统设置文件系统修订。注意,1.2内核只支持修订0文件系统。默认设置是创建修订1文件系统。
-N <number>: 指定要建立的inode数目,覆盖文件系统的inode数量的默认计算(基于块的数量和每inode的字节数比率);
-l<文件>: 从文件名中读取坏块列表。注意,坏块列表中的块号必须使用mke2fs生成的相同块大小;
-L<标签>: 设置文件系统的标签名称;
-m <百分比值>: 指定给管理员保留区块的比例,预设为5%;
-g <blocks-per-group>: 指定块组中的块数。用户通常没有理由设置这个参数,因为默认值对于文件系统来说是最优的。
-M <last-mounted-directory>: 设置文件系统的最后一个挂载目录;
-t <fs-type>: 指定文件系统类型,(ext2, ext3, ext4, xfs等);
-U <UUID>: 指定文件系统的UUID;
-T <fs_types>: 指定使用怎样的文件系统参数,支持的使用类型在配置文件/etc/mke2fs.conf中定义。
如果没有指定这个选项, mke2fs将根据要创建的文件系统的大小选择一个默认使用类型。如果文件系统大小小于等于3兆字节,mke2fs将使用"floppy"文件系统类型。如果文件系统的大小大于3兆但小于或等于512兆字节,那么mke2fs将使用"small"的文件系统类型。如果文件系统大小大于或等于4tb,但小于16 tb,则mke2fs将使用"big"文件系统类型。如果文件系统大小大于或等于16tb,那么mke2fs将使用 "huge"文件系统类型。否则,mke2fs将使用默认的文件系统类型。
-q: 执行时不显示任何信息;
-v: 执行时显示详细信息;
-V: 显示版本信息;
           
实例
#指定格式化块大小与标签
shell> mke2fs -t ext4 -L TEST -b 2048 /dev/sdb1 
或
shell> mkfs.ext4 -L TEST -b 2048 /dev/sdb1   #简写方式
           

logrotate命令

logrotate命令用于对系统日志进行轮转,压缩和删除,也可以将日志发送到指定邮箱。使用logrotate指令,可让你轻松管理系统所产生的记录文件。每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,预设的配置文件存放在

/etc/logrotate.conf

文件中。

语法

logrotate [OPTION...] <configfile>
           

选项

-?或--help: 查看帮助信息;
-d或--debug: 详细显示指令执行过程,不执行,只是测试。便于排错或了解程序执行的情况;
-f或--force: 强行启动记录文件维护操作,纵使logrotate指令认为没有需要;
-s<状态文件>或--state=<状态文件>: 使用指定的状态文件;
-v或--version: 显示指令执行过程;
-usage: 显示指令基本用法;
           

配置文件参数

rotate COUNT      #轮转COUNT次,也就是最多保留COUNT个轮转备份,设置为0,则不保存轮转的老日志。
​
start COUNT       #轮转文件名基于这个数字。例如指定0时,原日志文件轮转的备份文件以.0为扩展名,如果指定9,就直接从.9开始跳过0-8,然后再继续向后轮转rotate指定的次数。
​
compress          #默认使用gzip压缩转储之前的日志。
​
nocompress        #不压缩转储之前的日志。
​
compresscmd       #指定压缩命令,默认gzip。
​
uncompresscmd     #指定解压命令,默认gunzip。
​
compressext       #指定在启用压缩的情况下对压缩文件使用哪个扩展名,默认与配置的压缩命令相同。
​
compressoptions   #可以传送命令行选项给压缩程序,默认的gzip使用"-6"(高压缩率)选项.
​
delaycompress     #将前一个日志文件的压缩推迟到下一个循环周期。这只有在与"compress"选项一起使用时才有效。当某些程序无法关闭其日志文件,可能在一段时间内继续写入前一个日志文件时,可以使用它。
​
nodelaycompress   #不要将前一个日志文件的压缩推迟到下一个循环(这将覆盖delaycompress选项)。
​
copy              #复制日志文件,但不要更改原始的。例如,可以使用此选项创建当前日志文件的快照,或者在其他实用程序需要截断或解析文件时使用此选项。当使用此选项时,"create"选项将不起作用,因为旧的日志文件仍然存在。
​
nocopy            #不要复制原始日志文件并将其保留在原来的位置(这将覆盖"copy"选项)。
​
copytruncate      #在创建了副本后截断原日志文件到0大小,而不是用移动旧日志文件再创建新文件的方法。可用于日志一些程序不关闭日志文件一直写的情况。注意,在拷贝文件和截断文件时有一个非常小的时间片,所以可能会丢失日志信息。使用此选项时,"create"选项无效。
​
nocopytruncate    #不要在创建副本后截断原始日志文件(这将覆盖"copytruncate"选项)。
​
create MODE OWNER GROUP  #在轮转动作之后,postrotate脚本执行之前,立即使用轮转前的日志文件名创建日志文件。 MODE 指定日志文件的权限(0660之类), OWNER 指定日志文件的属主, GROUP 指定日志文件的属组,可省略任何上述属性,省略的属性从原文件继承,可使用nocreate项来关闭。
​
nocreate          #不创建新的日志文件
​
daily             #每天轮转日志文件
​
weekly [weekday]  #日志文件在指定工作日旋转一次,或者如果日期比上次旋转至少提前7天(同时忽略确切时间)。工作日解释如下: 0表示星期日,1表示星期一,...,6表示星期六,特殊值7表示每7天,不考虑工作日。如果省略weekday参数,则默认为0。
​
monthly           #每月logrotate第一次运行时进行轮转(通常是一月的第一天)。
​
yearly            #如果当前年份不同于上次轮转的年份,则进行日志轮转。
​
dateext           #切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216。可用dateformat选项扩展配置。
​
nodateext         #不要使用日期扩展来存档旧版本的日志文件(这将覆盖dateext选项)。
​
dateformat FORMAT_STRING    #使用strftime(3)类似的格式指定dateext的格式,只允许%Y %m %d %H和%s指定符。默认为"-%Y%m%d",但每小时需要使"-%Y%m%d%H"作为默认值。注意:扩展中分割日志的字符也是日期格式的一部分,系统时钟需要设置到2001-09-09之后,%s才能正确工作。
​
extension ext     #扩展名为ext的日志文件可以在旋转之后保留它。如果使用压缩,则压缩扩展(通常为.gz)出现在ext之后。例如,您有一个名为mylog.foo的日志文件,希望将其旋转到mylog.1.foo.gz而不是mylog.foo.1.gz,则该选项写为"extension .foo"。
​
ifempty           #默认项,即使日志是空的也进行轮转,覆盖notifempty选项。
​
notifempty        #如果日志为空,则不进行轮转。
​
include FILE_OR_DIRECTORY   #读取作为参数给定的文件,就像在include指令出现的位置内联包含该文件一样。如果给定了目录,则在继续处理包含的文件之前,该目录中的大多数文件都将按字母顺序读取。唯一被忽略的文件是非常规文件(如目录和命名管道)的文件和其名称以禁忌扩展名结尾的文件,如tabooext指令所指定的。
 
tabooext [+] LIST #修改当前禁忌扩展名列表,如果列表前使用了+,表示将LIST加到当前列表中,否则就替换当前列表。默认包含: .rpmorig, .rpmsave, .v, .swp, .dpkg-dist, .dpkg-old, .dpkg-new, .disabled。
 
mail ADDRESS      #当日志轮转超过保留数时,多出的会mail到ADDRESS。
​
nomail            #不邮寄日志
​
mailfirst         #与mail指令连用,邮寄刚轮转的日志,而不是期满的日志(超出数量要被删除的)
​
maillast          #默认项,与mail连用,邮寄超出rotate数量要被删除的日志。
 
maxage COUNT      #删除COUNT天前的轮转备份,只在轮转动作时检查日志文件的时间戳。如果配置了maillast和mail指令,删除的轮转备份会被邮寄。
​
minsize SIZE      #当日志文件的大小超过字节大小时,日志文件将被旋转,但是在另外指定的时间间隔(每日、每周、每月或每年)之前不会旋转。
​
size SIZE         #超过SIZE时轮转,SIZE默认单位是KB,可使用M,G来指定MB和GB。
​
shred             #删除旧文件时使用shred -u()而不是unlink()系统调用。可确保删除日志后,文件不可读(对磁盘伤害大),默认关闭。
​
shredcycles COUNT #调用shred在删除之前覆盖日志文件的次数。如果没有此选项,将使用shred的默认设置。
​
noshred           #删除旧文件时不使用shred。
 
missingok         #如果日志文件不存在,继续处理下一个文件而不产生报错信息。
​
nomissingok       #默认项,如果日志文件不存在,就产生错误。
​
olddir DIRECTORY  #轮转的日志放到DIRECTORY目录中,目录必须与日志文件在同一物理设备上,如果没指定绝对路径,则假定该目录在与日志目录下。
 
noolddir          #日志只在它们的当前目录中轮转。
 
sharedsctipts     #运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本。
​
nosharedscripts   #默认项,为每一个轮转的日志执行prerotate和postrotate。如果脚本错误退出,仅对受影响的日志不执行其余操作。
​
prerotate/endscript     #postrotate和endscript之间的行(它们必须单独出现在行上)在日志文件旋转之前执行(使用/bin/sh)。
​
postrotate/endscript    #postrotate和endscript之间的行(它们必须单独出现在行上)在日志文件旋转之后执行(使用/bin/sh)。
​
firstaction/endscript   #firstaction和endscript之间的行(它们必须单独出现在行上)在所有匹配通配符模式的日志文件被旋转之前,在运行prerotate脚本之前执行一次(使用/bin/sh),并且只有在至少有一个日志被旋转的情况下才执行。
​
lastaction/endscript    #lastaction和endscript之间的行,在轮转了所有匹配的日志后,在postrotate执行之后,并且至少要有一个日志被轮转了的情况下,才会执行一次。
           

实例

#生成多个实时日志文件
shell> while true;do for i in {1,2,3,4};do echo `date` >>/var/log/test-$i.log;done;sleep 1;done &
​
#编写配置文件
shell> vim /etc/logrotate.d/datelog
/var/log/test-[0-9].log {   #通配符匹配日志文件
    daily
    rotate 7
    compress
    missingok
    notifempty
    dateext
    create 0644 root root
    postrotate
        /usr/bin/echo $(date) >>/tmp/test-post.log
    endscript
}
​
#添加执行权限
shell> chmod 644 /etc/logrotate.d/datelog 
​
#验证效果
shell> logrotate  -f /etc/logrotate.d/datelog
shell> ll /var/log/test-*
-rw-r--r-- 1 root root 10019 12月  3 14:53 /var/log/test-1.log
-rw-r--r-- 1 root root   951 12月  3 14:49 /var/log/test-1.log-20191203.gz
-rw-r--r-- 1 root root 10019 12月  3 14:53 /var/log/test-2.log
-rw-r--r-- 1 root root   951 12月  3 14:49 /var/log/test-2.log-20191203.gz
-rw-r--r-- 1 root root 10019 12月  3 14:53 /var/log/test-3.log
-rw-r--r-- 1 root root   951 12月  3 14:49 /var/log/test-3.log-20191203.gz
-rw-r--r-- 1 root root 10019 12月  3 14:53 /var/log/test-4.log
-rw-r--r-- 1 root root   951 12月  3 14:49 /var/log/test-4.log-20191203.gz
           

tune2fs命令

tune2fs命令允许系统管理员调整"ext2/ext3/ext4"文件系统中的可调参数。可以通过tune2fs命令,自行定义文件系统自检周期及方式。

语法

tune2fs [option] device
           

选项

-c <max-mount-counts>: 调整最大挂载次数,超过次数就会强制自检。如果设置为0或-1,那么e2fsck和内核将忽略挂载文件系统的次数;
-C <mount-count>: 设置文件系统已经被挂载的次数,如果设置的值比-c选项设置的值更大,e2fsck将在下一次重新启动时检查文件系统;
-e: 设置内核代码检测到错误时的行为,如下三种;
  continue: 继续执行检测;
  remount-ro: 重新以只读方式挂载文件系统;
  panic: 产生一次系统崩溃(panic);
-f: 强制tune2fs操作即使在出现错误的情况下也要完成;
-i interval-between-checks[d|m|w]: 设置相邻的两次文件系统检查的相隔时间,d解释天,m解释为月,w解释为周。设置为0,将禁用检查文件系统的间隔时间。
-l: 查看文件系统超级块信息;
-L <volume_label>: 设置文件系统卷标;
-m <reserved_blocks_percent>: 设置只能由特权进程分配的文件系统的百分比,默认为5%
-M <last_mounted_dir>: 设置文件系统最后被加载到的目录;
-o [^]mount-option[,...]: 在文件系统中设置或清除指定的默认挂载选项;
-O [^]feature[,...]: 在文件系统中设置或清除指定的文件系统特性,插入字符('^')为前缀的文件系统特性将被清除,不带前缀字符或以加号('+')作为前缀的文件系统特性将被添加到文件系统中;
-r <reserved-blocks-count>: 设置保留的文件系统块的数量;
-T <time-last-checked>: 设置文件系统最后一次被检查的时间,可选的时间说明符,即YYYYMMDD[HH[MM[SS]]],还接受关键字"now",在这种情况下,最后一次检查的时间将设置为当前时间;
-u: 设置可以使用保留的文件系统块的用户。用户可以是数字uid或用户名。如果给定用户名,则在将其存储在超级块之前将其转换为数值uid;
-U <[clear|random|time] UUID>: 设置文件系统的UUID,"clear"清除文件系统UUID,"random"随机生成一个新的UUID,"time"生成一个新的基于时间的UUID;
           

示例

shell> tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   TEST
Last mounted on:          /tmp
Filesystem UUID:          1c9e7490-10df-45ef-9222-19df97b8d071
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              327680
Block count:              2621440
Reserved block count:     131072
Free blocks:              2541684
Free inodes:              327669
First block:              0
Block size:               2048
Fragment size:            2048
Group descriptor size:    64
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Wed Dec  4 17:02:36 2019
Last mount time:          Wed Dec  4 17:33:53 2019
Last write time:          Wed Dec  4 17:33:53 2019
Mount count:              1
Maximum mount count:      -1
Last checked:             Wed Dec  4 17:02:36 2019
Check interval:           0 (<none>)
Lifetime writes:          65 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      44ef40ea-3b82-4c75-88c3-3ce8e50315ab
Journal backup:           inode blocks
​
           

示例说明

  • Filesystem volume name:文件系统标签
  • Last mounted on:上一次文件系统的挂载点路径
  • Filesystem UUID: UUID,可以用来识别文件系统
  • Filesystem magic number:用来识别此文件系统为 Ext2/Ext3/Ext4 的签名,现时必定是 0xEF53
  • Filesystem revision:文件系统修订号, 只可以在格式化时使用 mke2fs -r 设定,现在只支持"1"
    • 0:原始格式,Linux 1.2 或以前只支援此格式
    • 1 (dymanic):V2 格式支援动态 inode 大小
  • Filesystem features:开启的文件系统功能,可以使用命令"tune2fs -O"改变
  • Default mount options:挂载此文件系统默认会使用的选项
  • Filesystem state:可以为 clean,not-clean或 erroneous
  • Errors behavior:文件系统发生问题时的处理方案,可以为 continue,remount-ro,或 panic。可以使用 "tune2fs -e"改变
  • Filesystem OS type:建立文件系统的作业系统,可以为 Linux/Hurd/MASIX/FreeBSD/Lites
  • Inode count:文件系统的总 inode 数目
  • Block count:文件系统的总区块数目
  • Reserved block count:保留给系统管理员工作之用的区块数目
  • Free blocks:未使用区块数目
  • Free inodes:未使用 inode 数目
  • First block:Superblock(超级块)或第一个区块组开始的区块编数。此值在 1 KiB 区块大小的文件系统为 1,大于1 KiB 区块大小的文件系统为 0。(Superblock/第一个区块组一般都在文件系统 0x0400 (1024) 开始)
  • Block size:区块大小,可以为 1024, 2048 或 4096 字节
  • Fragment size:实际上 Ext2/Ext3/Ext4不支持Fragment,所以此值一般和区块大小一样
  • Reserved GDT blocks: 保留作在线 (online) 改变文件系统大小的区块数目。若此值为 0,只可以先卸载才可脱机改变文件系统大小
  • Blocks per group:每个区块组的区块数目
  • Fragments per group:每个区块组的 fragment 数目,亦用来计算每个区块组中 block bitmap 的大小
  • Inodes per group:每个区块组的 inode 数目
  • Inode blocks per group:每个区块组的 inode 区块数目
  • Flex block group size:16
  • Filesystem created:格式化此文件系统的时间
  • Last mount time:上一次挂载此文件系统的时间
  • Last write time:上一次改变此文件系统内容的时间
  • Mount count:距上一次作完整文件系统检查后档案系统被挂载的次数,让 fsck 决定是否应进行另一次完整文件系统检查
  • Maximum mount count:档案系统进行另一次完整检查可以被挂载的次数,若挂载次数 (Mount count大于此值,fsck 会进行另一次完整档案系统检查
  • Last checked:上一次档案系统作完整检查的时间
  • Check interval:档案系统应该进行另一次完整检查的最大时间距
  • Next check after:下一次档案系统应该进行另一次完整检查的时间
  • Reserved blocks uid:0 (user root)
  • Reserved blocks gid:0 (group root)
  • First inode:第一个可以用作存放正常档案属性的 inode 编号,在原格式此值一定为 11, V2 格式亦可以改变此值;
  • Inode size:Inode 大小,传统为 128 字节,新系统会使用 256 字节的 inode 令扩充功能更方便
  • Required extra isize:28
  • Desired extra isize:28
  • Journal inode:8,日志档案的 inode 编号
  • Default directory hash:half_md4,缺省目录 hash 算法。
  • Directory Hash Seed:44ef40ea-3b82-4c75-88c3-3ce8e50315ab,目录 hash 种子
  • Journal backup:inode blocks,日志备份。

实例

#设置强制检查前文件系统可以挂载的次数
shell> tune2fs -c 30 /dev/sdb1
​
#关闭强制检查挂载次数限制
shell> tune2fs -c 0 /dev/sdb1
​
#半年后检查
shell> tune2fs -i 6m /dev/sdb1
​
#禁用时间检查
shell> tune2fs -i 0 /dev/sdb1
​
#调整/dev/sdb1分区的保留空间为10%40000个磁盘块
shell> tune2fs -r 40000 /dev/sdb1
​
#调整/dev/sdb1分区的保留空间为10%
shell> tune2fs -m 10 /dev/sdb1
​
#更改设备UUID
shell> tune2fs -U random /dev/sdb1
           

swapon/swapoff命令

swapon命令用于显示,激活Linux系统中交换空间, swapoff命令用于关闭指定的交换空间(包括交换文件和交换分区)。swapoff实际上为swapon的符号连接。

语法

swapon [options] [specialfile...]
swapoff [-va] [specialfile...]
           

选项

-a: 将/etc/fstab文件中所有标记为"swap"的设备,启动为交换区,但带有"noauto"选项的设备除外。已经作为交换使用的设备将被跳过;
-h: 显示帮助;
-p <priority>: 指定交换设备的优先级。优先级是-1到32767之间的值。更高的数字表示更高的优先级,如果没有定义优先级,则默认为"-1"。或在"/etc/fstab"的选项列加上pri=[value],在"swapon -a"启动他们时,会加上此选项,而且有优先权设定;
-s: 显示交换分区的使用状况;
-U <uuid>: 使用具有指定uuid的分区;
-e: 跳过不存在的设备,也可以使用/etc/fstab挂载选项"nofail"来跳过不存在的设备;
-f: 如果交换空间的页大小不匹配当前运行的内核,则重新初始化(exec mkswap)交换空间;
-L <label>: 使用具有指定标签的分区;
-V: 显示版本信息;
           

实例

#显示指定分区信息
shell> swapon -s -U fbfbf623-3afa-45fa-8966-8455f6dcd65c
Filename                Type        Size    Used    Priority
/dev/sda3                 partition   3145724    0     -2
​
#创建交换分区
shell> dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
shell> mkswap /swapfile1   #使用mkswap命令来设置交换文件
shell> swapon /swapfile1   #启用交换分区
shell> swapon 
NAME       TYPE      SIZE USED PRIO
/dev/sda3  partition   3G   0B   -2
/swapfile1 file      512M   0B   -3
shell> swapoff /swapfile1 #关闭交换空间
           

visudo命令

visudo命令以安全的方式编辑sudoers文件,visudo在编辑后解析sudoers文件,如果出现语法错误,将不会保存更改。在发现错误后,visudo将打印一条消息,说明发生错误的行号。

语法

visudo [-chqsV] [-f sudoers]
           

选项

-c: 检查模式,将检查现有的sudoers文件(及其包含的任何其他文件)是否有语法错误。如果没有指定-f选项,visudo还将检查sudoers文件的所有者和模式。除非指定了-q选项,否则会将一条消息打印到描述sudoers的标准输出中。如果检查成功完成,visudo将以0的值退出;
-f: 指定一个备用sudoers文件位置。使用这个选项,visudo将编辑(或检查)您选择的sudoers文件,而不是默认的/etc/sudoers;
-c: 安静模式,在这种模式下,语法错误的详细信息不会被打印出来。此选项仅在与"-c"选项结合使用时才有用。
-s: 启用对sudoers文件的严格检查。如果一个别名被引用,但实际上没有定义,或者别名中有一个循环,visudo会将此视为一个解析错误。
           

实例

shell> visudo
           

su命令

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

语法

su [options...] [-] [user [args...]]
           

选项

-c,--command=<command>: 已指定的用户执行完指令后,即恢复原来的身份;
--session-command=<command>: 与-c相同,但不创建新会话;
-f,--fast: 适用于csh与tsch,使shell不用去读取启动文件;
-,-l,--login: 改变身份时,也同时变更工作目录到目标用户的主目录,初始化环境变量HOME,SHELL, USER,LOGNAME和PATH;
-m,-p,--preserve-environment: 变更身份时,即不设置HOME, SHELL, USER或LOGNAME;
-s,--shell=<shell>: 运行指定的shell环境而不是默认的;
--help:显示帮助;
--version;显示版本信息。
           

实例

#变更帐号为test并在执行ls指令后退出变回原使用者
shell> su -c 'ls -l' test
           

chpasswd命令

chpasswd命令是批量更新用户口令的工具,是把一个文件内容重新定向添加到

/etc/shadow

中。每行的具体格式为"用户名:新口令",并且不能有空行,用户名必须是系统上已存在的用户。

语法

chpasswd [options]
           

选项

-c,--crypt-method <METHO>: 使用指定的方法加密密码。可用的方法有 DES, MD5, NONE,SHA256 或SHA512,前提是"libc"支持这些方法;
-e,--encrypted: 输入的密码是加密后的密文;
-m: 当提供的密码未被加密时,使用MD5加密代替DES加密;
-s, --sha-rounds ROUNDS: 使用指定次数的轮转来加密密码,值"0"表示让系统为加密方法选择默认的轮转次数(5000)。强制最小1,000,最大 9,9999,9999,您只可以对SHA256或SHA512使用此选项。
           

实例

shell> chpasswd -m < user.txt
​
shell> echo 'test:111111' | chpasswd -m
           

pidof命令

pidof命令用于查找指定名称的进程的进程号id号。

语法

pidof [options] program [program..]
           

选项

-s: 仅返回一个进程号;
-c: 仅显示具有相同根目录的进程;
-x: 显示由脚本名称查找的进程;
-n: 获取基于网络的文件系统(如NFS)上的所有二进制文件的pid,避免pidof命令进行stat系统函数调用;
-o: 指定不显示的进程ID。
           

实例

#根据脚本名称查找进程id
shell> ./test1.sh &
[1] 97377
shell> pidof -x test1.sh 
97377
           

lastb命令

lastb命令用于显示用户错误的登录列表,此指令可以发现系统的登录异常。单独执行lastb命令,它会读取位于

/var/log

目录下,名称为btmp的文件,并把该文件内容记录的登入失败的用户名单,全部显示出来。

语法

lastb [-R] [-num] [ -n num ] [ -f file ] [-adFiowx] [name...]  [tty...]
           

选项

-a: 把从何处登入系统的主机名称或ip地址显示在最后一行;
-d: 将IP地址转换成主机名称;
-F: 显示完整的登录和注销时间和日期。
-f<file>: 告诉last使用特定文件代替"/var/log/wtmp";
-n<num>,-<num>: 设置列出名单的显示列数;
-t <YYYYMMDDHHMMSS>: 显示指定时间之前登陆失败的信息;
-R: 不显示登入系统的主机名称或IP地址;
-x: 显示系统关闭项和运行级别更改;
-w: 在输出中显示完整的用户名和域名;
           

实例

#显示指定时间之前登陆失败的信息
shell> lastb -t 20191201051300
admin    ssh:notty    193.188.22.229   Sun Dec  1 05:04 - 05:04  (00:00)    
admin    ssh:notty    193.188.22.229   Sun Dec  1 05:04 - 05:04  (00:00)  
​
#显示完整的登陆注销时间
shell> lastb -F
admin  ssh:notty 193.188.22.229 Thu Dec 12 14:42:03 2019 - Thu Dec 12 14:42:03 2019  
admin  ssh:notty 193.188.22.229 Thu Dec 12 14:42:00 2019 - Thu Dec 12 14:42:00 2019
           

ipcs命令

ipcs命令用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。

语法

ipcs [resource-option] [output-format]
ipcs [resource-option] -i id
           

选项

-i <id>: 打印由id标识的资源的详细信息;
-h : 显示此帮助并退出;
-V : 输出版本信息并退出;
-a: 显示全部可显示的信息;
-q: 显示活动的消息队列信息;
-m: 显示活动的共享内存信息;
-s: 显示活动的信号量信息;
-t : 输出时间信息。显示所有设备的更改时间,消息队列的发送、接收时间,共享内存的添加、脱离时间,信号量的操作时间。
-p : 显示资源的创建者和最后一个操作符的pid。
-c : 显示创建者和拥有者
-l : 显示资源限制
   --human : 以易读格式显示大小
   -b : 以字节数显示大小
-u : 显示状态摘要
           

实例

shell> ipcs -a 
--------- 消息队列 -----------
键        msqid      拥有者  权限     已用字节数 消息      
​
------------ 共享内存段 --------------
键        shmid      拥有者  权限     字节     nattch     状态      
​
--------- 信号量数组 -----------
键        semid      拥有者  权限     nsems     
​
shell> ipcs -m -l
​
---------- 同享内存限制 ------------
最大段数 = 4096
最大段大小 (千字节) = 18014398509465599
最大总共享内存 (千字节) = 18014398442373116
最小段大小 (字节) = 1
           

setcap命令

setcap命令用于对进程或文件设置capability。在Linux内核中有能力(capability)的概念,Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作。例如:能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的特权操作,而CAP_SETUID表示用户能够修改进程用户身份的特权操作。capabilities与sudo不同,sudo只针对用户/程序/文件的概述,即sudo可以配置某个用户可以执行某个命令,可以更改某个文件。而capability是让某个程序拥有某种能力。

在Capilities中,只有进程和可执行文件才具有能力。每个进程拥有三组能力集,分别称为cap_effective, cap_inheritable, cap_permitted(分别简记为:pE,pI,pP),其中cap_permitted表示进程所拥有的最大能力集;cap_effective表示进程当前可用的能力集;而cap_inheitable则表示进程可以传递给其子进程的能力集。系统根据进程的cap_effective能力集进行访问控制,cap_effective为cap_permitted的子集,进程可以通过取消cap_effective中的某些能力来放弃进程的一些特权。可执行文件也拥有三组能力集,对应于进程的三组能力集,分别称为cap_effective, cap_allowed 和 cap_forced(分别简记为fE,fI,fP),其中,cap_allowed表示程序运行时可从原进程的cap_inheritable中集成的能力集,cap_forced表示运行文件时必须拥有才能完成其服务的能力集;而cap_effective则表示文件开始运行时可以使用的能力。功能的具体项可以参考此链接: http://man7.org/linux/man-pages/man7/capabilities.7.html

语法

setcap [-q] [-v] (capabilities|-|-r) filename [ ... capabilitiesN fileN ]
           

选项

-q: 用于减少程序输出中的冗余。
-v: 在不指定"-v"选项的情况下,setcap将每个指定文件的功能设置为指定的功能。-v选项用于验证指定的功能当前是否已经与文件关联。
"-": 字符串"-"用于从标准输入读取功能。在这种情况下,功能集以空行结束。
-r: 字符串"-r"用于从文件中删除功能集。
           

实例

#非root用户对小于1024端口的提权
shell> nc -l 88
Ncat: bind to :::88: Permission denied. QUITTING. 
shell> su - root
shell> setcap cap_net_bind_service=+ep /usr/bin/ncat
shell> su - test
shell> nc -l 88
           

usermod命令

usermod命令用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user现在没在系统上执行任何程序。

语法

usermod [options] LOGIN
           

选项

-a: 将用户追加到附加组,仅与-G一起使用;
-c <COMMEND>: 修改用户帐号在"/etc/passwd"文件中的备注文字;
-d <HOME_DIR>: 修改用户登入时的目录;
-e <EXPIRE_DATE>: 修改禁用帐号的期限,日期的格式是YYYY-MM-DD。
-f <INACTIVE>: 密码过期之后,账户被彻底禁用之前的天数。0 表示密码过期时,立即禁用账户,-1表示不使用这个功能。
-g <GROUP>: 修改用户的所属组的组名或数字代号,此组必须存在。用户主目录中,属于原来的主组的文件将转交新组所有。主目录之外的文件所属的组必须手动修改。
-G GROUP1[,GROUP2,...[,GROUPN]]: 修改用户所属的附加群组;
-l <NEW_LOGIN>: 修改用户帐号名称,应该手动重命名用户的主目录或邮件池,以反映新的登录名;
-L: 锁定一个用户的账号。
-s <shell>:修改用户登入后所使用的shell;
-u<uid>:修改用户ID;
-U: 解锁一个用户的账号。
-m: 将用户主目录的内容移动到新位置。如果当前主目录不存在,将不会创建新的主目录。此选项仅在与"-d"选项组合时有效。
-o: 与-u选项一起使用时,此选项允许将用户ID更改为非唯一值;
           

实例

#修改用户的附加组
shell> usermod -G group2 user1
​
#修改账号过期时间和密码过期缓冲时间
shell> usermod -f 2 -e '2019-12-20' user1
           

pgrep命令

pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。进程的名称也支持类似grep指令中的匹配模式。

语法

pgrep [options] <pattern>
           

选项

-a: 显示PID和完整的命令行;
-o: 仅显示找到的最小(起始)进程号;
-n: 仅显示找到的最大(结束)进程号;
-v: 仅显示与匹配不符合的进程;
-n: 仅显示与命令名完全匹配(无法使用正则)的进程;
-c: 显示匹配进程的计数;
-l: 显示进程名称;
-P <PPID,..>: 指定父进程号;
-g <PGID,..>: 指定进程组ID;
-G <GID,..>: 匹配组id;
-s <SID,..>: 查看指定session id下的所有进程;
-t: 指定开启进程的终端;
-u <ID,..>: 查找指定用户的进程,可以使用pid或用户名称;
-F <file>: 从文件中匹配PID;
--ns <PID>: 匹配属于同一个进程的进程;
​
           

实例

shell> pgrep -l  ng*x
1781 nginx
1782 nginx
1783 nginx
​
#显示指定用户的进程
shell> pgrep -l  -u nginx
1782 nginx
1783 nginx
​
#显示指定终端的进程
shell> pgrep -a -t pts/2
1652 -bash
11900 ping 192.168.137.1
11906 ping www.baidu.com
           

sync命令

sync命令用于把磁盘缓冲的所有数据写入磁盘,更新超块信息。在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,周期性的写入磁盘,以提高系统的运行效率。而sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有在update或bdflush无法执行或用户需要非正常关机或清空内存时,才需手动执行sync命令。

语法

sync [OPTION]
           

选项

--help: 显示帮助;
--version: 显示版本信息;
           

继续阅读