shell常用命令归类整理

时间:2023-03-08 19:53:07
shell常用命令归类整理
shell 命令整理
bash shell 含有许多功能,因此有许多可用的命令;本文档仅罗列了一些常用命令及其使用频率较高的参数.
#本文档仅罗列了一些常用命令及其使用频率较高的参数.
#version 3.0  2017.1.1
#Author woodman

一、bash内建命令

命令

描述

Alias

为指定命令定义一个别名

Cd

切换的指定目录

Declare

声明一个变量或变量类型

Echo

将指定字符串输出到STDOUT

Exit

强制shell以指定的退出状态码退出

Export

设置指定变量使其对子shell进程可用

Fc

从历史记录中选择一列命令,默认为最后一条。

Help

显示帮助文件

history

显示命令历史记录

Jobs

列出活动的作业

Kill

向指定的进程ID(PID)发送一个系统信号

Let

计算一个数学表达式中的每个参数

Local

在函数中创建一个局部变量

Logout

退出shell登录

Printf

使用格式化字符串显示文本

Pwd

显示当前目录

Read

从STDIN读取一行数据并将其赋值给一个变量

Readonly

同上,但变量值不可变更

Set

设置并显示环境变量的值和shell特性

Shift

默认一次移动一个命令行参数

Trap

捕获系统信号

Type

获取命令的类型

Ulimit

给指定的系统资源设定一个上限

Umask

为新建的文件设置默认权限

Unalias

删除指定别名

Unset

删除指定的环境变量

 

二 文件管理

包含:cat,more,less,nl,tee,chattr,chgrp,chmod,chown,cksum,md5sum,diff,cut,
split,paste,file,type,touch,mktemp,find,locate,whereis,ln,mv,rm,echo,read,od
2.1 #cat
-n     每行加上序号,等效“nl filename”
-s     连续多个空行压缩为一个空行
-T     用"^I"替换制表符
#cat sb.txt
sb..cn
ss..cn
ioo
qo

#more

#显示到最后一行自动退出,"q"退出
#"d"后滚半屏,"spacebar"下一屏,"b"前一屏,"enter"下一行,
#"="显示当前最后一行行号;
#"v"启动vi编辑器,"/expression"查找匹配表达式的内容,
#"n"下一处,"!cmd"执行shell命令
#less
#显示到最后一行不退出,more的加强版。
#读取大文件时不读取整个文件,优于"cat"和"more"。
#支持more的命令且增加"u"前滚半屏
2.2 #nl  默认nl=“nl -b t”
-b a 空行显示行号
-n (ln,rn,rz)左对齐、右对齐、补零
-w  行号的位数
# nl -b a -n rz -w  sb.txt
001sb..cn
002ss..cn
003aioo 005qo

2.3 #tee

#显示输出+重定向,默认为覆盖方式
-a  追加方式 
2.4 #chattr [+-=] [ASacdistu]设置隐藏属性
A 不改变atime
S 同步写入
a 只能增加数据,不能删除也不能修改
i   不能被删除、修改、改名、写入数据等,可以创建软链接。
s 连同数据块一起删除,
u 与s相反
2.5 #chgrp 变更属组
chgrp group filename
2.6 #chmod 改变文件属性
chmod 666 filename  可加 [u g o a] [-+=] [rwxXstugo]
chmod -R 666 /var/share 递归改变文件及其子目录
chmod g+s filename 
2.7 #chown 
chown -R user:group /var/share 递归变更目录下的所有文件的属主属组。
2.8 #cksum 计算文件的校检和
2.9 #md5sum 计算和校检文件
md5sum file > file.md5
md5sum -c file.md5 #FAILED则表示被修改过
2.10 #cp  默认 alias "cp"="cp -i"
cp sou des
-a  归档,保留现有属性,常用于备份
-p  保留文件属性(UID GID 时间戳)
-f  强制覆盖不提示 ,"-i"正好相反
-l  创建链接而非复制,等效"ln"。"-s"为创建符号链接,二者的区别:前者是条真实的路而后者只是个路标。
-r  递归复制文件,(在ls chmod chown rm等中的意义相同)
-u  仅在原文件比目标文件新的情况下复制。即,更新。
 2.11 #cut 
-d 设置分隔符
-f  第几段
-c 字符区间
2.12
#diff 以行为基准对比
#cmp 以字节为单位对比
2.13 
#paste 合并两文档
#split 拆分文档
-b 大小
-l 行数
2.14 
#file 查看文件类型,分成三类:文本、可执行、数据
file filename 
#type 用于查看命令类型
type commond 
-p  查看外部命令的路径
-P  查看内部命令的路径
2.15
#touch 改变文件的时间戳,但经常被用来创建空白文件
-c  什么也没有发生
-d  修改访问时间和修改时间,
touch -d "yyyy-mm-dd hh:mm:ss"  filename
touch -d '2 days ago' filename
#支持昨天(yesterday) 明天(tomorrow)

-md  仅变更修改时间

