基础命令

wall                                          # 给其它用户发消息
whereis ls                                    # 搜索程序名,而且只搜索二进制文件
which                                         # 查找命令是否存在,及存放位置
locate                                        # 不是实时查找,查找的结果不精确,但查找速度很快 每天更新 /var/lib/locatedb
clear                                         # 清空整个屏幕
reset                                         # 重新初始化屏幕
cal                                           # 显示月历
echo -n 123456 | md5sum                       # md5加密
mkpasswd                                      # 随机生成密码   -l位数 -C大小 -c小写 -d数字 -s特殊字符
netstat -ntupl | grep port                    # 是否打开了某个端口
ntpdate cn.pool.ntp.org                       # 同步时间, pool.ntp.org: public ntp time server for everyone(http://www.pool.ntp.org/zh/)
tzselect                                      # 选择时区 #+8=(5 9 1 1) # (TZ='Asia/Shanghai'; export TZ)括号内写入 /etc/profile
/sbin/hwclock -w                              # 时间保存到硬件
/etc/shadow                                   # 账户影子文件
LANG=en                                       # 修改语言
vim /etc/sysconfig/i18n                       # 修改编码  LANG="en_US.UTF-8"
export LC_ALL=C                               # 强制字符集
vi /etc/hosts                                 # 查询静态主机名
alias                                         # 别名
watch uptime                                  # 监测命令动态刷新 监视
ipcs -a                                       # 查看Linux系统当前单个共享内存段的最大值
ldconfig                                      # 动态链接库管理命令
ldd `which cmd`                               # 查看命令的依赖库
dist-upgrade                                  # 会改变配置文件,改变旧的依赖关系,改变系统版本
/boot/grub/grub.conf                          # grub启动项配置
ps -mfL <PID>                                 # 查看指定进程启动的线程 线程数受 max user processes 限制
ps uxm |wc -l                                 # 查看当前用户占用的进程数 [包括线程]  max user processes
top -p  PID -H                                # 查看指定PID进程及线程
lsof |wc -l                                   # 查看当前文件句柄数使用数量  open files
lsof |grep /lib                               # 查看加载库文件
sysctl -a                                     # 查看当前所有系统内核参数
sysctl -p                                     # 修改内核参数/etc/sysctl.conf,让/etc/rc.d/rc.sysinit读取生效
strace -p pid                                 # 跟踪系统调用
ps -eo "%p %C  %z  %a"|sort -k3 -n            # 把进程按内存使用大小排序
strace uptime 2>&1|grep open                  # 查看命令打开的相关文件
grep Hugepagesize /proc/meminfo               # 内存分页大小
mkpasswd -l 8  -C 2 -c 2 -d 4 -s 0            # 随机生成指定类型密码
echo 1 > /proc/sys/net/ipv4/tcp_syncookies    # 使TCP SYN Cookie 保护生效  # "SYN Attack"是一种拒绝服务的攻击方式
grep Swap  /proc/25151/smaps |awk '{a+=$2}END{print a}'    # 查询某pid使用的swap大小
redir --lport=33060 --caddr=10.10.10.78 --cport=3306       # 端口映射 yum安装 用supervisor守护

开机启动脚本顺序

