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 <超时秒数> 设置等待连线的时间。