-ad  仅变更访问时间
-t   同时修改amc时间
touch -t mdyHM filename
2.16 #mktemp 建立文件,不带参数时Centos6默认是/tmp/tmp.XXXXXXXXXX
mktemp test.XXX     最少3个,./test.XXX的"XXX"自动被替换成随即数
mktemp -t test.XXX  强制将文件创建在系统临时目录下,默认输出绝对路径
mktemp -d test.XXX  创建目录
2.17 #find
#find  查找
-a:    与条件 
-o:    或条件 
-not:   非条件 
-name   匹配文件名,支持"*"和"?"
-atime n    搜索在n天前读取过的文件
-ctime n      搜索在n天前修改过
-group UID     搜索属组为UID的文件
-nogroup      搜索属组为无效组(通常用"ll"显示为数字)的文件
-size  +nk    搜索大于nk的文件
-type 搜索类型[f|d|c|b]等
-mtime n  [ "1":一天前的24小时内有变动 ; "+4" 4天之前 ; "-2" 两天内 ]
-perm (n表示完全匹配,"-n"包含n则匹配,"+n"在n中则匹配)
find ./ -type f \( -nouser -o -nogroup \) 
#查找无效属主或者属组的文件
find ./  -type f -exec grep -l key {} \; >> /mnt/find
#遍历当前路径下的所有文件查找内容中含"key"的行添加到/mnt/find中
#locate   通过系统数据库查找文件,约等于"find -name"
updatedb 更新系统数据库(/var/lib/localedb)
#whereis
-b 只找binary格式的文件
-m 只找说明文件manual路径下的档案,/var/share/man
#which 查找文件绝对路径
2.18 #ln  建立文件之间的连接
ln  source  dist
-f  创建连接是遇同名文档之间覆盖
-i  删除连接文档
-s  建立软链接(可夸分区)
-b  将在链结时会被覆写或删除的档案进行备份,默认"filename~"。
2.19 
#mv 移动文件或变更名称。
mv sou des
#rm 删除文件,默认 "rm"="rm -i"
rm -f  强制删除
rm -r  递归删除,常用于删除目录,经典命令 "rm -rf /*"*。
2.20
#echo 
-e 支持特殊符号  
-n 去掉末尾换行符
#read -p 直接跟提示符,不指定变量则保持在$REPLY
#od 查看数据库文件
2.21
#getfacl 查看文件访问控制列表
-c   省略头部信息
-p  不去除路径最前面的'/'符号
-R  递归显示
#setfacl  设定文件访问控制列表
-m  修改
-b   清除所有添加的acl
-x   根据条件删除匹配的acl
如:清除super用户相关的acl
setfacl -x u:super /home/part
#设置管理用户super可进入用户part的家目录
 #查看默认权限
[super@node01 ~]$ getfacl /home/part
getfacl: Removing leading '/' from absolute path names
# file: home/part
# owner: part
# group: part
user::rwx
group::---
other::---
#添加facl
[super@node01 ~]$ sudo setfacl -m u:super:rwx /home/part
[sudo] password for super:
[super@node01 ~]$ getfacl /home/part
getfacl: Removing leading '/' from absolute path names
# file: home/part
# owner: part
# group: part
user::rwx
user:super:rwx #已加入
group::---
mask::rwx
other::---
#开锁成功
[super@node01 ~]$ cd /home/part
[super@node01 part]$

三 文件编辑

包含:fmt,join,grep,sed,sort,uniq,awk,wc,scp
3.1 #fmt 重新格式化每行输出
-p <列起始字符串> 仅合并含有指定字符串的列。
-u每个字符之间都以一个空格字符间隔,每个句子之间则两个空格字符分隔。
-w 设置每列最大字符数(默认为75)
3.2 #join 
#以默认方式比较两文件,将指定字段的内容相同的连接起来,输入标准输出。
-i 忽略大小写
-t 设置分隔符
-1 n  连接文件1指定的域
3.3 #grep 查找
-q    不显示结果,返回状态信息,匹配返回“0” 。 
-v    排除匹配到的行,即显示没匹配到的行。
-n    结果前加上所在行行号
-c    显示多少行匹配
-l    搜索哪些文件包含 关键字
-i    忽略大小写
-e    多匹配模式
-E   支持扩展的正则表达式,相当于egrep 
-o    匹配关键字且仅显示字符串而不是行
-A   还显示模式下面的一行
-B   还显示模式上面的一行
-C   前后各显示一行
3.4 #sed 
"-n"仅显示匹配;
"p"打印sed输出的一行;
"-i" 修改源文件;
"g"全局处理;
sed -n 's/old/new/gp' file #替换所有匹配的行并显示
sed -n '2s/old/new/p' file #在第2行中匹配且显示替换后的结果
sed -n '/last/{ #仅显示匹配
> p#显示匹配的行
> s/last/end/p #替换并显示
> }' date1

"!"排除命令,下列相当于 grep -v ;

跳转命令"b"基于地址、地址区间排除
# sed -n '/first/!p' date
This is the header line.
This is the second line.
The End. sed 's@/bin/bash@/bin/csh@g' /etc/passwd
#用特殊符号@替代"/"作为分割符,则不需要用"\"来转义

"d"删除行;"i"前插一行;"a"后增一行;

