更多的bash shell命令——第四章

小节目录:

  • 管理进程
  • 获取磁盘统计信息
  • 挂载新磁盘
  • 排序数据
  • 归档数据

管理进程

运行在系统的程序称之为进程(process),用ps 命令来进行监测。

默认ps命令不会提供那么多信息 ps:

[root@localhost ~]# ps
  PID TTY          TIME CMD
14036 pts/0    00:00:00 bash
14066 pts/0    00:00:00 ps

PID 进程 ID (Process ID),TTY 运行在哪隔终端,TIME 进程已用的CPU时间

ps命令支持三种不同类型的命令行参数:Unix,BSD,GNU

ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名称>][-g <群组名称>]
[-G <群组识别码>][-p <进程识别码>][p <进程识别码>][-s <阶段作业>]
[-t <终端机编号>][t <终端机编号>][-u <用户识别码>][-U <用户识别码>]
[U <用户名称>][-<进程识别码>][--cols <每列字符数>]
[--columns <每列字符数>][--cumulative][--deselect][--forest]
[--headers][--help][-- info][--lines <显示列数>][--no-headers]
[--group <群组名称>][-Group <群组识别码>][--pid <进程识别码>]
[--rows <显示列数>][--sid <阶段作业>][--tty <终端机编号>]
[--user <用户名称>][--User <用户识别码>][--version]
[--width <每列字符数>]

参数说明:

  -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登陆格式显示进程状况。
   -y 配合参数"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位
  -<进程识别码>  此参数的效果和指定"p"参数相同。
  --cols<每列字符数>  设置每列的最大字符数。
  --columns<每列字符数>  此参数的效果和指定"--cols"参数相同。
  --cumulative  此参数的效果和指定"S"参数相同。
  --deselect  此参数的效果和指定"-N"参数相同。
  --forest  此参数的效果和指定"f"参数相同。
  --headers  重复显示标题列。
  --help  在线帮助。
  --info  显示排错信息。
  --lines<显示列数> 设置显示画面的列数。
  --no-headers  此参数的效果和指定"h"参数相同,只在列表格式方面稍有差异。
  --group<群组名称>  此参数的效果和指定"-G"参数相同。
  --Group<群组识别码>  此参数的效果和指定"-G"参数相同。
  --pid<进程识别码>  此参数的效果和指定"-p"参数相同。
  --rows<显示列数>  此参数的效果和指定"--lines"参数相同。
  --sid<阶段作业>  此参数的效果和指定"-s"参数相同。
  --tty<终端机编号>  此参数的效果和指定"-t"参数相同。
  --user<用户名称>  此参数的效果和指定"-U"参数相同。
  --User<用户识别码>  此参数的效果和指定"-U"参数相同。
  --version  此参数的效果和指定"-V"参数相同。
  --widty<每列字符数>  此参数的效果和指定"-cols"参数相同。 
 
常用命令:
ps -ef
ps aux
   ps aux输出格式
   USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 
USER: 进程拥有者
PID:pid
%CPU:占用的cpu使用率
VSZ:占用的内存使用率
RSS:占用的虚拟内存大小
TTY:是否为登入者执行的程序,若为tty1-tty6,为本机登入者,若为pts/??,则为远程登入者。
STAT:程序的状态,R:正在执行中,S:睡眠,T:正在检测或者停止,Z:死亡程序
START:程序开始时间
TIME:程序运行的时间
COMMAND:所执行的指令。
[root@localhost ~]# ps -ef 
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Sep23 ?        00:00:01 /sbin/init
root         2     0  0 Sep23 ?        00:00:00 [kthreadd]
root         3     2  0 Sep23 ?        00:00:00 [migration/0]
root         4     2  0 Sep23 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 Sep23 ?        00:00:00 [stopper/0]
root         6     2  0 Sep23 ?        00:00:00 [watchdog/0]
root         7     2  0 Sep23 ?        00:01:25 [events/0]
root         8     2  0 Sep23 ?        00:00:00 [events/0]
root         9     2  0 Sep23 ?        00:00:00 [events_long/0]
root        10     2  0 Sep23 ?        00:00:00 [events_power_ef]

这个例子用了两个参数: -e 参数指定显示所有运行在系统上的进程, -f 参数则扩展了输出,扩展包括这些列:

UID :启动这些进程的用户
PID :进程的ID
PPID :父进程的进程号(如果该该进程是由另一个进程启动的)
C : 进程生命周期中CPU的利用率
STIME :进程启动时的系统时间
TTY :进程启动时的终端设备
TIME :运行进程需要的累积CPU时间
CMD :启动程序的名称

如果想要获更多信息,可采用-l 参数它会产生一个长格式输出。

[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 14036 14032  0  80   0 - 27122 wait   pts/0    00:00:00 bash
4 R     0 14115 14036  0  80   0 - 27034 -      pts/0    00:00:00 ps
F : 内核分配给进程的系统标记
S:进程状态(O代表正在运行,S代表正在休眠,R代表可运行,正在等待运行 Z代表僵化,进程已结束但父进程已不存在,T代表停止);
PRI : 进程优先级,越大的数字代表越低的优先级
NI : 谦让值 用来参与决定优先级
ADDR : 进程的内存地址
SZ : 假如进程被换出,所需交换空间的大致大小
WCHAN : 进程休眠的内核函数的地址

实时监测进程:

ps命令虽然在手机在系统上运行进程信息时非常有用,但也有不足之处:它只能显示特定时间点的信息。如果想观察那些频繁换进换出的内存的进程时,ps就不那么方便了。

top命令适合这种场景:top命令与ps相似,能够显示进程信息,但是它是实时显示的。

[root@localhost ~]# top
top - 00:58:06 up 1 day,6:29,1 user,load average: 0.00,0.01,0.05
Tasks: 148 total,1 running,147 sleeping,0 stopped,0 zombie
Cpu(s):  0.0%us,0.3%sy,0.0%ni,99.7%id,0.0%wa,0.0%hi,0.0%si,0.0%st
Mem:    881004k total,816212k used,64792k free,151564k buffers
Swap:  2621436k total,0k used,2621436k free,385520k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                      
14259 root      20   0 15032 1260  936 R  0.7  0.1   0:00.18 top                                                                                                           
    7 root      20   0     0    0    0 S  0.3  0.0   1:30.31 events/0                                                                                                      
    1 root      20   0 19364 1544 1228 S  0.0  0.2   0:01.77 init                                                                                                          
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd

输出的第一部分显示的是系统概况:

第一行显示了 当前时间,系统的运行时间,登录的用户数及系统的平均负载。平局负载有三个值:最近1分钟、5分钟 和15分钟的平均负载。值越大说明负载越高。由于进程短期内的突发性活动,出现最近1分钟的高负载值也很常见。但是如果15分钟平均负载都很高,说明系统可能有问题了。

Linux管理系统定义什么程度算是高负载,这个值取决于系统硬件配置及系统上通常运行的程序。对某个系统来说是高负载的值可能对另一系统来说是正常值,通常一个系统负载超过了2,就说明系统比较繁忙了。

第二行显示了进程概要信息——top命令的输出中将进程叫做任务(Task): 有多少金城处于运行、休眠、停止或者是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。

下一行显示了CPU概要信息:

后两行显示了系统内存状态:

最后一部分显示了当前运行中进程的详细列表,跟ps 输出类似:

PID :进程ID
USER:进程属主的名字
PR:进程优先级
NI: 进程谦让度
VIRT: 进程占用的虚拟机内存总量
RES: 进程占用的物理内存总量
SHR : 进程和其他进程共享的内存总量
S : 进程的状态(D代表可中断的休眠状态,R 代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态).
%CPU : 进程使用的CPU时间比例
%MEM: 进程使用的内存占可用内存的比例
TIME+:进程启动到目前为止的CPU时间总量
COMMAND:进程所对应的命令行名称,也就是启动的程序名。

默认top 会按%CPU值对进程进行排序。可以在top运行时使用多种交互命令重新排序。每个交互命令都是单字符的,top命令运行时 键入可改变top的行为。键入f 允许你选择对输出进行排序的字段,键入d 允许你修改轮询间隔,键入q 可以退出top。用户在top命令上有很大的控制权,这个工具经常能找出占用系统最大资源的罪魁祸首。

杀死进程:
kill pid
kill -9 pid
killall process*

检测磁盘空间:

mount / umount 挂在存储媒体

使用df命令:disk free

有时你需要知道在某个设备上还有多少磁盘空间。df命令可以让你很方便的查看所有已挂载磁盘的使用情况。

[root@node1 ~]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      12367016 6069160   5662976  52% /
tmpfs                   653492      76    653416   1% /dev/shm
/dev/sda1               487652   40916    421136   9% /boot

df命令会显示每个有数据的已挂载文件系统,有些已挂载设备仅限系统内部使用。命令输出如下:

设备的设备文件位置;
能容纳多少个1024字节大小的块
已用了多少个1024字节大小的块
还有多少个1024字节大小的块可用
已用空间所占的比例
设备挂载到哪个挂载点上

df -h 命令,它会把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节

[root@node1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       12G  5.8G  5.5G  52% /
tmpfs                 639M   76K  639M   1% /dev/shm
/dev/sda1             477M   40M  412M   9% /boot

使用du命令:disk usage

使用df命令很容易发现某个磁盘的存储空间快没了。系统管理员面临的下一个问题是,发生了这种情况怎么办。另一个游泳的命令是du命令。du命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可以判断系统上某个目录爱是不是有超大文件。

默认情况下,du命令会显示当前目录下所有文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空间。对标准大小的目录来说,这个输出会是一个比较长的列表。下面是du命令的部分输出

[root@node1 ~]# du
4	./.config/gnome-disk-utility/ata-smart-ignore
8	./.config/gnome-disk-utility
4	./.config/gnome-session/saved-session
8	./.config/gnome-session
4	./.config/ibus/bus
8	./.config/ibus
36	./.config
4	./Desktop
0	./.gvfs
40	./.local/share/gvfs-metadata
24	./.local/share/applications
68	./.local/share
72	./.local
4	./Pictures
8	./.oracle_jre_usage
20	./.cache
4	./Documents

左边数值代表每个文件或目录占用的磁盘块数,注意:这个列表是从目录层级的最底部开始,然后按照文件、子目录、目录逐级向上。

du命令不加参数作用并不大,我们更想知道每个文件和目录占用了多大的磁盘空间,但如果还得逐页查找的话就没什么意义了。

下面是能让du 命令用起来更方便的几个命令行参数。

-c :显示所有已列出文件总大小
-h :按照用户易读的格式输出大小, K代表千字节 , M代表兆字节 , G 代表吉字节
-s : 显示每个输出参数的总计。

处理数据文件:

排序数据:sort命令

sort命令按照会话指定的默认语言的排序规则对文本文件中的数据进行排序

========================================================

放假先回家了,剩下的到家整理O(∩_∩)O~

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER