文件处理命令 命令格式 命令+选项+参数 ls -la /etc 命令 ls 显示目录文件
语法:-a 显示所有文件 -l详细信息显示 -d查看目录属性 -rw-r--r--
- 文件类型(-文件 d目录 l软链接文件) rw -r-- r-- u g o
u所有者 g所属组 o其他人 r读 w写 x执行 4.1.2 目录处理命令
mkdir创建新目录
语法:mkdir -p(目录名)递归创建 cd 切换目录
语法:cd (目录) pwd
显示当前目录 语法 pwd 4.1.2.4 rmdir 删除空目录
语法:rmdir (目录) cp
复制文件或者目录
语法:cp -rp (源文件或目录)(目标目录)
-r 复制目录 -p保留文件属性 mv
剪切文件、改名
语法:mv (原文件或目录)(目标目录) rm
删除文件
语法:rm -rf (文件或目录)
-r 删除目录
-f 强制执行 4.1.3
文件处理命令 touch 创建空文件
语法:touch (文件名) cat
显示文件内容 语法:cat(文件名)
-n 显示行号 tac
显示文件内容(反向) 语法:tac(文件名) more
分页显示文件内容 语法:more(文件名)
(空格) 翻页
(Enter) 换行
q 退出
less
分页显示文件内容(可向上翻页) 语法:less (文件名) head
显示文件前面几行 语法head (文件名)
-n 指定行数 tail
显示文件后几行 语法tail (文件名)
-n 指定行数
-f 动态显示文件末尾内容 4.1.4链接命令 ln
生成链接文件
语法:ln -s (源文件)(目标文件)
-s创建软连接
软链接特征:类似Windows快捷方式 lrwxrwxrwx l 软链接 软链接文件权限都为rwxrwxrwx 文件大小 - 只是符号链接 /tmp/issue.soft -> /etc/issue 箭头指向原文件
4.2.1权限管理命令 chmod
改变文件或目录权限
语法:chmod [{ugoa}{+-=}{rwx}] [mode=421 ](文件或目录) -R 递归修改 权限的数字表示 r ---- 4 w ---- 2 x ---- 1
rwx rw- r-- 7 6 4
(文件或目录) 范例:
$ chmod g+w testfile
赋予文件testfile所属组写权限 $ chmod -R 777 testdir
修改目录testfile及其目录下文件为所有用户具有全部权限
文件目录权限总结
代表字符 权限 对文件的含义 对目录的含义
r 读 可以查看文件 可以列出目录 内容 中的内容
w 写 可以修改文件 可以在目录 内容 中创建或删除
文件
x 执行 可以执行文件 可以进入目录
chgrp
改变文件或目录的所属组
语法:chgrp (用户组)(文件或目录) 范例:$ chgrp lampbrother fengjie 改变文件fengjie的所属组为lampbrother umask
显示,设置文件的缺省权限 语法:umask
-S 以rwx形式显示新文件的缺省权限
4.3文件搜索命令 find 文件搜索
语法 find (搜索范围)(匹配条件) $ find /etc -name init 在目录/etc中查找文件init -iname 不区分大小写 $ find / -size +204800
在根目录下查找大于100MB的文件 +n 大于 -n 小于 n 等于 $ find /home -user shenchao
在家目录下查找所有者为shenchao的文件 -group 根据所属组查找
$ find /etc -size +163840 -a -size -204800 在/etc下查找大于80MB小于100MB的文件 -a 两个条件同时满足
-o 两个条件满足任意一个即可 $ find /etc -name inittab -exec ls -l {} \\; 在/etc下查找inittab文件并显示其详细信息 -exec/-ok 命令 {} \\; 对搜索结果执行操作 -type 根据文件类型查找 f 文件 d 目录 l 软链接文件 -inum 根据i节点查找 locate
在文件资料库中查找文件 语法 locate 文件名 which
搜索命令所在目录及别名信息 语法 which 命令 whereis
搜索命令所在的目录及帮助文件路径 语法 whereis 命令
grep
在文件中搜索字符串匹配的行并输出 语法 grep -iv 指定字串 文件
-i 不区分大小写 -v 排除指定字串
4.5 用户管理命令 useradd 添加新用户
语法 useradd 用户名 passwd 设置用户密码 语法 passwd 用户名 w
查看登陆用户详细信息 语法 w
4.6压缩解压命令 gzip
压缩文件 语法: gzip 文件 压缩后的文件格式: .gz gunzip
解压缩 .gz的压缩文件 语法: gunzip (压缩文件) tar 打包目录
语法:tar -zcvf (压缩后的文件名) -c 打包
-v 显示详细信息 -f 指定文件名 -z 打包同时压缩
压缩后的文件格式: .tar.gz
-x 解压 tar -zxvf
4.7 网络命令 last
列出目前与过去登入系统的用户信息(目录)
语法 last
traceroute
显示数据包到主机间的路径 语法: traceroute 网络地址 setup 配置网络 语法:setup mount 挂载设备
语法:mount (-t文件系统) 设备文件名 挂载点 范例:# mount -t iso9660 /dev/sr0 /mnt/cdrom
4.8 关机重启命令 shutdown
语法:shutdown 时间
-c 取消前一个关机命令 -h 关机 -r 重启
5.1
vim常用操作
命令 作用 : set nu : set nonu gg G nG : n x nx dd :n1,n2d yy nyy dd ndd p ZZ
设置行号 取消行号 到第一行 到最后一行 到第n行 到第n行
删除光标所在处字符 删除光标所在处后n个字符 删除光标所在行,ndd删除n行 删除指定范围的行 复制当前行 复制当前行以下n行 剪切当前行
剪切当前行以下n行 粘贴在当前光标所在行下 快捷键,保存修改并退出 6.2 RPM包管理-rpm命令管理
RPM包命名原则
httpd-2.2.15-15.el6.centos.1.i686.rpm httpd 软件包名 2.2.15 软件版本 15 软件发布的次数 el6.centos 适合的Linux平台 i686 适合的硬件平台 rpm rpm 包扩展名
包全名与包名
包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库
RPM安装 rpm –ivh 包全名 选项: -i 安装
-v 显示详细信息
-h 显示进度 --nodeps 不检测依赖性
RPM卸载 rpm -e 包名 选项:
-e 卸载 --nodeps 不检查依赖性
查询是否安装 rpm -qa 包名 -q 查询 -a 所有
查询软件包详细信息 rpm -qi 包名
-i 查询软件信息 -p 查询未安装包信息
查询包中文件安装位置 rpm -ql 包名
-l 列表
-p 查询未安装包信息
查询系统文件属于哪个rpm包 rpm -qf 系统文件
rpm包中文件的提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径 rpm2cpio
# 将 rpm 包转换为 cpio 格式的命令 cpio
# 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
[root@localhost ~]# rpm -qf /bin/ls # 查询 ls 命令属于哪个软件包 [root@localhost ~]# mv /bin/ls /tmp/ # 造成 ls 命令误删除假象
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils- 8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
# 提取 RPM 包中 ls 命令到当前目录的 /bin/ls 下 [root@localhost ~]# cp /root/bin/ls /bin/
# 把 ls 命令复制会 /bin/ 目录,修复文件丢失
6.3.2 yum命令 yum list
查询所有可用软件包列表
yum –y install 包名 安装yum包
yum -y remove 包名 卸载yum包
6.3.3光盘yum源搭建
1.挂载光盘 monunt /dev/cdrom /mnt/cdrom 2.让网络yum源文件失效
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base.repo \\ CentOS-Base.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo \\ CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo \\ CentOS-Vault.repo.bak 3.修改光盘yum源文件
[root@localhost yum.repos.d]# vim CentOS-Media.repo [c6-media]
name=CentOS-$releasever - Media baseurl=file:///mnt/cdrom # 地址为你自己的光盘挂载地址 # file:///media/cdrom/ # file:///media/cdrecorder/ # 注释这两个不存在的地址 gpgcheck=1 enabled=1
# 把 enabled=0 改为 enabled=1 ,让这个 yum 源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
6.4.1 源码包和rpm包的区别 区别
安装之前的区别:概念上的区别 安装之后的区别:安装位置不同 rpm包默认安装位置
/etc/ 配置文件安装目录 /usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置 /usr/share/doc/ 基本的软件使用手册保存位置 /usr/share/man/ 帮助文件保存位置
源码包安装在指定位置当中,一般是/usr/local/软件名/
7.3用户管理命令
用户添加命令 useradd 修改用户密码 passwd 修改用户信息 usermod 修改用户密码信息 chage 删除用户 userdel 用户切换命令 su
useradd 命令格式 useradd(选项)用户名
-u UID: 手工指定用户的UID号 -d 家目录: 手工指定用户的家目录 -c 用户说明: 手工指定用户的说明 -g 组名: 手工指定用户的初始组 -G 组名: 指定用户的附加组
passwd 命令格式 passwd(选项)用户名
-S 查询用户密码的密码状态。仅root用户可用。 -l 暂时锁定用户。仅root用户可用 -u 解锁用户。仅root用户可用
userdel命令格式 userdel (-r)用户名
-r 删除用户的同时删除用户家目录
手动删除用户 vi /etc/passwd vi /etc/shadow vi /etc/group vi /etc/gshadow
rm -rf /var/spool/mail/lamp rm -rf /home/lamp/
9.1 分区和文件系统 分区类型
主分区:总共最多只能分4个
扩展分区:只能有一个,也算作主分区的一种,也就是说主
分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区
分区的设备文件名
主分区1 /dev/sda1 主分区2 /dev/sda2 主分区3 /dev/sda3 扩展分区 /dev/sda4 逻辑分区1 /dev/sda5 逻辑分区2 /dev/sda6 逻辑分区3 /dev/sda7
9.2文件系统常用命令 df
文件系统查看
语法:df(选项)(挂载点)
-a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h 使用习惯单位显示容量,如KB,MB或GB等
-T 显示文件系统类型 -m 以MB为单位显示容量
-k 以KB为单位显示容量。默认就是以KB为单位 du
统计目录或者文件大小
语法:du(选项)(目录或文件名)
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占用量,如KB,MB或GB等 -s 统计总占用量,而不列出子目录和子文件的占用量
du命令和df命令的区别
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间 fsck
文件系统修复
语法:fsck(选项)(分区设备文件名) -a: 不用显示用户提示,自动修复文件系统
-y: 自动修复。和-a作用一致,不过有些文件系统只支持-y
mount -l 查询系统中已经挂载的设备,-l会显示卷标名称 mount -a 依据配置文件 /etc/fstab 的内容,自动挂载挂载光盘
mount -t iso9660 /dev/cdrom /mnt/cdrom/ mount /dev/sr0 /mnt/cdrom/ 卸载光盘
umount 设备文件名或挂载点 umount /mnt/cdrom 挂载U盘
查看U盘设备文件名 fdisk -l 挂载
mount -t vfat /dev/设备文件名 /mnt/usb/ Linux 持NTFS文件系统的
fdisk命令分区挂载新硬盘
fdisk -l 查看新硬盘 fdisk /dev/sdb 分区
partprobe 重新读取分区表信息 mkfs -t ext /dev/sdb1 格式化分区
默认是不支 mkdir /disk1 建立挂载点 mount /dev/sdb1 /disk1/ 挂载
分区制动挂载 /etc/fstab 文件
第一字段:分区设备文件名或UUID(硬盘通用唯一识别 码)
第二字段:挂载点 第三字段:文件系统名称 第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份,1 代表每天备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其 他数字代表检测的优先级,那么当然1的优先级比2高 例如:
/dev/sdb5 /disk5 ext4 defaults 1 2 /etc/fastab 文件修复 mount -o remount,rw/
分配swap分区
fdisk /dev/sdb 新建swap分区 把分区ID改为82
mkswap /dev/sdb1 格式化
swapon /dev/sdb1 加入swap分区 swapoff /dev/sdb1 取消swap分区
vi /etc/fstab
/dev/sdb1 swap swap defaults 0 0 swap分区开机自动挂载 free
查询内存与swap分区使用状况
cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程
buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘,减少磁盘碎片和硬盘的反复寻道,加速了数据的写入过程
10.2 shell脚本的执行方式 echo 输出命令
echo(选项)(输出内容) -e 支持反斜线控制的字符转换 控制字符 作用
\\\\ 输出\\本身
\\b 退格键,也就是向左删除键 \\n 换行符
\ 制表符,也就是Tab键 \\v 垂直制表符
第一个脚本
[root@localhost sh]# vi hello.sh #!/bin/Bash #The first program
# Author: shenchao (E-mail: shenchao@lampbrother.net) echo -e \"Mr. Shen Chao is the most honest man in LampBrother\"
脚本执行权限
赋予执行权限,直接运行 chmod 755 hello.sh ./hello.sh
通过Bash调用执行脚本 bash hello.sh history
历史命令
语法:history (选项)(历史命令保存文件) -c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件
历史命令的调用
使用上、下箭头调用以前的历史命令 使用“!n”重复执行第n条历史命令 使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令
多命令执行顺序
例如:
ls ; date ; cd /user ; pwd
命令 && echo yes || echo no 管道符 命令1 | 命令2
# 命令 1 的正确输出作为命令 2 的操作对象 例如
ll -a /etc/ | more
grep(选项)“搜索内容” 文件名 -i: 忽略大小写 -n: 输出行号 通配符
例如
[root@localhost tmp]# touch abc [root@localhost tmp]# touch abcd [root@localhost tmp]# touch 012 [root@localhost tmp]# touch 0abc [root@localhost tmp]# ls ?abc [root@localhost tmp]# ls [0-9]* [root@localhost tmp]# ls [^0-9]*
Bash中其他特殊符号
例如 反引号与$()
[root@localhost ~]# echo `ls` [root@localhost ~]# echo $(date) 单引号与双引号
[root@localhost ~]# name=sc
[root@localhost ~]# echo '$name' [root@localhost ~]# echo \"$name\" [root@localhost ~]# echo ‘$(date)' [root@localhost ~]# echo “$(date)\"
10.4 Bash的变量 变量设置规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。 变量用等号连接值,等号左右两侧不能有空格。 变量的值如果有空格,需要使用单引号或双引号包括。 在变量的值中,可以使用“\\”转义符。
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用${变量名}包含 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
环境变量名建议大写,便于区分。
变量分类 用户自定义变量
环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
本地变量 变量定义
[root@localhost ~]# name=\"shen chao\" 变量叠加
[root@localhost ~]# aa=123 [root@localhost ~]# aa=\"$aa\"456 [root@localhost ~]# aa=${aa}789 变量调用
[root@localhost ~]# echo $name 变量查看
[root@localhost ~]# set 变量删除
[root@localhost ~]# unset name
位置参数变量
例子1: #!/bin/bash num1=$1 num2=$2
sum=$(( $num1 + $num2))
# 变量 sum 的和是 num1 加 num2 echo $sum
# 打印变量 sum 的值 例子2: #!/bin/bash
echo \"A total of $# parameters\" # 使用 $# 代表所有参数的个数 echo \"The parameters is: $*\"
# 使用 $* 代表所有的参数 echo \"The parameters is: $@\" # 使用 $@ 也代表所有参数
例子3:$*与$@的区别 #!/bin/bash for i in \"$*\"
#$* 中的所有参数看成是一个整体,所以这个 for 循环只会循环一次 do
echo \"The parameters is: $i\" done x=1 for y in \"$@\"
#$@ 中的每个参数都看成是独立的,所以“ $@ ”中有几个参数,就会循环几次 do
echo \"The parameter$x is: $y\" x=$(( $x +1 )) done
接受键盘输入
read(选项)(变量名)
-p “提示信息”: 在等待read输入时,输出提示信息 -t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入 例如 #!/bin/bash
# Author: shenchao (E-mail: shenchao@lampbrother.net) read -t 30 -p \"Please input your name: \" name
# 提示“请输入姓名”并等待 30 秒,把用户的输入保存入变量 name 中 echo \"Name is $name \"
read -s -t 30 -p \"Please enter your age: \" age
# 年龄是隐私,所以我们用“ -s ”选项隐藏输入 echo -e \"\\n\" echo \"Age is $age \"
read -n 1 -t 30 -p \"Please select your gender[M/F]: \" gender # 使用“ -n 1 ”选项只接收一个输入字符就会执行(都不
用输入回车) echo -e \"\\n\"
echo \"Sex is $gender\"
10.5 Bash的运算符 declare声明变量类型 $[运算式] 运算符
举例:
[root@localhost ~]# aa=$(( (11+3)*3/2 ))
# 虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
[root@localhost ~]# bb=$(( 14%3 )) #14 不能被 3 整除,余数是 2
[root@localhost ~]# cc=$(( 1 && 0 ))
# 逻辑与运算只有想与的两边都是 1 ,与的结果才是 1 ,否则与的结果是0
11.1 基础正则表达式 正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了
基础正则表达式
例如:
“*”前一个字符匹配0次,或任意多次 grep \"a*\" test_rule.txt # 匹配所有内容,包括空白行 grep \"aa*\" test_rule.txt # 匹配至少包含有一个 a 的行 grep \"aaa*\" test_rule.txt
匹配最少包含两个连续a的字符串 grep \"aaaaa*\" test_rule.txt
#则会匹配最少包含四个个连续a的字符串
“.” 匹配除了换行符外任意一个字符 grep \"s..d\" test_rule.txt
# “ s..d ”会匹配在 s 和 d 这两个字母之间一定有两个字符的单词
grep \"s.*d\" test_rule.txt
# 匹配在 s 和 d 字母之间有任意字符 grep \".*\" test_rule.txt # 匹配所有内容
“^”匹配行首,“$”匹配行尾 grep \"^M\" test_rule.txt
# 匹配以大写“ M ”开头的行 grep \"n$\" test_rule.txt # 匹配以小写“ n ”结尾的行 grep -n \"^$\" test_rule.txt # 会匹配空白行
“[]” 匹配中括号中指定的任意一个 字符,只匹配一个字符 grep \"s[ao]id\" test_rule.txt
# 匹配 s 和 i 字母中,要不是 a 、要不是 o grep \"[0-9]\" test_rule.txt # 匹配任意一个数字 grep \"^[a-z]\" test_rule.txt # 匹配用小写字母开头的行
“[^]” 匹配除中括号的字符以外的 任意一个字符
grep \"^[^a-z]\" test_rule.txt # 匹配不用小写字母开头的行 grep \"^[^a-zA-Z]\" test_rule.txt # 匹配不用字母开头的行
“\\” 转义符
grep \"\\.$\" test_rule.txt # 匹配使用“ . ”结尾的行
“\\{n\\}”表示其前面的字符恰好出现n次 grep \"a\\{3\\}\" test_rule.txt
# 匹配 a 字母连续出现三次的字符串 grep \"[0-9]\\{3\\}\" test_rule.txt # 匹配包含连续的三个数字的字符串
“\\{n,\\}”表示其前面的字符出现不小于n次 grep \"^[0-9]\\{3,\\}[a-z]\" test_rule.txt # 匹配最少用连续三个数字开头的行
“\\{n,m\\}”匹配其前面的字符至少出现n次, 最多出现m次
grep \"sa\\{1,3\\}i\" test_rule.txt
# 匹配在字母 s 和字母 i 之间有最少一个 a ,最多三个
11.2字符截取命令 cut(选项)文件名
-f 列号: 提取第几列
a -d 分隔符: 按照指定分隔符分割列 例如
[root@localhost ~]# vi student.txt ID Name gender Mark 1 Liming M 86 2 Sc M 90 3 Gao M 83
[root@localhost ~]# cut -f 2 student.txt [root@localhost ~]# cut -f 2,3 student.txt [root@localhost ~]# cut -d \":\" -f 1,3 /etc/passwd
printf ‘输出类型 输出格式’输出内容
printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
输出类型:
%ns: 输出字符串。n是数字指代输出几个字符 %ni: 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数。
输出格式: \\a: 输出警告声音
\\b: 输出退格键,也就是Backspace键 \\f: 清除屏幕 \\n: 换行
\\r: 回车,也就是Enter键
\: 水平输出退格键,也就是Tab键 \\v: 垂直输出退格键,也就是Tab键 例如
[root@localhost ~]# printf %s 1 2 3 4 5 6 [root@localhost ~]# printf %s %s %s 1 2 3 4 5 6 [root@localhost ~]# printf '%s %s %s' 1 2 3 4 5 6 [root@localhost ~]# printf '%s %s %s\\n' 1 2 3 4 5 6
11.4 条件判断 按照文件类型进行判断
例如:
[root@localhost ~]#[ -e /root/install.log ]
[root@localhost ~]#[ -d /root ] && echo \"yes\" || echo \"no\"
# 第一个判断命令如果正确执行,则打印“ yes ”,否则打 印“ no ”
按照文件权限进行判断
例如:
[root@localhost ~]#[ -w student.txt ] && echo \"yes\" || echo \"no\"
# 判断文件是拥有写权限的
两个整数之间比较
例如
[root@localhost ~]#[ 23 -ge 22 ] && echo \"yes\" || echo \"no\" yes
# 判断 23 是否大于等于 22 ,当然是了
[root@localhost ~]#[ 23 -le 22 ] && echo \"yes\" || echo \"no\" no
# 判断 23 是否小于等于 22 ,当然不是了
字符串的判断
例如 aa=11 bb=22
# 给变量 aa 和变量 bb 赋值
[ \"$aa\" == \"bb\" ] && echo \"yes\" || echo \"no\" no
# 判断两个变量的值是否相等,明显不相等,所以返回 no
多重条件判断
例如
aa=11
[ -n \"$aa\" -a \"$aa\" -gt 23 ] && echo \"yes\" || echo \"no\" no
# 判断变量 aa 是否有值,同时判断变量 aa 的是否大于 23 # 因为变量 aa 的值不大于 23 ,所以虽然第一个判断值为真,返回的结果也是假
11.5流程控制 单分支if条件语句 if [ 条件判断式 ] then 程序 fi
单分支条件语句需要注意几个点
if语句使用fi结尾,和一般语言使用大括号结尾不同 [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了 例如:判断分区使用率 #!/bin/bash
#统计根分区使用率
rate=$(df -h | grep \"/dev/sda3\" | awk '{print $5}' | cut -d \"%\" -f1) #把根分区使用率作为变量值赋予变量 rate if [ $rate -ge 80 ] then
echo \"Warning! /dev/sda3 is full!!\" fi
双分支if条件语句 if [ 条件判断式 ] then
条件成立时,执行的程序 else
条件不成立时,执行的另一个程序 fi
例如:备份mysql数据库 #!/bin/bash
#备份 mysql 数据库。 date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量 date size=$(du -sh /var/lib/mysql)
#统计 mysql 数据库的大小,并把大小赋予 size 变量 if [ -d /tmp/dbbak ]
then
echo \"Date : $date!\" > /tmp/dbbak/dbinfo.txt echo \"Data size : $size\" >> /tmp/dbbak/dbinfo.txt cd /tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt&>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt else
mkdir /tmp/dbbak
echo \"Date : $date!\" > /tmp/dbbak/dbinfo.txt echo \"Data size : $size\" >> /tmp/dbbak/dbinfo.txt cd /tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt&>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt 例如:判断apache是否启动 #!/bin/bash
port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print$2}')
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port if [ \"$port\" == \"open\" ]
then
echo “$(date) httpd is ok!” >> /tmp/autostart-acc.log else
/etc/rc.d/init.d/httpd start &>/dev/null
echo \"$(date) restart httpd !!\" >> /tmp/autostart-err.log fi
多分支if条件语句 if [ 条件判断式1 ] then
当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] then
当条件判断式2成立时,执行程序2 „省略更多条件 „ else
当所有条件都不成立时,最后执行此程序 fi 例如 #!/bin/bash
#判断用户输入的是什么文件 read -p \"Please input a filename: \" file
#接收键盘的输入,并赋予变量 file if [ -z \"$file\" ]
#判断 file 变量是否为空 then
echo \"Error,please input a filename\" exit 1 elif [ ! -e \"$file\" ] #判断 file 的值是否存在 then
echo \"Your input is not a file!\" exit 2 elif [ -f \"$file\" ]
#判断 file 的值是否为普通文件 then
echo \"$file is a regulare file!\" elif [ -d \"$file\" ]
#判断 file 的值是否为目录文件 then
echo \"$file is a directory!\" else
echo \"$file is an other file!\" fi
while循环
while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。 while [ 条件判断式 ] do 程序 done 例如 #!/bin/bash #从1加到100 i=1 s=0
while [ $i -le 100 ]
#如果变量 i 的值小于等于 100 ,则执行循环 do
s=$(( $s+$i )) i=$(( $i+1 )) done echo \"The sum is: $s\"
until循环
until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环
until [ 条件判断式 ] do 程序 done 举例 #!/bin/bash #从1加到100
# Author: shenchao (E-mail: shenchao@lampbrother.net) i=1 s=0
until [ $i -gt 100 ]
#循环直到变量 i 的值大于 100 ,就停止循环 do
s=$(( $s+$i )) i=$(( $i+1 )) done
echo \"The sum is: $s\"
12.2RPM包安装服务的管理
RPM包安装服务的位置
RPM安装服务和源码包安装服务的区别就是安装位置的不同
源码包安装在指定位置,一般是/usr/local/ RPM包安装在默认位置中 /etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置 /etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服务的启动脚本 /var/lib/:服务产生的数据放在这里 /var/log/:日志
独立服务的启动
/etc/init.d/独立服务名 start|stop|status|restart| service 独立服务名 start|stop|restart||status
独立服务的自启动
chkconfig [--level 运行级别] [独立服务名] [on|off]
修改/etc/rc.d/rc.local文件 使用ntsysv命令管理自启动
12.3 源码包安装服务的管理
源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法。 例如:
/usr/local/apache2/bin/apachectl start|stop
源码包服务的自启动 例如:
[root@localhost ~]# vi /etc/rc.d/rc.local 加入
/usr/local/apache2/bin/apachectl start
让源码包服务被服务管理命令识别
让源码包的apache服务能被service命令管理 启动
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache
让源码包的apache服务能被chkconfig与ntsysv命令管理自启动
vi /etc/init.d/apache # chkconfig: 35 86 76
# 指定 httpd 脚本可以被 chkconfig 命令管理 。 格式是: chkconfig : 运行级别 启动顺序 关闭顺序 # description: source package apache # 说明,内容随意
[root@localhost ~]# chkconfig --add apache #把源码包apache加入chkconfig命令
13.1进程管理
查看系统中所有进程 [root@localhost ~]# ps aux
# 查看系统中所有进程,使用 BSD 操作系统格式 [root@localhost ~]# ps -le
# 查看系统中所有进程,使用 Linux 标准命令格式
查看系统健康状态
[root@localhost ~]# top [选项] 选项:
-d 秒数: 指定top命令每隔几秒更新。默认是3秒 在top命令的交互模式当中可以执行的命令: ?或h: 显示交互模式的帮助 P: 以CPU使用率排序,默认就是此项 M: 以内存的使用率排序 N: 以PID排序 q: 退出top
查看进程树
[root@localhost ~]# pstree [选项] 选项:
-p: 显示进程的PID
-u: 显示进程的所属用户
终止进程
[root@localhost ~]# kill –l # 查看可用的进程信号
[root@localhost ~]# kill -1进程号 # 重启进程
[root@localhost ~]# kill -9 进程号 # 强制杀死进程
按照终端号踢出用户 [root@localhost ~]# w
# 使用 w 命令查询本机已经登录的用户 [root@localhost ~]# pkill -t -9 pts/1 # 强制杀死从 pts/1 虚拟终端登录的进程
13.3 系统资源查看
vmstat命令监控系统资源
[root@localhost ~]# vmstat [刷新延时 刷新次数] 例如:
[root@localhost proc]# vmstat 1 3
free命令查看内存使用状态 [root@localhost ~]# free [-b|-k|-m|-g] 选项:
-b: 以字节为单位显示
-k: 以KB为单位显示,默认就是以 KB为单位显示
-m: 以MB为单位显示 -g: 以GB为单位显示 缓存和缓冲的区别
简单来说缓存(cache)是用来加速数据 从硬盘中“读取”的,而缓冲(buffer) 是用来加速数据“写入”硬盘的。
查看CPU信息
[root@localhost ~]# cat /proc/cpuinfo
查看系统与内核相关信息 [root@localhost ~]# uname [选项] 选项:
-a: 查看系统所有相关信息; -r: 查看内核版本;
-s: 查看内核名称。
13.4 系统定时任务
crond服务管理与访问控制
[root@localhost ~]# service crond restart [root@localhost ~]# chkconfig crond on
用户的crontab设置
[root@localhost ~]# crontab [选项] 选项:
-e: 编辑crontab定时任务 -l: 查询crontab任务
-r: 删除当前用户所有的crontab任务
[root@localhost ~]# crontab -e
# 进入 crontab 编辑界面。会打开 vim 编辑你的 工作。
* * * * * 执行的任务
举例
*/5 * * * * /bin/echo ”11” >> /tmp/test 5 5 * * 2 /sbin/shutdown -r now 0 5 1,10,15 * * /root/sh/autobak.sh
14.1日志管理 确定服务启动
[root@localhost ~]# ps aux | grep rsyslogd # 查看服务是否启动 chkconfig --list | grep rsyslog # 查看服务是否自启动
常见日志的作用
除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志。
14.2 rsyslogd日志服务 日志文件格式
基本日志格式包含以下四列: 事件产生的时间;
发生事件的服务器的主机名; 产生事件的服务名或程序名; 事件的具体信息。
日志等级
15.1 启动管理 运行级别
运行级别命令
[root@localhost ~]# runlevel # 查看运行级别命令
[root@localhost ~]# init 运行级别
# 改变运行级别命令 系统默认运行级别
[root@localhost ~]# vim /etc/inittab id:3:initdefault:
# 系统开机后直接进入哪个运行级别
因篇幅问题不能全部显示,请点此查看更多更全内容