《LinuxShell脚本攻略》,Chap-9:管理重任
简介
GNU/Linux的生态系统是由运行的程序、服务、连接的设备、文件系统、用户等组成。按照我们需要的方式对整个系统有一个微观并对操作系统进行整体上的管理,这就是系统管理的主要目的。
收集进程信息
进程是程序运行实例(runing instance)。
同一程序的多个实例可以同时运行,但他们的进程ID却互不相同。
进程管理相关的重要命令是:
-
top
, display Linux processes; -
ps
, report a snapshot of the current processes; -
pgrep
, look up or signal processes based on name and other attributes.
#ps命令
#-f, 显示更多进程信息
ps -f
#-e,every; -a,all
ps -ef
ps -ax
#-o, 指定想要的列
ps -e -o parameter1,parameter2...
ps -eo comm,pcpu,pmem
#pccpu CPU占用率
#pid 进程ID
#ppid 父进程ID
#pmem 内存使用率
#comm 命令名
#cmd 简单命令
#user 启动进程的用户
#nice 优先级
#time 累积的CPU时间
#etime 进程启动后度过的时间
#tty 所关联的TTY设备
#euid 有效用户ID
#stat 进程状态
#--sort,根据参数对ps输出进行排序
#+升序,-降序
ps -eo comm,pcpu,pmem --sort -pcpu
ps -eo comm,pcpu,pmem --sort -pcpu,+pmem
#-C, 给定命令全名找出PID
ps -C cmd -o comm,pid
#-u, 指定有效用户列表
#-U, 指定真实用户列表
ps -u root -U zhang -o user,pcpu
#-t, 用TTY过滤输出
ps -t TTY1,TTY2...
ps -t pts/0,pts/1 -ef
#-L, 显示进程相关信息
#LWP线程ID, NLWP线程数量
ps -efL
#pgrep命令, 获得一个特定命令的PID列表
#它只需要命令的一部分即可
pgrep cmd
pgre inotif
pgrep bas
#-d, 指定定界符
pgrep rsync -d ":"
#-u, 指定进程的用户
pgrep -u root,zhang rsync
#-c, 返回匹配的进程数量
pgrep -c rsync
#top命令
top
杀死进程以及发送响应信息
在Unix-Like环境中与进程有关的一个重要概念就是信号。
信号是一种进程间通信机制,它用来中断运行的进程以执行某些操作。终止程序也是通过使用信号技术来实现的。
像ctrl+C
,ctrl+Z
这种作业都属于信号。
-
kill
命令可用来向进程发送信号; -
trap
命令用来处理所接收的信号; -
killall
以名字方式来杀死进程.
#列出所有可用信号
kill -l
#-s, 发送信号
#信号名称和信号数都可以
kill -信号数 PID
kill -s SIGNAL PID
#常用信号
#SIGHUP 1 --对控制进程或终端进行挂起检测(hangup detection);
#SIGINT 2 --当按下ctrl+c时发送该信号;
#SIGKILL 9 --强行杀死进程;
#SIGTERM 15 --终止进程;
#SIGTSTP 20 --当按下crtl+z时发送该信号.
#killall, 通过命令名终止进程
killall -s SIGNAL PName
killall -信号数 PName
#trap, 捕捉并响应信号
trap 'signal-handler-func' SIGNAL LIST
which, whereis, file, whatis与平均负载
-
which
hows the full path of (shell) commands。找出某个命令的位置; -
whereis
locate the binary, source, and manual page files for a command。不仅返回命令路径,还能打印命令手册的位置以及命令源代码路径; -
file
determine file type。用来确定文件类型; -
whatis
display manual page descriptions。输出简短描述信息; - 平均负载(load average),是系统运行总负载量的一个重要参数。它指明了系统中可运行进程总量的平均值。平均负载由三个值来指定,第一个指明1分钟内的平均值,第二个指明5分钟内的平均值,第三个指明15分钟内的平均值。
单核CPU,类似于单车道,负载在 0.00-1.00 之间正常;
多核CPU,类似于多车道,负载在 核数*(0.00-1.00) 之间正常;
安全的系统负载,单核应该在 0.7 以下;
#查看平均负载
uptime
cat /proc/loadavg
#0.00 0.01 0.05 1/355 44955
#分母355表示系统进程总数, 分子表示正在运行的进程数, 最后一个数字表示最近运行进程ID
向用户终端发送消息
系统管理员可能需要向网络中所有主机上的所有用户或特定用户的终端发送消息。
wall
命令用来向所有当前登录用户的终端写入消息。
在Linux系统中,终端是作为设备存在的。因此那些打开的终端在dev/pts/
中都会与对应的设备节点文件。向特定设备写入数据将会在对应的终端显示出消息。
echo "It's just a test" | wall
#查看用户对应的/dev/pts/,并向某一个用户终端发送消息
ll /dev/pts | awk '{print $3,$6}'
echo"Haha" > /dev/pts/[1,2,3...]
收集系统信息
包括主机名、内核版本、Linux发行版本、CPU信息、内存信息、磁盘分区信息等。
#主机名
hostname
uname -n
#内核版本,架构
uname -r
uname -m
uname -a
#Linux发行版本
cat /etc/redhat-release
#CPU相关信息
lscpu
cat /proc/cpuinfo
cat /proc/cpuinfo | grep 'model name'
#内存详细信息
free -h
cat /proc/meminfo
#分区信息
cat /proc/partitions
fdisk -l
#系统详细信息
lshw
用/proc收集信息
在GNU/Linux操作系统中,/proc是一个位于内存中的伪文件系统(in-memory pseudo filesystem)。
它的引用是为了提供一个可以从用户空间(user space)读取系统参数的接口。
可以对/proc
中的文件和子目录进行cat
来获取信息,所有内容都是易读的格式化文本。
/proc/下的数字目录,包含了对应进程的相关信息;
/proc/environ,包含于进程相关联的环境变量;
/proc/cwd,是一个到进程工作目录的符号链接;
/proc/fbcat,包含了由进程所使用的文件描述符。
用cron进行调度
GNU/Linux系统包含了各种用于调度任务的工具。cron就是其中之一,它通过守护进程crond使得任务能够以固定的时间间隔在系统后台自动运行。
cron利用的是一个被称为“cron表(cron table)”的文件,这个文件中存储了需要执行的脚本或命令的调度列表以及执行时间。
crontab -e
#* * * * * cmd
#分钟(0-59)
#小时(0-23)
#天(1-31)
#月(1-12)
#工作日(0-7),0和7都代表周天
#命令
#*号,所有值
#,号,范围。1,3,5,7,9
#-号,连续范文。1-10
#/号,*/10;0-8/20
#栗子
* 0-6 * * * /home/zhang/test.sh
1,3,5,7,9 * * * * /home/zhang/test.sh
*/5 * * * * /home/zhang/test.sh
#-l,查看cron表
cron -l
#-r,移除cron表
cron -r
用户管理常用命令
#添加用户
userall
#删除用户
userdel
--remove-all-file删除与用户相关的所有文件
#修改shell
chsh
#修改用户属性
usermod
#修改密码过期时间
chage
#修改密码
passwd
#登录到一个新组
newgrp
#添加、删除组
groupadd
groupdel
#指纹
finger