sed '2,3d' file  #删除文件的第2行和第3行
sed '2,$/key/d' file #从第二行开始匹配,若成功则删除
sed '/1/,/3/d' file  #匹配到含"1"的行开启删除模式,匹配到含"3"的行则删除该行且关闭删除功能.(慎用)
"r":将指定文件的内容追加到文件;
"y":替换字符,默认是全局替换
"c":替换行
# sed '2,3c this is line 2 and 3' date1
line
this is line and
line

"="打印行号;"l"可显示不可打印的特殊字符,如行尾的"$";

# sed -n '/first line/{=;l}' date 
2
This is the first line.$
符号"&" ,类似"()"符号
# echo "My cat sleeps in his hat" | sed 's/.at/"&"/g'
My "cat" sleeps in his "hat"
"n":移动到数据流的下一行;
# sed -n '/first line/{n;p}' date 
This is the second line.
"N":将下一行并入当作同一行处理
# sed -n 'N;s/System.Administrator/Desktop User/p' date2
The first meeting of the linux Desktop User is group will be held on Tuesday.
#若文件总行数为奇数且匹配项在最后一行命中,因没有下一行,"N"会向sed编辑器发出停止指令
# sed -n '$!N;s/System.Administrator/Desktop User/p' date2
The first meeting of the linux Desktop User is group will be held on Tuesday.
Desktop User is in the end
  "D"删除到换行符后停止;"P"打印多行模式空间中的第一行。通常"D"和"P"配合"N"适用。
  sed有两个缓存区域:模式空间和保持空间;运行时的数据都在模式空间。
  "h"模式空间复制到保持空间;"H"附加;"g"保持空间复制到模式空间;"G"附加;"x"交换两个缓存区域的内容。
# sed '/^$/d;$!G' date  #插入空白行,确保空行和尾行不增加。
# sed -n '{1!G;h;$p}' date  #简单点"tac date"实现文件反序输出行
The End.
This is the second line.
This is the first line.
This is the header line.
执行详解
1:读取第一行时保持空间为空,所以不附加否则最后会显示空行。将第一行复制到保持空间。
2:读取第二行到模式空间,将保持空间中的第一行附加到第二行后,然后覆盖保持空间。
3:重复2的步骤,直到最后一行,然后触发"$p"打印最后一行。
#小技巧
sed 's/<[^>]*>//g;/^$/d' 删除HTML标签
/./,$!d 删除数据开始前的空行
sed '{
:start
/^\n*$/{$d;N;b start}
}' filename 删除未行的空白

3.5 #sort 排序

   -n  按数字大小排序,将数字识别为数字而不是字符
   -r  反序
   -M  按月排序,可识别3字符的月份,如:May
   -b  忽略起始的空白
   -C  不排序不报告,"c"不排序但是检查数据是否排序,未排序则报告
   -f  默认将大小字母排前,忽略大小写
   -g  按通用数值来排序
   -i  排序时忽略不可打印的字符
   -m  将两个已排序数据合并
   -o  将结果出入指定文件,等效"--output=file"
   -R  按随即生成的哈希表的健值排序
   -k  默认以第一列作为排序依据
   -t  指定一个用来区分健位置的字符
cat /etc/passwd | sort -t ":" -k 3
3.6 #uniq
  -c 显示重复序号
  -d 仅显示重复的行
  -u 仅显示未重复的行
3.7 #awk   一般默认是GNU的awk(gawk),"rpm -qi gawk"查看软件信息
-F | FS 输入字段分割符,默认为空格
RS输入数据行分割符
OFS输出字段分隔符,默认为换行符
ORS输出数据行分割符
NR已处理输入数据的行目,
FNR当前前文件中已处理输入数据的行数,每个文件都从1开始计数。
NF字段总数
BEGIN开始
END结束
# awk 'BEGIN {FS=".";OFS="->"}{print $1,$2,$3} END{print $4,$5}' base01 
one->two->tree
six->seven->eight
eleven->twelve->thirteen
fourteen->fifteen
FIELDWIDTHS根据字段宽度大小取值
ENVIRON使用关联数组从shell环境变量中取值
# awk 'BEGIN {print ENVIRON["PATH"]}'
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
-mf N   指定最大字段数
-mr N   指定最大数据行数
-f    从文件都取参数
-v   允许在BEGIN代码前声明变量
# cat srpts1 
BEGIN{print "The starting value is",n;}
{print $n}
# awk -v n=3 -f srpts1 base04
The starting value is 3
13
23
33
--re-interval  支持区间{},sed -r 支持区间{n,m}
# awk --re-interval '/^[0-9]{5}$/ {print $0}' date4
11111
22222
34521
邮件地址通配符
^([a-zA-z0-9_\-\.\+]+)@([a-zA-z0-9_\-\.\+]+)\.(a-zA-Z){2,5})$  E-mail的username@hostname
匹配符 ~
# awk 'BEGIN {FS=":"}$1~/^r/{print $1,$NF}' /etc/passwd
cat test
videohy.tc.qq.com 111.40.196.41 192.168.1.25 111.40.196.41
apprecharge.uz73.com 111.40.196.36 111.41.196.35 111.40.196.36
s1.fx.kgimg.com 111.40.196.38 111.40.196.38 111.40.196.38
awk '{if($3~/111.40.196/){print $0}}' test
s1.fx.kgimg.com 111.40.196.38 111.40.196.38 111.40.196.38
#取反过滤网址
awk 'BEGIN{FS=".";OFS="."}{$1="";print }' qq | sed 's/^[.]\(.*\)/\1/'
#或 "|" 过滤IP地址
ip a | grep global | awk -F 'inet |/' '{print $2}'
#合并相同的关键字并求和
awk ' {arr[$2]+=$1;}END{for(i in arr) print i ,arr[i]}' testa 3aa 6b 4d #testa为文件名称

3.8 #wc

-l 显示行数
-w 显示字符数
-c 显示字节数
3.9 #scp
scp [参数]本地文件远程帐户@远程IP地址:远程目录
scp [参数] 远程用户@远程IP地址:远程文件 本地目录
-v显示详情
-P指定远程主机的sshd端口号
-r递归(传输文件夹时记得加上)

四 磁盘管理

包含:cd,df,du,ls,lsattr,mkdir,quota,stat,tree,mount等
4.1 #cd
cd    默认回家,等效"cd ~"
cd -   切换到上一个路径
cd ..  切换到上层目录 
4.2 #df
-h 转换单位,以GB、MB、KB格式显示
-i 用inode数量替代硬盘容量
---total 统计
4.3 #du 
#常用 “du -sh”查看当前目录所用的磁盘空间 
-h 转换单位
-c 显示已列出文件的大小
-s 显示每个输出参数的总计
4.4 #ls 
-i  显示inode
-l  长列表
-r  反序
-S  按大小排序
-X  按文件扩展名排序
-t  按修改时间排序
-lg 不显示UID
-lu 输出最后的访问时间
-lh 进率为1000,根据文件大小显示K、M、G 
-ln 以数字替换UID和GID
-d  显示目录即"."
-Z  显示安全上下文
4.5 #lsattr  查看隐藏属性
-d  仅显示目录
-R  递归
4.6 #mkdir & rmdir  
  mkdir /path/filename  创建
  rmdir /path/filename  删除空目录
#有些工具在minimal的模式下没有安装,需要自己安装相关工具。
#yum -y install quota
4.7 #quota
  -g   列出群组的磁盘空间限制.
  -q   简明列表,只列出超过限制的部分.
  -u   列出用户的磁盘空间限制.
  -v   显示该用户或群组,在所有挂入系统的存储设备的空间限制.
  -V   显示版本信息.
4.8 #quotacheck
#用于扫描挂载的文件系统并设置磁盘的空间与限制
-a 扫描所有分区
-b 备份
-d 调试模式
-c 重新创建文件
-f 强迫检查
-i 交互模式
-v 运行时显示详细的处理信息
-g 显示群组所占的目录文件数
-u 显示每个用户所占的目录数
-M 强制进行quotacheck的扫描。
4.9 #quotaoff  和"#quotaon"的参数基本相同
#用来关闭(打开)用户的磁盘空间的限制
-a 关闭所有的磁盘配额限制
-g 组磁盘配额限制
-p 列出状态
-u 用户配额限制
-v 运行时显示详细的处理信息
--help 显示帮助信息
--version 显示版本信息
4.10 #stat 查看文件的所有信息(inode size 时间戳),但没有文件类型。
-f 显示文件的系统状态而非文件状态
-c 使用指定输出格式代替默认值
stat -c %a file
4.11 #tree
-d  仅显示目录
-D  显示修改时间 【times】filename
-g  显示属组
-u显示属主
-L  层级显示
-p  列出权限
-r反序
4.12 #mount 和  umount
#挂载和卸载文件系统
-a加载文件/etc/fstab中设置的所有设备。
-f 不实际加载设备。可与-v等参数同时使用以查看mount的执行过程。
-n 不将加载信息记录在/etc/mtab文件中。
-o <选项> 指定加载文件系统时的选项:
    async 以异步的方式执行文件系统的输入输出动作。 
    atime 每次存取都更新inode的存取时间,默认设置。  
    defaults 使用默认的选项:rw、suid、dev、exec、anto nouser与async。 
    dev 可读文件系统上的字符或块设备,取消选项为nodev。  
    noatime 每次存取时不更新inode的存取时间。 
    noauto 无法使用-a参数来加载。 
    nodev 不读文件系统上的字符或块设备。 
    noexec 无法执行二进制文件。 
    nosuid 关闭set-user-identifier与set-group-identifer设置位。 
    nouser 使一位用户无法执行加载操作,默认设置。 
    remount 重新加载设备。通常用于改变设备的设置状态。 
    ro 以只读模式加载。 
    rw 以可读写模式加载。 
    sync 以同步方式执行文件系统的输入输出动作。 
    user 可以让一般用户加载设备。
-r 以只读方式加载设备
-t 指定设备的文件系统类型
mount -t iso9660 -o loop CentOS-6.7-minimal.iso /mnt
umount /mnt

五 磁盘维护

