服务热线
Service Hotline
15012950207
新闻中心
公告栏
行业动态
IT知识

linux常用命令

发布时间:2019-07-11    阅读:156 |
分享到:
                  命令【选项】【对象】
ls -a #显示隐藏文件
-l #长格式显示 
-d #显示目录信息
-i #列出inode号码


mkdir -m #配置目录权限权属
#-p递归建立
rmdir 删除空目录


cp 使用方法 cp【选项】来源文件1 目标文件
 cp【选项】来源文件1 来源文件n 目标文件夹
-p #保持文件属性不变
-r #复制目录
-s #复制成软连接
-l #复制成硬连接
-u #源/目文件有差异时才操作


rm -f即force强制操作
-i询问后操作
-r删除目录


mv -f即force强制操作
-i询问后操作
-u源/目文件有差异时才操作


RPM 包管理
经过RPM包安装的软件,记录会保存了/var/lib/rpm/目录下。
常见的安装位置,RPM包一般不支持自定义安装位置。
普通执行文件 /usr/bin/、/bin/
服务器程序,管理工具 /usr/sbin、/sbin/
配置文件 /etc/、/etc/软件名
日志文件 /var/log/、/var/log/软件名/
程序文档/man手册 /usr/share/doc/、/usr/share/man/


rpm已安装软件的查询
rpm -q[子选项] [软件名] #这里的【软件名】是可选的
a all系统中所以rpm安装的软件
i infomation详细说明信息
l list软件所有文件的存放位置,包含c、d的选项
c config列出软件的配置文件
d doc列出软件文件文档
f 查询某目录或文件是由哪个RPM包带来的
例如 rpm -qf /usr/bin/vim 查询vim这个文件是由哪个rpm包释放出来的。


rpm包安装前的查询 #这里的【软件名】是必填的,并要在rpm包所在目录内执行查询命令
rpm -q[子选项] 软件包名称
pi 查询软件的说明
pl 查询软件安装后会在哪个位置释放文件。


rpm 安装/升级操作
rpm -i 软件包名称 install安装软件包
rpm -U 软件包名称 update更新软件包
辅助选项
-v 显示详细信息
-h 显示安装进度
--force 强制安装,文件被误删除了,想覆盖安装的时候可以用--force选项,强制覆盖。
常用:rpm -ivh 软件包名称


rpm软件的卸载
可以先用rpm -qa | grep 软件名 来查看已经安装的软件版本号,然后执行下面的命令卸载
rpm -e 软件名(含版本号)


rpm软件的完整性验证
与安装时rpm包的内容做对比,检索哪些文件被发动了。
rpm -V 软件名 根据软件名与rpm包对比
rpm -Vf 文件 根据文件所属的软件与rpm包对比
rpm -Va 系统中已安装的所有软件都去做对比


