您的当前位置:首页正文

兄弟连linux学习笔记

来源:榕意旅游网
4.1.1

文件处理命令 命令格式 命令+选项+参数 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:

# 系统开机后直接进入哪个运行级别

因篇幅问题不能全部显示,请点此查看更多更全内容