包含:dd,dumpe2fs,e2lable,tune2fs,parted,fdisk,mkfs
5.1 #dd 用指定大小的块拷贝文件。
cbs=50  一次转换50个Bytes
ibs=50  一次读入50字节到缓存区
obs=50  一次写入50字节到缓存区
seek=50  跳过50字节输出
skip=50  跳过50字节输入
count=50 只拷贝输入的50字节
(1) MBR备份和恢复,446字节的引导代码,64字节的分区表,2字节的标示符。
dd if=/dev/sda of=/root/mbr bs=1 count=512
dd if=/root/mbr of=/dev/sda bs=1 count=512
(2) 分区表的备份和恢复
dd if=/root/mbr of=/dev/sda bs=1 skip=446 count=66
  fdisk -l > /boot/disk 如果只是逻辑上分区没了,就用fdisk /dev/sda照着改。
(3) 销毁数据
dd if=/dev/urandom of=/dev/sda
(4)磁盘管理
  比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
 dd if=/dev/zero of=/root/1GB bs= count=
dd if=/dev/zero of=/root/1GB bs= count=
dd if=/dev/zero of=/root/1GB bs= count=
dd if=/dev/zero of=/root/1GB bs= count=

(5) 测试硬盘读写速度

dd if=/root/1GB of=/dev/null bs=64k
(6) 用于修复长时间未使用的硬盘,安全且高效(未测试)
dd if=/dev/sda of=/dev/sda
5.2 #dumpe2fs  查看分区状态,主要是superblock(超级块)的信息。
-h 仅列出superblock信息
5.3 
#e2lable 修改卷标
e2lable /dev/sda1 name
#tune2fs
-l 超级块
-L 修改卷标
5.3 
#hdparm
-i  硬盘参数
-T  测试cache的访问性能
-t  测试硬盘的时间访问性能。
测试硬盘的实际性能
hdparm -tT /dev/sda
#parted 磁盘分区,可操作>2TB
parted /dev/sda print 列出分区情况
parted: help 查看   quit  退出    p 查看  (rm N 删除  rescue 恢复)
  mkpart 创建分区 mkfs fs-type 格式化
  mkpart part-type [fs-type] start end 默认字节
5.4 #fdisk 磁盘分区,可操作<2TB
"n" 创建分区; "p" 主分区; "e" 扩展分区;  "+5G" 设置分区大小;"l" 在扩展分区中创建逻辑分区;
"p" 显示分区; "m" 分区格式编号; "t" 转换分区格式; “w”保存;“q”退出
创建ext4文件系统(排序模式),支持区段特性和块预分配(先用0填满且不分配给其他文件)
     #mkfs.ext4 /dev/sda1 
mkreiserfs ReiserFS文件系统(回写模式),支持在线改变大小和将数据写入其他已用物理块的空闲空间。
jfs_mkfs JFS文件系统(排序模式),支持区段特性(ext4),按块存储且索引节点只保存起始块的位置。
    #partprobe  partx  更新分区表
5.5 #mkswap /dev/sdax 创建swap分区
swapon /dev/sdax 开启 ,off为关闭
-s  查看swap分区的详情
5.6 
#fsck 修复文件系统
使用/etc/fstab文件,只能在未挂在的文件系统上运行,修复根文件系统则需要liveCD
-a  检查到错误则自动修复文件系统
-t  指定要检查的文件系统类型
-y  检查到错误则自动修复文件系统
#mkfs.ext4  格式分区
#mke2fs 
-b  指定block大小
-i  多少容量分一个inode
-c  检查磁盘错误,仅读取,-c -c 测试读写
-j  ext3格式

六 系统管理

包含:useradd,userdel,usermod,chage,finger,chfn,groupadd,groupmod,kill,shutdown,ps,top,nice,date,cal,halt,w,who,id,free
(1)环境变量
对整个系统而言:/etc/enviroment --> /etc/profile --> $HOME/.profile --> $HOME/.env(如果存在)
对用户而言,如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/enviroment)有不同的值那么应该以用户环境为准。
执 行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout 
说明: 
1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。 
2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。 
3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。 
4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。 
5)~/.bash_profile 是交互式、login 方式进入 bash 运行的,~/.bashrc 是交互式 non-login 方式进入 bash 运行的,二者设置大致相同,所以通常前者会调用后者。
6)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。
(2)关键文件
/etc/passwd(644),分7个字段[name pw uid gid 描述 home 默认shell],pw为占为。
/etc/shadow(0),分9个字段[name pw 最后修改(1970.1.1)到当天的天数 N天后可改密码 N天后必须改密码 提前N天提醒修改密码 过期N天禁用 被禁的日期(同3) 预留]
(3)命令简介
6.1 # useradd 默认包含-m(创建家目录)和-n(创建同名组)
useradd -D 查看默认
{GROUP=
HOME=/home
INACTIVE=- (过期不禁用)
EXPIRE= (未设置过期日期)
SHELL=/bin/bash
SKEL=/etc/skel (复制到家目录下)
CREATE_MAIL_SPOOL=yes (创建接受邮件的目录)}

-De 变更默认过期日期 "Df" 过期N天禁用

-c  添加备注
-d  指定主目录
-e  帐号过期日1111-11-11
-f  过期后N天禁用;0立即禁用,-1不禁用
-g  指定GID或组名,"-G"附加组
-M  不创建家目录
-r  创建系统用户(uid=[1-499])
-u  为用户指定uid
6.2 #userdel 删除用户
  userdel -r 连同家目录一起删除
6.3 #usermod 参数可参照"useradd"
usermod -l  修改登录名
usermod -L  锁定帐号(实用)
usermod -p  修改密码
usermod -U  解锁
6.4 #passwd & chpasswd
passwd -e username 
#密码直接过期,下次登录强制修改密码。
chpasswd < users.txt 
#批量修改密码,支持从标准输入自动读取用户名和密码对(sb:pw)列表,
6.5
#chsh -s /bin/csh sb  修改sb的默认shell,注意跟绝对路径名
#chfn username 修改登录名.
#chage username 管理用户的过期日期等
#finger username 查询用户信息
#groupadd sb 增加名称为"sb"的组,
*当一个用户在/etc/passwd中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中(这个问题让我纠结了很久)。
#usermod -G sb root 将组sb作为根的附加组,"-g"会替换默认组。
#groupmod -n sb2 sb 变更sb组名称为sb2,加"-g xxx"可以变更GID。
#umask [粘贴位 u g o ] 在/etc/profile设置
6.6 #kill & killall
kill -1(-s HUP) PID  挂起
kill -2(INT)  PID   中断
kill -3(QUIT) PID   结束运行
kill -9(KILL) PID   强制终止
kill -15(TERM) PID  尽可能终止
kill -17(STOP) PID  强制停止运行,但不终止
killall http* #干掉匹配进程名的进程,非紧急不建议使用
#jobs  查看后台工作队列,"-l" 可以显示PID
bg n     后台模式重启动,"n"为jobs队列的编号
fg n     前台模式
kill -9 %n   强制停止
shell脚步会忽略信号3(停止)和15(尽可能的终止),会处理信号1(挂起)和2(终止)
trap 捕捉信号。
trap "echo class is over" EXIT
通过:EXIT捕获脚本结束的信号,trap - EXIT 移除捕获
nohup 结果保存在nohup.out
6.7 #ps  查看进程
ps -e  显示所有进程
ps -f  显示完整格式的输出,通常和-e连用。
[UID PID PPID C(生命周期) STIME(启动时间) TTY TIME CMD]
[root@sb ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jun02 ?        00:00:01 /sbin/init
root         2     0  0 Jun02 ?        00:00:00 [kthreadd]
ps -a  显示除控制进程和无终端进程外的其他进程
ps -l  显示的参数比较多
[root@sb~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 26422 26412  0  80   0 -  1314 -      pts/0    00:00:00 bash
4 R     0 26573 26422  0  80   0 -  1219 -      pts/0    00:00:00 ps
#[F系统标记 S进程状态(0运行s休眠R运行z僵化t停止) PRI(优先级) NI(nice值)
ADDR(内存地址) SZ(换出需要的空间) WCHAN(休眠的内核函数地址)]
ps -H 命令层级,(CMD)处
ps --forest 显示层级信息并用ACSII字符绘出
查找僵死进程
ps -la |awk '{print $2,$3}' |grep z #有些时候是$4
ps -A -o stat,ppid,pid,cmd | grep -i z 
查看进程的开始和运行时间 ,一下以init进程为例
ps -p 1 -o pid,start_time,etime,comm
6.8 #top 
top:当前时间,up:运行时间,x users:登录用户,load average:1分钟 5分钟 15分钟
l  开关平均负载信息行
t  开关CPU信息行
m  开关SWAP行
k  干掉指定的PID进程,必须是属主或者root
d/s 更新时间间隔,默认为3秒
z  切换至彩色或者单色
i  切换是否显示空进程
1  切换单CPU状态模式和对称处理器模式
B  开关重要数字加粗显示
c  切换显示COMMAND信息,在名称和完整路径间切换
6.9 
#nice调整优先级,默认为"0"
nice -n n command   取值:-20 ≤ n ≤20 
#renice  改变已运行命令的优先级
renice n -p PID
6.10 #date 显示 星期  月 日 xx:xx:xx 时区 年
date +%u 显示星期几
date +%U 显示本周是今年的第几周(从今年第一个以周日开始的周算起)
date +%F 显示年-月-日,等价“date +%Y-%m-%d”.
date +%D 显示日/月/年
date -d "$number days ago" n 天以前
date -d "yesterday" 昨天
# date
Sat Jun 13 22:27:35 CST 2015
# date 0613223015.30
Sat Jun 13 22:30:30 CST 2015
# hwclock -w #写入到系统时钟
6.11 #cal 显示本月日历,默认以周日为起点
cal -j  显示今天是今年的第几天(从元旦算起)
cal xxx 显示xxx年的日历
cal -3  显示本季度
cal -m  显示当月(显示周一为起点)
6.12 #shutdow
-t seconds : 设定在几秒钟之后进行关机程序
-k : 并不会真的关机,只是将警告讯息传送给所有只用者
-r : 关机后重新开机
-h : 关机后停机
-n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机
-c : 取消目前已经进行中的关机动作
-f : 关机时,不做 fcsk 动作(检查 Linux 档系统)
-F : 关机时,强迫进行 fsck 动作
time : 设定关机的时间
message : 传送给所有使用者的警告讯息
6.13 #halt
-n : 在关机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的关机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d) 
-f : 强迫关机,不呼叫 shutdown 这个指令
-i : 在关机之前先把所有网络相关的装置先停止
-p : 当关机的时候,顺便做关闭电源(poweroff)的动作
6.14 
#last 显示近期登录用户的信息
-n指定显示条数
#lastb 显示登陆失败
-R  不显示登入系统的主机名称或IP地址
-x  显示系统关机,重新开机,以及执行等级的改变等信息
#w 显示目前登入系统的用户信息
-f  开启或关闭显示用户从何处登入系统。
-h  不显示各栏位的标题信息列。
-l  使用详细格式列表,此为预设值。
-s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
-u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。
#who 显示系统中有哪些使用者正在工作。
-h : 不要显示标题列
-u : 不要显示使用者的动作/工作
-s : 使用简短的格式来显示
-f : 不要显示使用者的上线位置
-q : 统计数量
#id 用户的ID,以及所属群组的ID。
-g或--group  显示用户所属群组的ID。
-G或--groups  显示用户所属附加群组的ID。
-n或--name  显示用户,所属群组或附加群组的名称。
-r或--real  显示实际ID。
-u或--user  显示用户ID。
6.15 #free 显示内存适用情况
-m   单位为MB
-s   n每n秒显示一次
-t   显示Total
-o   不显示缓冲区
6.16 #screen  不间断服务
-A          自适应窗口
-d <session>   指定会话离线
-r   <session>  指定会话恢复
-S  <session>  指定名称
-x  恢复所以离线会话
-ls 显示当前会话
--wipe  自动删除无法使用的会话
两台PC(a和b)访问同一台服务器,这样即可在双方的屏幕上同步显示 
[a@smb ~]#screen -S test
[b@smb ~]#screen -x 

七 系统设置

包含:alias,bind,chroot,clear,clock,crontab,at,declare,dmesg,dmidecode,eval,export,rpm,insmod,
set,modprobe,passwd,,modinfo,setup,ulimit,chkconfig,hwclock
7.1 #alias
跟定义的局部变量一样仅在当前shell有效。保存在~/.bashrc则长期有效。
7.2 #bind 用于显示或设置键盘按键与其相关的功能
-d  显示按键配置的内容。
-l  列出所有的功能。
-m   <按键配置>  指定按键配置。
-q    <功能>  显示指定功能的按键
7.3 #chroot 改变根目录
7.4 #clear清屏 等效  Ctrl+L
7.5 #clock
-set--date  设置硬件时钟的日期和时间
-test  仅作测试,并不真的将时间写入硬件时钟或系统时间
--utc  把硬件时钟上的时间时为CUT
7.6 
#at
at [ -f file ] time       
at -f test 12:30 (MM/DD/YY | +25 min | teatime下午4点)
#crontab
每个cron目录都有个时间戳文件存于/var/spool/anacron
crontab -e 编辑 
crontab -l 查看 
min hour day month week command
*  */2  *   *   *  wc -l /etc/passwd #每两小时运行一次
*  23   *   *   *  if [ `date +%d -d tomorrow` = 01 ];then;command #每月最后一天
#anacron 检查因关机导致为运行的cron。
通过/etc/anacrontab查表,只执行/etc/cron目录内的程序
7.7 #declare
-i 整数
-a  数组
-x全局,约等export
-r 只读
7.8 #dmesg
-c  显示信息后,清除ring buffer中的内容
-n  设置记录信息的层级
dmesg | less 
7.9 #dmidecode
-t code
#查看内存槽数、那个槽位插了内存,大小是多少
  dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
#查看最大支持内存数
  dmidecode|grep -P 'Maximum\s+Capacity'
#查看槽位上内存的速率,没插就是unknown。
  dmidecode|grep -A16 "Memory Device"|grep 'Speed'
7.10 #export 使变量在子shell中有效。
7.11 #rpm
-a  查询所有
-q  使用询问模式
-l  显示软件的文件列表
7.12 #lnsmod 显示已载入系统的模块
7.13 #set 查看局部变量,局部变量仅在当前shell有效。
7.14 #modprobe 用于自动处理可载入模块
-a  载入全部的模块。
-c  显示所有模块的设置信息。
-d  使用排错模式。
-l  显示可用的模块。
-r  模块闲置不用时,即自动卸载模块。
-t  指定模块类型。
7.15 #kmpasswd
yum -y install expect
#生成密码长度10,数字2个,小写3个,大写3个,特殊2个
# mkpasswd  -l 10 -d 2 -c 3 -C 3 -s 2
7.16 #modinfo 显示kernel模块的信息
-a  显示模块开发人员。
-d  显示模块的说明。
7.18 #setup 一个启动图形设置系统的命令
7.19 #ulimit
-a    查看
-H    阀值
-S    警告
-u    单一用户可用的最大进程数量
7.20 #chkconfig
--add 增加所指定的服务
--del 删除所指定的服务
--level 启动等级
--list 列出所有
7.21 #hwclock
-w 系统时间写入硬件时间
-r 读取硬件时间

八 备份压缩

包含:tar,bzip2,gzip,xz.zip,dump,restore
(1)压缩文件 ,默认不保留原文件,-d解压
#gzip   (.gz)   gunzip 解压
#bzip2  (.bz2)  bunzip2 解压
#xz    (.xz)   unxz 解压
(2)目录 默认保留原目录
zip 压缩文件或目录,zip file.zip file
#zip -r 压缩目录
#tar ,cf创建,xf解压
tar -cvf test.tar test1/ test2  将两目录压缩到test.tar中。
tar -tf test.tat  查看tar压缩中的列表, "less xx.tar.gz" 可见 
tar -j   打包后使用bzip2命令压缩,常"-jcf" or "-jxf"
tar -z   打包后使用gzip命令压缩
tar -J   打包后使用xz命令压缩
tar -r   追加文件到已有tar归档文件的末尾,"-u"则对文件进行比较
tar -p   保留文件权限
(3)其他命令
#dump
dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f <设备名称>]
[-h <层级>][-s <磁带长度>][-T <日期>][目录或文件系统] 或 dump [-wW]
#restore
-b <区块大小> 设置区块大小,单位是Byte。
-c 不检查dump操作的备份格式,仅准许读取使用旧格式的备份文件。
-C 使用对比模式,将备份的文件与现行的文件相互对比。
-D <文件系统> 允许用户指定文件系统的名称。
-f <备份文件> 从指定的文件中读取备份数据,进行还原操作。
-h 仅解出目录而不包括与该目录相关的所有文件。
-i 使用互动模式,在进行还原操作时,restore指令将依序询问用户。
-m 解开符合指定的inode编号的文件或目录而非采用文件名称指定。
-r 进行还原操作。
-R 全面还原文件系统时,检查应从何处开始进行。
-s <文件编号> 当备份数据超过一卷磁带时,您可以指定备份文件的编号。
-t 指定文件名称,若该文件已存在备份文件中,则列出它们的名称。
-x 设置文件名称,且从指定的存储媒体里读入它们,
若该文件已存在在备份文件中,则将其还原到文件系统内。
-y 不询问任何问题,一律以同意回答并继续执行指令。

九 网络通信

包含:aprwatch,mtr,ip,route,ping,,ss,nc
9.1 #mtr
#yum install mtr -y
-r  以报告的模式显示,默认10次
-c  次数
-i  设置ICMP报文返回时间
-s : 用来指定ping数据包的大小
-nno-dns : 不对IP地址做域名解析
9.2 #ip
ip   iproute2
-V 显示版本
-0-family link 简写
-4-family inet 简写
-6-family inet6简写
9.3 #route
-n 以数字形式代替解释主机名形式来显示地址
-e 用netstat(8)的格式来显示选路表
-net 路由目标为网络
-host 路由目标为主机
del    删除一条路由
add    添加一条路由
target    指定目标网络或主机
#route add -net 224.0.0.0 netmask 240.0.0.0 reject   #屏蔽一条路由
9.4 #ping
-c 设置回应次数
-t设置ttl大小
查看端口状态
9.5
#netstat
-t TCP
-u UDP
-c 持续输出
-l 显示服务器上的socket
-n 以数字替换服务名称
#ss
-a显示所有的套接字
-l显示所有连接状态的套接字
-e显示详细的套接字信息
-m显示套接字的内存使用情况
-p显示套接字的进程信息
-4显示ipv4的套接字信息
-6显示ipv6的套接字信息
-t仅显示tcp的套接字信息
-u仅显示udp的套接字信息
-n不解析主机名,以数字替换服务名称
-s查看概述
9.6 #nc
  -i <延迟秒数>   设置时间间隔,以便传送信息及扫描通信端口。
  -l   使用监听模式,管控传入的资料。
  -n   直接使用IP地址。
  -p  <通信端口>   设置本地主机使用的通信端口。
  -s <来源位址>   设置本地主机送出数据包的IP地址。
  -u   使用UDP传输协议。
  -v   显示指令执行过程。
  -w <超时秒数>   设置等待连线的时间。

命令描述Alias为指定命令定义一个别名Cd切换的指定目录Declare声明一个变量或变量类型Echo将指定字符串输出到STDOUTExit强制shell以指定的退出状态码退出Export设置指定变量使其对子shell进程可用Fc从历史记录中选择一列命令,默认为最后一条。Help显示帮助文件history显示命令历史记录Jobs列出活动的作业Kill向指定的进程ID(PID)发送一个系统信号Let计算一个数学表达式中的每个参数Local在函数中创建一个局部变量Logout退出shell登录Printf使用格式化字符串显示文本Pwd显示当前目录Read从STDIN读取一行数据并将其赋值给一个变量Readonly同上,但变量值不可变更Set设置并显示环境变量的值和shell特性Shift默认一次移动一个命令行参数Trap捕获系统信号Type获取命令的类型Ulimit给指定的系统资源设定一个上限Umask为新建的文件设置默认权限Unalias删除指定别名Unset删除指定的环境变量