/etc/profile
/etc/profile.d/*.sh
~/bash_profile
~/.bashrc
/etc/bashrc

进程管理

ps -eaf               # 查看所有进程
kill -9 PID           # 强制终止某个PID进程
kill -15 PID          # 安全退出 需程序内部处理信号
cmd &                 # 命令后台运行
nohup cmd &           # 后台运行不受shell退出影响
ctrl+z                # 将前台放入后台(暂停)
jobs                  # 查看后台运行程序
bg 2                  # 启动后台暂停进程
fg 2                  # 调回后台进程
pstree                # 进程树
vmstat 1 9            # 每隔一秒报告系统性能信息9次
sar                   # 查看cpu等状态
lsof file             # 显示打开指定文件的所有进程
lsof -i:32768         # 查看端口的进程
renice +1 180         # 把180号进程的优先级加1
exec sh a.sh          # 子进程替换原来程序的pid, 避免supervisor无法强制杀死进程

ps

ps aux |grep -v USER | sort -nk +4 | tail       # 显示消耗内存最多的10个运行中的进程,以内存使用量排序.cpu +3
# USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
%CPU     # 进程的cpu占用率
%MEM     # 进程的内存占用率
VSZ      # 进程虚拟大小,单位K(即总占用内存大小,包括真实内存和虚拟内存)
RSS      # 进程使用的驻留集大小即实际物理内存大小
START    # 进程启动时间和日期
占用的虚拟内存大小 = VSZ - RSS

ps -eo pid,lstart,etime,args         # 查看进程启动时间

top

前五行是系统整体的统计信息。
第一行: 任务队列信息,同 uptime 命令的执行结果。内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行:为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si

第四、五行:为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

进程信息区,各列的含义如下:  # 显示各个进程的详细信息

序号 列名    含义
a   PID      进程id
b   PPID     父进程id
c   RUSER    Real user name
d   UID      进程所有者的用户id
e   USER     进程所有者的用户名
f   GROUP    进程所有者的组名
g   TTY      启动进程的终端名。不是从终端启动的进程则显示为 ?
h   PR       优先级
i   NI       nice值。负值表示高优先级,正值表示低优先级
j   P        最后使用的CPU,仅在多CPU环境下有意义
k   %CPU     上次更新到现在的CPU时间占用百分比
l   TIME     进程使用的CPU时间总计,单位秒
m   TIME+    进程使用的CPU时间总计,单位1/100秒
n   %MEM     进程使用的物理内存百分比
o   VIRT     进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p   SWAP     进程使用的虚拟内存中,被换出的大小,单位kb。
q   RES      进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r   CODE     可执行代码占用的物理内存大小,单位kb
s   DATA     可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t   SHR      共享内存大小,单位kb
u   nFLT     页面错误次数
v   nDRT     最后一次写入到现在,被修改过的页面数。
w   S        进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程 父进程在但并不等待子进程
x   COMMAND  命令名/命令行
y   WCHAN    若该进程在睡眠,则显示睡眠中的系统函数名
z   Flags    任务标志,参考 sched.h

列出正在占用swap的进程

#!/bin/bash
echo -e "PID\t\tSwap\t\tProc_Name"
# 拿出/proc目录下所有以数字为名的目录(进程名是数字才是进程,其他如sys,net等存放的是其他信息)
for pid in `ls -l /proc | grep ^d | awk '{ print $9 }'| grep -v [^0-9]`
do
# 让进程释放swap的方法只有一个:就是重启该进程。或者等其自动释放。放
# 如果进程会自动释放,那么我们就不会写脚本来找他了,找他都是因为他没有自动释放。
# 所以我们要列出占用swap并需要重启的进程,但是init这个进程是系统里所有进程的祖先进程
# 重启init进程意味着重启系统,这是万万不可以的,所以就不必检测他了,以免对系统造成影响。
if [ $pid -eq 1 ];then continue;fi
grep -q "Swap" /proc/$pid/smaps 2>/dev/null
if [ $? -eq 0 ];then
swap=$(grep Swap /proc/$pid/smaps \
| gawk '{ sum+=$2;} END{ print sum }')
proc_name=$(ps aux | grep -w "$pid" | grep -v grep \
| awk '{ for(i=11;i<=NF;i++){ printf("%s ",$i); }}')
if [ $swap -gt 0 ];then
echo -e "${pid}\t${swap}\t${proc_name}"
fi
fi
done | sort -k2 -n | awk -F'\t' '{
pid[NR]=$1;
size[NR]=$2;
name[NR]=$3;
}
END{
for(id=1;id<=length(pid);id++)
{
if(size[id]<1024)
printf("%-10s\t%15sKB\t%s\n",pid[id],size[id],name[id]);
else if(size[id]<1048576)
printf("%-10s\t%15.2fMB\t%s\n",pid[id],size[id]/1024,name[id]);
else
printf("%-10s\t%15.2fGB\t%s\n",pid[id],size[id]/1048576,name[id]);
}
}'

}

linux操作系统提供的信号

kill -l                    # 查看linux提供的信号
trap "echo aaa"  2 3 15    # shell使用 trap 捕捉退出信号

# 发送信号一般有两种原因: