shell编程--1

1、ps
ps -eo comm,pcpu|head
其中comm表示command,pcpu表示cpu占用率
-o可以用来指定想要显示的列。选项-o可以使用不同的参数,如下所示:
pcpu:cpu占用率
pmem:内存使用率
comm:可执行文件名
cmd:简单命令
user:启动进程的用户
nice:优先级
time:累计的cpu时间
etime:进程启动后流逝的时间
tty:所关联的tty设备
euid:有效用户id
stat:进程状态
pid:进程id
ppid:父进程id

可以用–sort将ps命令的输出根据特定的列进行排序
列出占用cpu最多的10个进程:
ps -eo comm,pcpu –sort -pcpu|head 10

找出给定命令名所对应的进程id:假设某个命令有多个实例正在运行,我们可能需要识别这些进程的pid
ps -C command_name
ps -C command_name -o pid=
说明:-o指定输出特定pid列,在pid后面加上=,可以去掉pid那一列的列名
举例:
ps -C bash -o pid=

2、pgrep
除了使用ps -C,还可以用pgrep,获得特定命令的进程id列表:
$ pgrep bash
1255
1680
pgrep还可以指定定界符:(默认使用换行符作为定界符)
$ pgrep bash -d “:”
1255:1680

可以用选项-L在ps的输出中显示线程的相关信息。NLWP是进程的线程数量
查看线程数最多的10个进程:
ps -eLf –sort -nlwp | head

3、which、whereis、file、uptime
1)which:找出某个命令的位置
2)whereis:与which类似,但它不仅返回命令的路径,还能够打印出其对应的命令手册的位置以及命令源代码的路径
3)file:确定文件的类型
4)uptime:查看平均负载。平均负载由三个值来指定,第一个值指明了1分钟内的平均值,第二个值指明了5分钟内的平均值,第三个值指明了15分钟内的平均值

3、信号
定义:信号是linux中一种进程间通信机制
kill -l:列出所有可用的信号
kill pid:终止进程。kill命令默认发出一个TERM信号
kill -s SIGNAL pid:通过kill命令向进程发送指定的信号(参数SIGNAL可以是信号名称,也可以是信号编号)

尽管有很多信号可用于,但是常用的其实就那么几个:
SIGHUP 1:挂起
SIGINT 2:当按下ctrl-c时发送该信号
SIGKILL 9:用于强行杀死进程
SIGTERM 15:用于终止进程
SIGTSTP 20:当按下ctrl-z时发送该信号
所以,我们要强行杀死进程,可以使用:
$ kill -s SIGKILL PROCESS_ID
或者:
$ kill -9 PROCESS_ID

kill命令以进程id作为参数,killall命令可以通过进程名终止进程:
killall process_name
1)通过名称向进程发送信号:
killall -s SIGNAL process_name
2)通过名称以及所属用户名指定进程:
killall -u USERNAME process_name
3)在杀死进程前进行确认,可以使用killall的-i选项

pkill命令和kill命令类似,不过默认情况下pkill接受的是进程名,而非进程ID

trap:
kill命令用来向进程发送信号,而trap是用来捕捉并响应信号
一旦使用trap将某个函数分配给一个信号,那么当脚本运行收到该信号
时,其对应的函数就会开始执行
语法格式:
trap function_name SIGNAL
例子:
trap ‘handler’ SIGINT
说明:handler是信号SIGINT的信号处理程序的名称。如果按Ctrl-C,就会执行’handler’函数

$$是一个特殊变量,它可以返回当前脚本的进程id

4、采集系统信息
1)打印当前系统的主机名:
hostname或者uname -n

2)打印linux内核版本、硬件架构等详细信息
uname -a

3)打印linux内核发行版本
uname -r

4)打印主机类型
uname -m

5)打印cpu相关信息
cat /proc/cpuinfo

6)获取处理器名称
cat /proc/cpuinfo | sed -n 5p

7)打印内存的详细信息
cat /proc/meminfo

8)打印系统可用内存总量
cat /proc/meminfo |head -1

9)查看系统的分区信息
cat /proc/partitions
或者
fdisk -l

备注:
/proc是一个在内存中的伪文件系统,提供了一个可以从用户空间读取系统参数的接口。系统中每一个运行的进程在/proc中都有一个对应的目录,目录名和进程id相同。
比如某进程id是9527,那么就会有一个对应的目录/proc/9527。对应的目录中包含了大量有关进程的信息,比方说
exviron:包含与进程相关的环境变量
exe:是一个到当前进程所对应的可执行文件的符号链接(可以用readlink查看)
readlink /proc/9527/exe

5、定时任务
除了使用crontab -e编辑,还有另外两种方法可供使用:
1)创建文本文件(例如task.cron),写入定时任务,通过crontab task.cron来运行crontab
2)无需单独创建文本文件,例如:
crontab <<EOF
02 /home/slynux/script.sh
EOF

可以使用选项-u来查看其它用户的cron表:
crontab -l -u slynux
说明:使用选项-u时,你必须作为root用户以获得最高的权限

可以使用选项-r来删除当前用户的cron表:
crontab -r

要删除其它用户的cron表,可以使用:
crontab -u slynux -r

6、用户管理相关命令
1)useradd:添加用户
语法格式:
useradd USER -p PASSWORD
使用-m可以用来创建home目录

2)deluser:删除用户
语法格式:
deluser USER
使用–remove-all-files用来删除与用户相关的所有文件,包括home目录

3)chsh:修改用户默认shell
语法格式:
chsh USER -s SHELL

4)usermod:用来处理和用户账户相关的若干属性信息
usermod -L 锁定账户
usermod -U 解锁账户

5)change:用来处理用户账户的过期信息
chage -l:查看账户过期信息
chage -E DATE:设置过期时间
chage -m:设置两次改变密码之间相距的最小天数
chage -M:设置两次改变密码之间相距的最大天数
chage -W:设置在前几天提醒需要更改密码

6)addgroup:为系统添加一个新的用户组
用法格式:
addgroup GROUP
将已有的用户添加到一个组:
addgroup USER GROUP

7)delgroup:删除一个用户组
语法格式:
delgroup GROUP

8)finger:显示用户信息
figer USER:用户信息包括用户的home目录、上一次登录的时间、默认shell等

7、shift
使用场景:
shift命令每执行一次,就将命令行参数向左移动一个位置,这样我们就不需要使用变量$1、$2、$3等,而只用一个$1就可以对命令参数逐个访问了

8、截图工具
可以使用ImageMagick中的import工具进行截图
取整个屏幕:
import -window root screenshot.png

9、screen
作用:获得多个shell
用法:
1)创建新的screen窗口:
从shell中运行screen来创建一个新的screen。也可以使用Ctrl+A+C(区分大小写)
2)在窗口之间切换:
可以使用Ctrl+A和Ctrl+N切换到下一个窗口,使用Ctrl+A和Ctrl+P切换到前一个窗口
3)脱离会话:
使用Ctrl+A和Ctrl+D脱离当前screen会话
4)关联会话:
screen –r –d
该命令告诉screen关联到上一个screen会话。如果已脱离的会话不止一个,screen会打印出会话列表,这时候就可以使用screen –r –d PID 关联相关会话