yum软件仓库安装软件
主要文件:
基本设置:/etc/yum.conf
仓库配置:/etc/yum.repos.d/*.repo
日志文件:/var/log/yum.log


用法:  yum [-y] 指令 [软件名]
-y 表示一直选择yes同意
install 安装指定软件包,类似于rpm -i
localinstall 本地有rpm包,想用yum来解决安装时的依赖关系
update 升级指定软件包
remove 卸载指定软件包,类似于rpm -e
info 查软件的开发者说明


yum repolist 可以查看仓库中所以的软件(能显示出已装软件及可以安装的软件)
yum clean all 清除/var/cache/yum/*缓存,再次查询或更新时,会自动重建
分组安装:提供了一整套的应用软件,可以批量安装上去
yum grouplist #列出仓库中的软件分组
yum groupinstall 开发工具 #表示把“开发工具”这组软件都安装上去
yum groupremove 开发工具 #表示把“开发工具”这组软件都卸载掉


Linux主要的三个时间参数
mtime :即Modification time,当该文件【内容数据】变更时,就会更新这个时间值。
ctime :即status time,当该文件【状态】改变时,就会更新这个时间值,例如权限 与属性被更改了,都会  更新这个时间
atime :即access time,当该文件的内容就被取用时,就会更新这个读取时间。




touch -a更新修订access time
-c更新修改文件的时间(权限属性)
-d更新修改文件的日期
-m更新mtime数值
-t更新修改时间和日期,格式为YYYYMMDDhhmm
打包与压缩
gzip可以压缩文件,不能压缩目录
tar 可以将目录打包成一个文件,简单的打包并没有压缩。
可以先用tar 将目录打包成文件,再用gzip来压缩文件;也可以用tar命令一次性操作这个过程
gip用法 gzip 文件名 #把文件压缩成.gz文件,源文件会被删除
gzip -c 源文件 > 目标文件 #压缩后,保留源文件的方法


tar打包用法 tar -【选项】目标文件 源文件
-c #即create 建立打包文件
-v #即verbose显示详细信息
-f #即file表示选择要操作的文件
-x #即extract解压缩。
注意:-c和-x应该是一对使用的,用c打包后,用x打开压缩包
如果需要打包的同时压缩文件。可以使用以下参数用一次性完成,
-z #表示使用gzip软件来压缩或解压缩
-j #表示使用bzip2软件来压缩或解压缩
-J #表示使用XZ软件来压缩或解压缩
特别提醒:如果使用 -z -j -J等软件去压缩的时候,f要放在选项最后位,紧跟文件名


Vim文本编辑器
命令模式下有以下功能可以用
:wq #保存并退出
:set nu #显示行号
:set nonu #不显示行号
:s #导入文件或字符
:! #可以执行linux系统命令
:s !命令 #插入命令输出的结果
map Ctrlv字母 【命令选项】
在行首输入#注释符可以这样做:map Ctrlvp I#<ESC>
大写I表示回到行首打印出#字符然后按ESC键退出插入模式
用ab命令预录好一段字符,输入a,打印b
:ab hfl huangfeilong
表示输入hfl时打印出huangfeilong
查找或替换文中的字符串,在命令模式下操作,固定格式为:
:ns/目标字串/新字串/g
s前面n表示行号,比如4,9s/root/ROOT/g 表示将第4行和第9行的root替换成ROOT
全文范围可以用%s来表示,比如%s/root/ROOT/g 表示将文中所有root替换成ROOT


Vim的复制/剪切/粘贴
x #删除单个字符
nx #删除右边n个字条
dd #删除当前行
ndd #删除从当前往下数的n行字符
yy #复制
nyy #复制从当前往下数n行字符
P #粘贴
进入文本模式有以下几种方法
i #在光标前进入【插入模式】
I #在行首位进入【插入模式】
a #在光标后进入【插入模式】
A #在行末位进入【插入模式】
o #在下一行进入【插入模式】
O #在上一行进入【插入模式】


使用者与群组的权限
chgrp -R #递归变更,目录下所有文件和目录都会更新
chown -R #递归变更,目录下所有文件和目录都会更新
chown可以修改所有者,也能顺便把所属组一起修改用“:”号分隔
chown【选项】 own:group 文件或目录
chmod -R #递归变更,目录下所有文件和目录都会更新


系统中与用户相关文件
/etc/passwd 保存了用户帐户的信息,早期的linux版本密码也在文件,现在的密码都不会存在这个文件了,用vim打开文件后,每用户每行。字段解释如下。
例:root:x:0:0:root:/root:/bin/bash
1用户名:2密码标志:3 UID用户号:4 GID初始组号:5帐户说明(可空):6家目录:7 shell位置
UID 0 超级用户
UID 1-499 管理用户(伪用户)
UID500-65535 普通用户
注意:linux默认每用户都建立时都属于同名的初始组。也可以手工用groupadd手工添加附加组


/etc/shadow #保存了用户密码的信息,显示为密文,字段解释如下:
admin:$6$fLW9xG3T$41aexUcRRkppz4H2Yah3xa//xiRSlrFc2eqoFrTlhcqSreHnQ/UMEms5gWdQ4TNl7wpP15MsBQj9QzunXILDc1:17365:0:99999:7:::
1用户名:2密文密码:3最后修改日期:4禁改密码期限:5密码有效期:6到期前提醒:7到期后宽限期:8帐户失效期限:9保留
/etc/group #保存了用户组的信息
root:x:0:附加组成员
1组名:2密码标志:3 GID(组ID):4组中附加用户


/etc/gshadow #保存了用户组的密码
/etc/skel #用户模板目录,放在此目录内的文件会出现在每一个新建用户的家目录中。
/etc/default/useradd #用户默认值文件
GROUP=100 #用户默认组(公有模式中生效)
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(shadow第七字段)
EXPIRE= #密码失效时间(8字段)
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱


/etc/login.defs #用户密码的相关默认值
PASS_MAX_DAYS 99999 #密码有限效期(5字段)
PASS_MIN_DAYS 0 #密码修改间隔(4字段)
PASS_MIN_LEN 5 #密码最小长度为5位
PASS_WARN_AGE 7 #密码到期警告(6字段)
UID_MIN 500 #最小和最大UID范围
GIX_MAX 60000
ENCRYPT_METHOD SHA512 #加密模式
用户和用户组的命令
useradd 用户名【选项】 可以指定以下选项来自定义用户的相关参数
-u 指定用户的UID
-g 指定用户的GID,即初始组id
-G 指定用户的属于哪个附加组id(可写组名,也可写GID)
-c 添加用户说明,可无
-d 指定用户家目录
-s 指定shell目录
例如:useradd -G study test1 表示把test1用户加入study附加组中。
usermod 与useradd选项的用法一样,但是usermod是修改已有用户参数,useradd是添加并建立好参数
userdel -r 删除用户的时候连家目录一起删除
groupadd -g 指定新建组组的GID
groupmod -g 修改已有组的GID
-n 新组名 旧组名
groupdel 组名 删除一个用户组,如果是初始组,组内无成员才可删,附加组有无成员均可删除
gpasswd -a 用户 组名 将用户添加到组中,与usermod 的选项和对象刚刚相反
gpasswd -d 用户 组名 将用户从组中删除
chage  -d 0 用户 强制将创建日期置零,表示登陆要求修改密码。


文件系统的ACL权限
setfacl 选项 文件名
setfacl -m u:用户:权限 文件或目录 #设置某用户权限
setfacl -m g:组名:权限 文件或目录 #设置某组权限
setfacl -m m:权限 文件或目录 #设置acl权限的mask值,实际值和mask与运算得出。
setfacl -m u:用户:权限 -R 文件或目录 #子目录权限的递归,覆盖旧文件ACL属性
setfacl -m d: u:用户:权限 文件或目录 #设置文件或目录的默认acl权限,新文件ACL属性
setfacl -x u:用户 文件或目录 #删除文件或目录的某用户ACL权限属性
setfacl -x g:组名 文件或目录 #删除文件或目录的某组的ACL权限属性


三个特殊文件权限
SUID (仅二进制文件生效)
有些配置文件普通用户不允许访问或修改,但是运行中某程序可能如果读写此文件的。此时可以给某 程序设置为SUID权限,表示必要时可以化身成为root身份去执行此程序,将可以读写配置文件。
满足两个条件SUID才有意义:
1.必须要是二进制程序文件
2.必须具备X执行权限
用法:chmod 4XXX 程序位置 4表示SUID权限


SGID (针对二进制文件及目录生效)
和SUID类似,普通用户运行某程序时,必要时可以化身成为该程序的所属组身份,执行期间以程序 的组成员身份去运行。
满足两个条件SGID才有意义:
3.必须要是二进制程序文件
4.必须具备X执行权限
用法:chmod 2XXX 程序位置 2表示SGID权限


SBIT (仅目录生效)
SBIT即粘着位,若某目录具备777权限,表示任何人可以删除目录内文件,包括不是本用户建立的文 件也能删除。而设置目录的SBIT权限之后,777权限的目录内文件删除的话,只能由文件创始人及root 删除。
用法:chmod 1XXX 程序位置 1表示SBIT权限


find 强大的搜索命令,实时搜索对硬盘负载较重
用法:find [位置] [选项] [动作]
-name 按文件名称搜索
-size [参数] 按文件大小搜索
与大小选项有关的参数
+ 比size参数 更大的被匹配上
- 比size参数 更小的被匹配上
例如 find /tmp -size +50k /tmp目录比50k大的文件被匹配上
-type 按文件类型搜索.
f(一般文件) d(目录) l(连结档) b,c(设备文件)
-perm 【参数】 按文件权限属性
-perm 4755 权限=4755的匹配上
-perm -4755 权限包含4755的匹配上
-perm /4755 权限满足4 7 5 5 任意一种都匹配上
例如 find / -perm /4000 能找到所有SUID的文件
-atime [参数] 按访问时间搜索
-ctime [参数] 按建立时间搜索
-mtime [参数] 按修改时间搜索
与时间选项有关的参数
n n天之前的“一天”
+n n天之前(不含n天本身)的一天或多天
-n n天之内(含n天本身)的一天或多天
例如 find /tmp/ -mtime 0 现在开始到24小时前修改的文件被匹配
find /tmp/ +mtime 3 现在开始到3天前,即前4天以上修改的文件被匹配
find /tmp/ -mtime 3 现在开始到3 天前,即前3天以内修改的文件被匹配
-user 搜索出系统中该user所有的文件
另外,find命令输出结果可以被“其他命令”调用,用关键字 -exec [其他命令] {} /; {}表示find的结果输出
例如 find /home/ -size +50M -exec ls {} ; 表示把find输出结果,用ls来打开
文件属性权限
chattr 改变文件属性的功能。主要有两个选项 (对root也能生效,xfs文件系统仅有部分功能)
用法:chattr 【+-=】 【选项i或a】 文件位置
-i 对于文件而言,表示仅能查看文件内容,不能修改
对于目录而言,表示可以修改目录内文件本身,但不能增删或改名目录下文件。
-a 对于文件而言,表示可以往文件内写入新内容,但不允许删除已有内容。
对于目录而言,表示可以往目录内写入新文件,但不能增删或改名已有文件。


sudo权限 可以手工配置某用户可以以root身份去执行某条命令。命令只能是linux系统命令。
配置可以visudo命令直接打开,也可以手工打开修改/etc/sudoers文件
配置格式: 普通用户 linux主机IP或填ALL=命令所在位置(绝对路径)
例:test1 ALL=/sbin/shutdown -r now
表示test1用户可以代替root执行重启动作了。但是不能关机。
mount 挂载命令
用法:mount [选项] 设备文件名 挂载点
-a #根据/etc/fstab配置文件自动挂载
-t #指定文件系统类型vfat,ext4等。
-o #其他选项,里面有remount之类的
查看设备的挂载情况可以直接用mount或df -h 命令查看
特别注意:用mount命令只能临时生效,重启后失效,然后开机自动挂载需要修改/etc/fstab文件
例示:把iso镜像文件挂载起来
mount -o loop /root/centos7.0.iso /mnt/cdrom/


blkid 查看分区的文件系统信息,包含UUID,文件系统类型等等,常用于mount
用法blkid [设备名称]
示例:blkid /dev/sda1


lsblk 查看硬盘的分区表信息
用法 lsblk [设备名称]
示例 lsblk /dev/sda


prated 功能与lsblk一样。查看硬盘的分区信息
用法 parted  [设备名称] print
示例 parted /dev/sda print


fdsik 分区命令
用法:fdisk [选项] 设备文件路径
-l 查看各分区的简介
典型用法:fdisk /dev/sdb表示用fdisk去分区sdb这块 硬盘
进入fdisk软件之后可以输入m提供帮忙,说明软件的使用方法
注意:fdisk仅支持MBR硬盘分区模式,若使用GPT则需要使用gdisk命令,与fdisk操作方法相同。


partprobe 用fdisk或gdisk分区后分区表未生效(可以用lsblk来判断是否多出一个分区设备文件sda4之类的), 可以通过重启系统,或用partprobe -s 来手动刷新分区表。

mkfs 格式化命令
用法:mkfs [设备名称] [选项]
  -b 指定block容量,linux最大为4k
  -f 如果已经有文件系统了则强制格式化
  -i 与inode有关的设定
size=数值 一般保留为256即可
  -L 指定文件系统的卷票名称lable name的意思
若要使用xfs作为文件分区的文件系统,需要使用mkfs.xfs 命令来操作。
同样若使用ext4文件系统去格式,可以使用mkfs.ext4命令来操作


df 列出文件系统的整体磁盘使用量
用法 df [选项] [目录或文件名]
-a 列出所有的文件系统,包括系统特有/proc等文件系统
-k 以KByte的容量显示各文件系统
-m 以MByte的容量显示各文件系统
-h 以人类易阅读的方式显示
-T 连同该分区的文件系统名称也显示出,例如(xfs)
-i 不用硬盘容量显示,而用inode的数量来显示


du 评估文件系统的硬盘使用量(常用于推估目录所占用容量)
用法 du [选项] 文件或目录 这里的文件或目录最好指定,默认路径为当前目录
-a 列出所有的文件与目录容量,默认统计目录下的文件量而已
-h 以人类易阅读的方式显示
-s 列出总量而已,而不列出每个各别目录占用容量


Shell-基本功能
alisa #添加一个别命,可以包含命令的选项一起写。
用法:alisa 命令=”命令【选项也能加入】”
例如:alisa ls=”ls -l” 那只要输入ll就等于输入了ls -l
别名若想永久生效,用户可以在家目录下打开隐藏文件.bashrc这个文件,把命令与别名对应写进去即可。


输入输出重定向
/dev/stdin #用0表示标准输入(键盘)
/dev/stdout #用1表示标准输出(显示器)
/dev/stderr #用2表示错误输出(显示器)
0 1 2表示可以数字更方便的代用其功能


任何程序执行完后,显示器有输出的。可以用输出重定向功能导出到文件中。
> #表示替换文件内已有的内容
>> #表示在文件中追加新内容,不影响已有内容。
stderr错误输出需要在>或>>左边加上2 例如2> 或 2>> 特别需要注意>的右边不能有空格。


同时保存正确输出与错误输出
命令>文件2>&1 #以覆盖方式,把正确和错误输出都保存到同一文件中
命令>>文件2>&1 #以追加方式,把正确和错误输出都保存到同一文件中
命令&>文件 #以覆盖方式,把正确和错误输出都保存到同一文件中
命令&>>文件 #以追加方式,把正确和错误输出都保存到同一文件中
以上两种方式,效果是一样的。可以根据自己喜好去选择使用。
命令>>文件1  2>>文件2 #把正确输出追加到文件1,把错误输出追加到文件2


命令连接符
; 命令1;命令2 #多条命令顺序执行,命令之间没有逻辑关系
&& 命令1&&命令2 #逻辑与 即命令1必须要正确执行,命令2才会执行
|| 命令1||命令2 #命令或 即命令1与命令正确执行一条即可。
命令1正确执行,命令2就不执行了
命令1没有正确执行,命令2才能执行


管道符(命令1必要有正确输出,命令2才有意义)
用法:命令1|命令2 #命令1的正确输出作为命令2的标准输入
例如:netstat -an | grep #表示将本身网络状态输入到grep中显示,当然grep还可以使用其本身选项, 去入筛选输出的内容。grep “ESTABLISHED” 表示筛选出转发状态的行。


通配符(是linux系统中用来匹配文件名的)
? #匹配一个字符
* #匹配0个或多个做任意字符,也就是可以匹配所有内容
[] #匹配中括号中任意一个字符,例如[abc]表示只能在abc中匹配上一个
[-] #匹配中括号中任意一个字符,-代表范围。例如[a-z]代表匹配一个小字字母
[^-] #逻辑非,表示-范围中所有字符都不匹配。例如[^0-9]代表匹配一个不是数字的字符


bash中其他特殊符号
‘’ #单引号,单引号内所有字符都当普通字符,没有特殊含义,如$ ,``都没有特殊含义
“” #双引号,双引号内特殊字符具有特殊含义,如$,``, 分别表示“调用变量的值”、
“引用命令”、“转义字符”的特殊含义
`` #反引号,一双反引号内是内容是系统命令,如`date`表示引用date命令
$() #与``反引号同义,推荐这种,因为不容易看错。
# #在shell脚本中表示注释
“$变量” #用于调用变量的值,推荐“$变量”用“”括起来,可在脚本中减少出错
${变量} #用于调用变量的值,与”$变量”的用法一样。
#转义符,跟在之后的特殊符号将失去特殊含义,变为普通字符,如$,表示将输出字符$


echo #作用是向屏幕输入字符
用法:echo 【选项】 要输出的内容 
-e #支持反斜杠控制的字符转换,相当于下列选项的开关
#表示输入本身
 #输出警告音
 #退格键,向左删除一个字符
c #取消输出输出末行的换行符,和-n选项一致
e #esc键
#换页符
#换行符
#回车键
#制表符,也就是tab键
#垂直制表符
�nnn #按八进制ASCII码表输出字符
xhh #按十六进制ASCII码表输出字符
  实例:echo -e “a b c ” 表示按下tab键
输出为 a b c


Linux变量
用户变量 #也称本地变量,只在当前的Shell中生效。
环境变量 #export 变量名=变量值,export声明为环境变量,
系统预定义变量 #系统已经规定了用途的变量,用户只能赋值,不能修改变量名
特别注意:用命令设置的环境变量会在重启后失效,若要永久生效,则需要修改/etc/profile文件
变量的叠加 y=123 y=”$y”456或y=${y}456 都表示y值123加456=123456了
变量的类型 #定义此变量可以被赋值的数据的类型。
declare 【选项】【变量名】 命令可以查看或设置变量的类型
-i #设定变量类型为整数形
-f #设定变量类型为浮点形
-a #设定变量类型为数组形
-r #设定变量为只读,不能被赋值。
-x #设定变量为环境变量,效果等于export命令
系统预定义变量
$0 #表示命令本身,保存了当前程序或脚本的名称。
$1-9 #表示第1-9个传递到程序或进程的参数
$[10] #表示第10个传递到程序或进行的参数,两位数时需要用[]括起来
$$ #当前脚本或进程的PID号
$! #后台进行的最后一个进程的PID号
$? #把最近一条命令的运行情况赋值给$? 正确运行赋值为0,非0表示运行出错
$# #保存了共传递了几个参数给脚本


shell编程-正则表达式
正则表达式 #正则表达式是用来匹配字符串的。
* #前一个字符重复出现0到无限多次,即前一位可以匹配某任意字符或多个任意字符。
. #表示匹配一个任意字符,与通配符中的?相似。
[] #表示匹配中括号内字符中的任意一个字符。
^ #在不同的位置有不同的含义。分别是反向选择及表示行首
^[字符串] #表示匹配以中括号内任意一个字符作为行首的行
[^字符串] #表示不匹配中括号内任意一个字符
$ #表示某行的行末
^$ #表示以开头到结尾,中间没有内容,即空白行
关键字$ #表示匹配以“关键字”:作为行末的行
^关键字 #表示匹配以“关键字”作为行首的行
特别需要注意的是^如果在[]外面则表示配置行首的关键字,若在[]的里面则表示反向选择。


shell编程-字符截取命令
grep 可以搜索出包含“关键字符”的行
用法:grep 【选项】“搜索内容” #注意“”双引号也要输入
-i #忽略大小写(常用)
-n #输出行号
-v #反向查找(非的意思,表示不匹配)(常用)
--color=auto #颜色自动
注意grep是匹配关键字后是打印其所在的行。对列的匹配操作要用以下几种命令去


cut #可以指定打印哪个列的字符
用法:cut [选项] 文件名
-f #提取第几列去打印出屏幕
-d #指定列与列之间的分隔符,默认为制表符(按tab产生的)
例如:cut -d “:” -f 1,3 /etc/passwd   表示指定用:去识别分隔符,并打印第1列和第3列。
cut只能识别出比较规整的格式。比较不能识别“空格”为分隔符的文档,规律的: , . ;等符号可以识别


awk #强大字符截取功能,并且可以支持按条件去匹配。比倾向对列的处理。
用法:awk ‘条件1{动作}条件2{动作}......’ 动作多数是用来打印的,默认分隔符也为空格
例如:awk ‘{{FS=”:”} printf $1 “ ” printf $2” ”}’ /etc/passwd
awk ‘条件{动作}’ 这个是固定格式
也可以用print而不用printf,print会自动换行。
$1 $2分别表示第一列和第二列,最后一列用$NF表示,倒数第二列就是$NF-1
{FS=”:”}指定:号为列的分隔符,
也可以用awk -F “:” ‘{print $1 $2}’ 这种方式去指定分隔符
示例: awk -F “:” ‘{print $1 ; print $3}’ /etc/passwd #以:号分隔,把文件的1,3列打印出来
awk ‘{{FS=”:”}print $1 ; print $3}’ /etc/passwd #效果和上例一样
上例表示用ask 去读取/etc/passwd文件,指定:号作为分隔符,并打印1、2列的内容出


sed #可以对数据流进行选取、替换、删除、新增的命令,这点与vim相似,但是vim只能操作文件。简 单来sed支持管道符操作,vim只支持标准输入操作
用法:sed【选项】’【动作】’ 文件名 动作要用单引号’’括起来
选项说明 -n #默认sed会把所有数据打印,-n参数可以只打印经过sed处理的内容
-e #允许对输入数据应用多条sed命令编辑
-i #没有-i不会操作源文件,-i参数会直接修改源文件
动作说明
a ‘na 123’ #在n行的下行加添字符123,不写n代表每行都添加字符
i ‘ni 123’ #在n行的上行插入字符123,不写n代表每行都添加字符
c ‘nc 123 #把n行整行替换为123
d ‘nd ’ #把n行整行删除掉
p ‘2,7p’ #把2-7行的内容打印出来,p一般要和-n配合使用
s ‘ns字符1字符2g’ #n行中字符1替换为字符2,与vim操作相同
注意:动作p一般要与-n选项配合使用。不然匹配的行会打印多次;
如果需要【动作】里面调用变量,那么动作就要使用””括起来了,’’内不能使用变量。
示例: sed -n 2p /etc/passwd #把第二行打印出来
sed -n ‘s/root/ROOT/g’ /etc/passwd #把文件中的字符root全部换成ROOT
sed -n 2a123 /tmp/test #在文件第二行后添加一行为123的字符


sort #对打印出屏幕的内容进行排序,默认按字母a到z进行排序


wc #对字符或行数或单词数做统计:


read #可以以交互的方式往程序里面注入数据,不像$1 $2 $3 ....等系统自定义变量那么古板。
用法:read [选项] [提示信息]
-p #显示提示信息
-s #不显示输入的字符,如输入密码等需要使用
-n #指定接受的字符数量[Y/N]选择时常常用到,满数后自动回车
-t #指定等待用户输入的秒数。


date 日期命令
$(date +%Y%m%d) 调整输出的日期格式
date1=$(date -d ‘1 days ago’) 返回前一天的日期,使用--date也是一样
date -s 20160910 -s即set,设置日期使用
date -s 10:10:10 设置时间


shell编程-条件判断
test 【选项】文件名 #编程时不常用的语法,常用[ 条件判断 ] 
[ 【判断1】【选项】【判断2】]  文件名 # []内前后要加空格,shell编程推荐使用
判断文件类型 -b #文件存在并且为块设备文件类型,返回值为真 速记--block
-c #文件存在并且为字符设备文件类型,返回值为真 速记--chat
-d #文件存在并且为目录文件类型,返回值为真 速记--dir
-e #文件存在(忽略文件类型),返回值为真 速记--exist
-f #文件存在并且为普通文件类型的, 返回值为真 速记--file
例子:[ -d /root ] && echo “yes” || echo “no” 决断/root是否为目录文件,是输出yes,否输出no
判断文件权限 -r #文件存在并且为只读文件权限,返回值为真
-w #文件存在并且拥有可写文件权限,返回值为真
-x #文件存在并且拥有可执行文件权限,返回值为真
-u #文件存在并 且拥有suid文件权限,返回值为真
-g #文件存在并且拥有sgid文件权限,返回值为真
-k #文件存在并且拥有sbit文件权限,返回值为真
例子:[ -w /root ] && echo “yes” || echo “no” 判断/root是否拥有写入权限,是输出yes,否输出no


判断文件新旧 文件1 -nt 文件2 #文件1比文件2新,返回值为真
文件件1 -ot 文件2 #文件1比文件2旧,返回值为真
文件1 -ef 文件2 #文件1与文件2的inode号对比,相等则返回值为真


判断整数 整数1 -eq 整数2 #整数1 = 整数2相等,返回值为真 eq=equal
整数1 -ne 整数2 #整数1 != 整数2不相等,返回值为真 ne=not equal
整数1 -gt 整数2 #整数1 > 整数2 ,返回值为真 gt=greater than
整数1 -lt 整数2 #整数1 < 整数2 ,返回值为真 lt=less than
整数1 -ge 整数2 #整数1 >= 整数2 ,返回值为真 ge=greater than or equal
整数1 -le 整数2 #整数1 <= 整数2 ,返回值为真 le=less than or equal
速记 e表示= g表示> l表示>


判断字符串 -z 字符串 #字符串为空,返回值为真
-n 字符串 #字符串非空,返回值为真
字串1==字串2 #字串1等于字串1,返回值为真
字串1!=字串2 #字串1 不等于字串2,返回值为真
例子: name=feilong
[ -z “$name” ] $$ echo yes || echo no
变量name值为空时,打印yes,否则打印no
注意不能用${name}这种语法在[]中,会报错。


多重条件判断
用法:[ 判断1 -a 判断2 ] 逻辑与 and 判断1与判断2都为真,结果为真
  [ 判断1 -o 判断2 ] 逻辑或 or 判断1 或判断2为真,结果就为真
  [ ! 判断 ] 逻辑非 ! 判断结果为真,结果就为假。判断为假,结果为真。


seq连续命令
echo $(1 100) #表示连续输出1 2 3 4 ... 100
echo {1 100} #与上倒的输出一样。
echo {a..g} #也可以利用bash内建机制来处理,这样表示连续输出a b c d e f 












条件判断式:




if语句 #功能与test一样都是作判断用,但是更加灵活,可以连续做出判断。
用法:
if [ 条件判断式一 ] #条件判断1
then #条件满足时可以执行then后的动作,if与then要配套使用。
条件满足后的动作


elif [ 条件判断式二 ] #继续做条件判断
then #注意elif也需要配置then成对使用
条件满足后的动作


else
全部条件都不满足的动作 #注意这里不then字眼了,因为没有if,所以没有then
fi #fi是if的倒写,表示结束


注意 [ 条件判断式 ] 其实就是test的一种写法而已,完全遵守test的选项参数。具体选项使用方法可以参照test的资料


case语句
条件判断还可以用case语句来实现,一般case语句判断的是变量。并且变量的值在一定的范围内的时候可以用case语句。






循环语句:


for 循环:  固定循环,明确了需要循环次数的情况下常用。有两种语法格式:
语法1 :
for i in 值1 值2 值3 .... #值1 值2 值3 也可以用变量来代替
do 
程序段
done




语法2 :
for ((初始值;限制值;执行步))
do 
程序段
done


例子1: list=ls -l *.tar /mnt/packing/ #把目录中的.tar文件列出来,直到$list内容全部赋完
for i in $list
do 
tar -xvf $i #例中的$list会逐行赋值给变量$i
done
例子2: for ((i=1;i<=100;i=i+1)) #变量i会逐次加1,直到i值大于100,循环就停止
do 
sum=$(($sum+$i)) #变量sum作为一个容器,去装载上次循环相加的值。
Done




while循环:  不固定循环,不管循环多少次,只要条件满足就一直做循环
语法:
while [ 条件判断式 ] # while是当条件判断式成立时才会执行“程序段”
do
程序段
done
例子: 设计一个程序,只有输入yes就会终止,否则一直询问。
read -p “请输入[yes/no]” yn
while [ $yn != “yes” -a $yn != “YES”] #只有等待用户正确输入yes或YES才会终止循环
do 
read -p “请输入[yes/no]” yn
done


until 循环 : 不固定循环,不管循环多少次,只要条件不满足就一直做循环
语法:
until [ 条件判断式 ] #until是当条件判断式不成立时才会执行“程序段”
do
程序段
done


例子: 设计一个程序,只有输入yes就会终止,否则一直询问。
read -p "please choice [yes/no] : " yn
until [ $yn == "yes " -o $yn == "y" ]
do
read -p “请输入[yes/no]” yn
done
特别注意:可以看出for,while,until都是控制反复执行某些代码的语句,但是for需要知道将要循环几次,而while和until可以在不确定循环次数的情况下使用。而且while和until很相似,只要对待条件判断式的结果有差别。
linux服务管理
runlevel运行等级:
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动


服务的分类:
有三种形式
1.RPM安装的服务(也称默认服务):RPM安装的程序会按照约定的位置释放文件,例如配置文件会放在
/etc/目录下,可执行的二进制文件会放在/bin/目录下,启动脚本会放在/etc/rc.d/init.d/目录下。
2.源码安装的服务:源码包安装会释放文件在固定的目录下,一般在/usr/local/目录下
3.xinetd服务:以上两种都是独立服务,长驻内存中运行。而xinetd服务本身也是独立服务,通过xinetd  服务可以访问一些非长驻内存的服务,以节省系统开支。


RPM包安装软件的相关位置
/etc/initaab #修改此文件可以指定开机默认的运行等级
例如:id:5:initdefault改为id:3:initdefault 表示开机默认进入运行级别3
/etc/rc.d/init.d/ #服务启动脚本的存放位置,一般称为服务(service),/etc/init.d/是它的软连接
例如:service network start
service #这个是系统命令
network #因为network脚本在/etc/rc.d/init.d中存在,service默认在此目录中调用脚本。
start #这个是network脚本中 系统变量,在network脚本中有实际意义。
/etc/ #配置文件位置
/etc/xinetd.conf/ #xinetd配置文件
/etc/xinetd.d/ #基于xinetd服务的启用脚本
/var/lib/ #服务产生的数据存放位置
/var/log/ #日志


源码包安装软件的相关位置
源码包安装的软件一般用释放在/usr/local/目录下的以软件名字命令的目录中。那怎么知道里面哪个是启动脚本呢。。。在源码安装包目录里有readme文件,里面都有说明。查阅即可。
独立服务的自启动管理
有三种方式:
1.chkconfig #查看用RPM安装的服务的自启动配置,可借此查看共计用RPM安装了什么服务
chkconfig --level 2345 httpd on #表示在2345运行等级中均开启开机启动
chkconfig --level 2345 httpd off #表示在2345运行等级中均开启开机禁止启动
2.修改/etc/rc.d/rc.local #在文件中添加服务的绝对路径和状态。可以配置源码包服务的自启动。
增加一行 /etc/rc.d/init.d/httpd start 等同开机后手动执行/etc/rc.d/init.d/httpd start 
3.ntsysv #一款图形化工具,直接修改服务自启动,还可以管理xinetd的服务。红帽专有命令


源码包安装的服务自启动管理
源码包安装后,会把所有文件释放在同一个目录下,不像RPM包安装的那个到处放文件,所以只需要进去软件 目录找到启动脚本启动就可以了。
手记启动服务: /usr/local/apache/bin/apachectl start #启动apache的启动脚本,以启用服务
自动启动服务:修改/etc/rc.d/rc.local文件,添加/usr/local/apache/bin/apachectl start即可


定时任务
crontab #可以定义周期性的定时任务,crond服务要打开crontab任务才会生效。
语法:
crontab [-u username][选项]
-u :只有root才能进行这个任务,亦即帮其他用户建立、移除crontab工作
-e #编辑工作内容
-l #列出工作内容
-r #移除全部的工作内容


也可以通过编辑/etc/crontab文件要制定定时任务的工作。如果采用此方式,【 分 时 日 月 周 】后面要写用户名,再写命令的路径。要指定是哪个用户的定时任务。而crontab -e的方式即不用。


进程管理
为什么ssh,http服务都显示为sshd,httpd呢。d是(daemon)的缩写,即是后台进程/守护进程 ,因为 Linux 希望我们可以简单的判断该程序是否为 daemon,可以理解为服务d结尾的都是常驻内存的进程,随时等待响应。


linux的访问方式
tty #终端,即主机前操作。linux共有6个文字tty接口,1个图形图tty,使用ALT+F1...F7切换
pts #虚拟终端,是pty的实现方式,telnet与ssh属于这种方式,每个远程接连会占用一个pts号


后台运行程序 #在命令或脚本的最后输入【&】表示后台运行,或者进程运行中按ctrl + z 暂停运行 
jobs命令 #可以查看本bash中后台任务
jobs -【选项】
-l #显示详细,会连PID一并显示
fg %工作号 #可以指定将jobs中显示的工作号调置前台运行,
bg %工作号 #可以将ctrl -z暂停的进程,放到后台运行。 
注意:fg或bg操作jobs里面的工作号时,可以不加%的,直接fg或bg 工作号就可以了。


ps命令 #静态查看某时刻进程情况
ps aux # ps aux 与ps -ef是一样的,前者是unix写法,后面是bash写法。
ps的选项太复杂,没有必要全记住,只记住以下两点就足够了。
ps -l #只查阅自己bash进程
ps aux #查阅全部系统运行的进程
pstree -【选项】 #以树状结构的方式去显示父进程与子进程之间的关系
-A #各进程树之间的连接以ASCII字符来连接
-p #树支与树干都标识出PID号码
-u #树支与树干都标识出进程所属帐号名称。
僵尸进行 #进行执行完毕或父进程无法完事将子进程线束掉,一直在内存中的进程叫僵尸进程,如果你发 现某进程CMD后面还接上<defunct>时,表示此进程为僵尸进程。


top命令 #动态查看进程情况
top -【选项】
-d #后接数字,表示刷新的秒数,默认为5S
-p #指定某个PID进行监测
在top执行过程可以使用以下按键指令
? #帮助,告知可以使用的指令
P #以CPU使用率排序显示
M #以内存使用率排序显示
N #以PID来排序显示
T #由累计占用CPU时间的TIME+数值去排序显示
K #给予某PID一个记号(signal)
r #给予某PID重装制订一个nice值
q #离开top软件




kill命令 #可以终止进程
kill -【signal值】【PID值】 #根据PID号来结束进程
killall -【signal值】【进程名称】 #根据进程名称来结束进程
signal即信号值常用的为1,9,15(默认值)
1:表示reload重新载入配置文件,类似重新启动
9:表示强制线束进程
15:正常方式终止一个进程,与9的强制不一样的。
注意:用kill或killall去线束jobs中的工作号,一定要加【%】,表示操作的不是进程号,而是工作号
例如 kill -9 %1 #表示强制结束jobs列表中的第1项工作。


dump备份整个文件系统
以xfs文件系统为例
从某文件系统备份到文件
xfsdump [选项] [-f 指定备份档] 待备份资料
-L #指定session标签名,这里可以写针对文件系统的简易说明
-M #指定储存媒体的标签名,这里可以写针对此媒体的说明
-l #指定0-9等级,0表示初始备份,1表示与0的差异备份,以此类推
-f #有点像tar中指定建立的文件名
-I #从/var/lib/xfsdump/inventory列出目前备份的信息状态
例如 xfsdump -l 0 -L boot_0 -M boot__0 -f /date/boot.dump0 /boot
表示把/boot这个分区,备份到/date/boot.dump0中


从备份文件恢复到某文件系统中
xfsrestore [-f 指定备份档] [-L 指定session标签] 
-s #仅还原某分区中的目录
-r #多个备份档累积恢复到分区
例如:
xfsrestore  -f /date/test.dump0 -L boot_0 /boot
表示把/date/test.dump0中的boot_0标签备份档恢复到/boot分区中去

 

收缩