目录
系统管理
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 LOGIN@ 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"响应;
示例
前三行是用来配置crond任务运行的环境变量
-
第一行SHELL变量指定了系统要使用哪个shell,这里是bash
-
第二行PATH变量指定了系统执行命令的路径
-
第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户。如果MAILTO变量的值为空,则表示不发送任务执行信息给用户。
时间的特殊字符
-
星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
-
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,"1,2,5,7,8,9"。
-
中杠(-):可以用整数之间的中杠表示一个整数范围,例如"2-6"表示"2,3,4,5,6"。
-
正斜线(/):可以用正斜线指定时间的间隔频率,例如"*/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: 显示版本信息;