linux常用命令笔记。

一、系统安装

进入各版本linux官网下载安装:

二、目录结构

命令窗口输入命令:ls /查看根目录结构:

  • /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
  • /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev :dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /tmp:这个目录是用来存放一些临时文件的。
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
  • /usr/bin:系统用户使用的应用程序。
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src:内核源代码默认的放置目录。
  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

三、启动过程

Linux系统的启动过程可以分为5个阶段:

  • 内核的引导
  • 运行init
  • 系统初始化
  • 建立终端
  • 用户登录系统

1、内核的引导
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入/boot目录下的内核文件。
BIOS自检——>操作系统——>/boot——>

2、运行init
init 进程是系统所有进程的起点,init 程序首先是需要读取配置文件/etc/inittab。
许多程序需要开机启动,它们在Windows叫做”服务”(service),在Linux就叫做”守护进程”(daemon)。init进程的一大任务,就是去运行这些开机启动的程序。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做”运行级别”(runlevel)。也就是说,启动时根据”运行级别”,确定要运行哪些程序。
BIOS自检——>操作系统——>/boot——>/init——>运行级别——>

Linux系统有7个运行级别(runlevel):

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS)
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

3、系统初始化
在init的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
BIOS自检——>操作系统——>/boot——>/init——>运行级别——>/etc/init.d——>

4、建立终端
rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:

  • 1:2345:respawn:/sbin/mingetty tty1
  • 2:2345:respawn:/sbin/mingetty tty2
  • 3:2345:respawn:/sbin/mingetty tty3
  • 4:2345:respawn:/sbin/mingetty tty4
  • 5:2345:respawn:/sbin/mingetty tty5
  • 6:2345:respawn:/sbin/mingetty tty6

从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。同时它会显示一个文本登录界面。

BIOS自检——>操作系统——>/boot——>/init——>运行级别——>/etc/init.d——>建立终端——>

5、用户登录系统
一般来说,用户的登录方式有三种:

  • 命令行登录
  • ssh登录
  • 图形界面登录

BIOS自检——>操作系统——>/boot——>/init——>运行级别——>/etc/init.d——>建立终端——>用户登录——>

图形模式与文字模式的切换:
1)Linux预设提供了六个命令窗口终端机让我们来登录。默认我们登录的就是第一个窗口,也就是tty1。
按下Ctrl + Alt + F1 ~ F6来切换tty1,tty2 … tty6。
2)如果安装了图形界面,默认情况下是进入图形界面的,此时按Ctrl + Alt + F1 ~ F6来进入一个命令窗口界面。
进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7就回来了。
3)如果在vmware虚拟机,命令窗口切换的快捷键为Alt + Space + F1~F6。如果在图形界面下请按Alt + Shift + Ctrl + F1~F6切换至命令窗口。
BIOS自检——>操作系统——>/boot——>/init——>运行级别——>/etc/init.d——>建立终端——>用户登录——>Login shell

6、Linux关机
正确的关机流程为:sync > shutdown > reboot > halt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sync # 将数据由内存同步到硬盘中。

shutdown -h now # 立刻关机
halt # 立刻关机
poweroff # 立刻关机
init 0 # 立刻关机
shutdown –h 10 ‘This server will shutdown after 10 mins’ # 这个命令会显示在登陆用户的当前屏幕中,计算机将在10分钟后关机。
shutdown -h 20:25 # 系统会在今天20:25关机
shutdown -h +10 # 十分钟后关机

shutdown -r now # 立刻重启
reboot # 立刻重启
init 6 # 立刻重启
shutdown -r +10 #十分钟后重启

四、远程登录

Linux系统中是通过ssh服务实现的远程登录功能,默认ssh服务端口号为22。
1、SSH登录
SSH(Secure Shell):安全协议外壳。是建立在应用层和传输层基础上的安全协议。
(1)Window系统上Linux远程登录客户端有SecureCRT、Putty、XShel、SSH Secure Shell等。
客户端输入:Host Name( or IP address)、Port、用户名、密码等,就可以远程登录。
(2)终端利用ssh登录远程服务器:

1
2
3
4
5
yum install ssh # 安装ssh
service sshd start # 启动ssh
ssh -p 50022 root@127.0.0.1 # 登录远程服务器
#输入密码:
root@127.0.0.1: #此处输入密码即可登录

五、文件目录

1、文件属性
(1)文件基本属性
使用llls –l命令来显示一个文件的属性以及文件所属的用户和组:

1
2
3
4
5
ls -l

# total 64
# dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
# ...

文件的属性由左边第一部分的10个字符来确定,从左至右用0-9这些数字来表示:0-123-456-789

  • 第0位:文件类型
  • 第1-3位:属主(owner,该文件的所有者)拥有该文件的权限
  • 第4-6位:属组(group,所有者的同组用户)拥有该文件的权限
  • 第7-9位:其他用户(others)拥有该文件的权限

其中,第0位文件类型:

  • d:则是目录
  • -:则是文件
  • l:则表示为链接文档(link file)
  • b:则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
  • c:则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

其中,权限表示:

  • 第1、4、7位:表示读权限,用”r”字符表示读权限;用”-“字符表示没有读权限
  • 第2、5、8位:表示写权限,用”w”字符表示写权限,用”-“字符表示没有写权限
  • 第3、6、9位:表示可执行权限,用”x”字符表示执行权限,用”-“字符表示没有执行权限。

(2)chgrp更改文件属组
chgrp [-R] 属组名 文件名

  • -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

(3)chown更改文件属主,也可以同时更改文件属组
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

1
2
chown bin install.log
chown root:root install.log

(4)chmod更改文件9个属性
1)符号类型改变文件权限
chmod {u属主|g属组|o其他人|a所有人} {+加入|-除去|=设置} {r|w|x} 文件或目录

1
2
chmod u=rwx,g=rx,o=rx install.log 
chmod a-x install.log # 全部人除去可执行权限

2)数字类型改变文件权限
chmod [-R] xyz 文件或目录

  • xyz : 是数字类型的权限属性,为rwx属性数值的相加
  • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
1
chmod 777 install.log # 所有人设置可读可写可执行

2、目录跳转
(1)ls列出目录
ls [目录名称]

  • a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来
  • -d :仅列出目录本身,而不是列出目录内的文件数据
  • -l :长数据串列出,包含文件的属性与权限等等数据
1
ls -al ~

(2)cd切换目录
cd [相对路径或绝对路径]

1
2
3
4
5
6
cd   # 进入用户主目录
cd ~ # 进入用户主目录
cd - # 返回进入此目录之前所在的目录
cd .. # 返回上级目录
cd ../.. # 返回上两级目录
cd ./test/ # 相对路径切换到test目录

(3)pwd显示当前目录
pwd [-P]

  • -P:显示出确实的路径,而非使用连结(link)路径
1
2
pwd
pwd -P

3、文件目录的创建删除
(1)mkdir创建新目录
mkdir [-mp] 目录名称

  • -m:配置文件的权限
  • -p:直接将所需要的目录(包含上一级目录)递归创建起来
1
2
3
mkdir test
mkdir -m 711 test
mkdir -p test1/test2/test3/test4

(2)rmdir删除空目录
rmdir [-p] 目录名称

  • -p:连同上一级『空的』目录也一起删除
1
2
rmdir test
rmdir -p test1/test2/test3/test4

(3)rm移除文件或目录
rm [-fir] 文件或目录

  • -f :就是force的意思,忽略不存在的文件,不会出现警告信息!
  • -i :互动模式,在删除前会询问使用者是否动作
  • -r :递归删除!最常用在目录的删除了!这是非常危险的选项!!!
1
rm -i install.log

(4)touch创建新的空文件
touch [选项] 文件名

  • -a:或–time=atime或–time=access或–time=use 只更改存取时间
  • -c:或–no-create 不建立任何文件
  • -d:<时间日期> 使用指定的日期时间,而非现在的时间
  • -f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题
  • -m:或–time=mtime或–time=modify 只更该变动时间
  • -r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同
  • -t:<日期时间> 使用指定的日期时间,而非现在的时间
1
2
touch ott.txt # 创建新的空文件
touch ott.txt # 文件存在,更新文件当前时间戳

4、文件目录的复制移动
(1)cp复制文件或目录
cp [选项] 源文件 目标文件

  • -a:相当於 -pdr 的意思,至於pdr请参考下列说明
  • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身
  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
  • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身
  • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)
  • -r:递归持续复制,用於目录的复制行为
  • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件
  • -u:若 destination 比 source 旧才升级 destination !
1
2
cp ~/.bashrc /tmp/bashrc
cp -i ~/.bashrc /tmp/bashrc

(2)mv移动文件与目录,或修改名称
mv [选项] 源文件 目标文件

  • -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i:若目标文件(destination)已经存在时,就会询问是否覆盖!
  • -u:若目标文件已经存在,且source比较新,才会升级(update)
1
2
mv /usr/men/* . # /usr/men/所有文件移到当前目录,“.”表示当前目录
mv test newtest # 重命名

5、文件内容显示
(1)cat由第一行开始显示文件内容
cat [-AbEnTv] 文件名

  • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已
  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号
  • -E :将结尾的断行字节 $ 显示出来
  • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同
  • -T :将 [tab] 按键以 ^I 显示出来
  • -v :列出一些看不出来的特殊字符
1
cat /etc/issue

(2)tac由最后一行开始显示文件内容
tac 文件名

1
tac /etc/issue

(3)nl显示行号和内容
nl [-bnw] 文件

  • -b:指定行号指定的方式,主要有两种:
  • -b a:表示不论是否为空行,也同样列出行号(类似 cat -n
  • -b t:如果有空行,空的那一行不要列出行号(默认值)
  • -n:列出行号表示的方法,主要有三种:
  • -n ln:行号在荧幕的最左方显示;
  • -n rn:行号在自己栏位的最右方显示,且不加 0
  • -n rz:行号在自己栏位的最右方显示,且加 0
  • -w:行号栏位的占用的位数
1
nl /etc/issue

(4)more一页一页翻动
more [选项] 文件名

  • -<数字>:指定每屏显示的行数;
  • -d:显示“[press space to continue,’q’ to quit.]”和“[Press ‘h’ for instructions]”;
  • -c:不进行滚屏操作。每次刷新这个屏幕;
  • -s:将多个空行压缩成一行显示;
  • -u:禁止下划线;
  • +<数字>:从指定数字的行开始显示。

在more这个运行过程中,有几个按键可以按:

  • 按Space键:显示文本的下一屏内容
  • 按Enier键:只显示文本的下一行内容
  • /字串:代表在这个显示的内容当中,向下搜寻“字串”这个关键字
  • :f:立刻显示出档名以及目前显示的行数
  • 按H键:显示帮助屏,该屏上有相关的帮助信息
  • 按B键:显示上一屏内容,不过这动作只对文件有用,对管线无用
  • 按Q键:退出more命令。
1
more -dc file

(5)less一页一页翻动,可以向前翻页
less [选项] 文件名

  • -e:文件内容显示完毕后,自动退出;
  • -f:强制显示文件;
  • -g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
  • -l:搜索时忽略大小写的差异;
  • -N:每一行行首显示行号;
  • -s:将连续多个空行压缩成一行显示;
  • -S:在单行显示较长的内容,而不换行显示;
  • -x<数字>:将TAB字符显示为指定个数的空格字符。

在less这个运行过程中,有几个按键可以按:

  • 空白键:向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup]:向上翻动一页;
  • /字串:向下搜寻『字串』的功能;
  • ?字串:向上搜寻『字串』的功能;
  • n:重复前一个搜寻 (与 / 或 ? 有关!)
  • N:反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q:离开 less 这个程序;
1
less /etc/man.config

(6)head读取文件前几行
head [选项] 文件名

  • -n<数字>:指定显示头部内容的行数;
  • -c<字符数>:指定显示头部内容的字符数;
  • -v:总是显示文件名的头信息;
  • -q:不显示文件名的头信息。
1
head -n 20 /etc/man.config

(7)tail读取文件后几行
tail [选项] 文件名

  • -n<数字>:指定显示后面内容的行数;
  • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
1
tail -n 20 /etc/man.config

6、文件搜索
(1)find在指定目录下查找文件
find 目录名称 [选项]

  • -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算
  • -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录
  • -atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算
  • -cmin<分钟>:查找在指定时间之时被更改过的文件或目录
  • -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录
  • -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算
  • -daystart:从本日开始计算时间
  • -depth:从指定目录下最深层的子目录开始查找
  • -expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录
  • -exec<执行指令>:假设find指令的回传值为True,就执行该指令
  • -false:将find指令的回传值皆设为False;
  • -fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件
  • -follow:排除符号连接
  • -fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件
  • -fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件
  • -fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件
  • -fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录
  • -gid<群组识别码>:查找符合指定之群组识别码的文件或目录
  • -group<群组名称>:查找符合指定之群组名称的文件或目录
  • -help或——help:在线帮助
  • -ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别
  • -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别
  • -inum:查找符合指定的inode编号的文件或目录
  • -ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别
  • -iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别
  • -links<连接数目>:查找符合指定的硬连接数目的文件或目录
  • -iname<范本样式>:指定字符串作为寻找符号连接的范本样式
  • -ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出
  • -maxdepth<目录层级>:设置最大目录层级
  • -mindepth<目录层级>:设置最小目录层级
  • -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算
  • -mount:此参数的效果和指定“-xdev”相同
  • -mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算
  • -name<范本样式>:指定字符串作为寻找文件或目录的范本样式
  • -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录
  • -nogroup:找出不属于本地主机群组识别码的文件或目录
  • -noleaf:不去考虑目录至少需拥有两个硬连接存在
  • -nouser:找出不属于本地主机用户识别码的文件或目录
  • -ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令
  • -path<范本样式>:指定字符串作为寻找目录的范本样式
  • -perm<权限数值>:查找符合指定的权限数值的文件或目录
  • -print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串
  • -print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行
  • -printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定
  • -prune:不寻找字符串作为寻找文件或目录的范本样式
  • -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式
  • -size<文件大小>:b块(512字节)、c字节 、w字(2字节)、k千字节、M兆字节、G吉字节
  • -true:将find指令的回传值皆设为True
  • -typ<文件类型>:f普通文件、l符号连接 、d目录 、c字符设备 、b块设备 、s套接字 、p Fifo
  • -uid<用户识别码>:查找符合指定的用户识别码的文件或目录
  • -used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算
  • -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录
  • -version或——version:显示版本信息
  • -xdev:将范围局限在先行的文件系统中
  • -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查
1
2
3
4
5
find . # 查找当前路径
find /home -name "*.txt" # 匹配文件名
find /usr/ -path "*local*" # 匹配路径
find . -type f -atime -7 # 查找近7天
find test3 -size +100c # 查找大于100字符

(2)全面搜索正则表达式
grep match_pattern file_name
grep "match_pattern" file_1 file_2 file_3 ...

  • -a:不要忽略二进制数据
  • -A<显示列数>:除了显示符合范本样式的那一行之外,并显示该行之后的内容
  • -b:在显示符合范本样式的那一行之外,并显示该行之前的内容
  • -c:计算符合范本样式的列数
  • -C<显示列数>或-<显示列数>:除了显示符合范本样式的那一列之外,并显示该列之前后的内容
  • -d<进行动作>:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
  • -e<范本样式>:指定字符串作为查找文件内容的范本样式
  • -E:将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
  • -f<范本文件>:指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
  • -F:将范本样式视为固定字符串的列表
  • -G:将范本样式视为普通的表示法来使用
  • -h:在显示符合范本样式的那一列之前,不标示该列所属的文件名称
  • -H:在显示符合范本样式的那一列之前,标示该列的文件名称
  • -i:忽略字符大小写的差别
  • -l:列出文件内容符合指定的范本样式的文件名称
  • -L:列出文件内容不符合指定的范本样式的文件名称
  • -n:在显示符合范本样式的那一列之前,标示出该列的编号
  • -q:不显示任何信息
  • -R/-r:此参数的效果和指定“-d recurse”参数相同
  • -s:不显示错误信息
  • -v:反转查找
  • -w:只显示全字符合的列
  • -x:只显示全列符合的列
  • -y:此参数效果跟“-i”相同
  • -o:只输出文件中匹配到的部分
1
2
3
4
5
grep -E "[1-9]+"
grep "text" -n file_name
cat file_name | grep "text" -n
grep -l "text" file1 file2 file3 # 多文件搜索
grep "text" . -r -n # 递归搜索

7、文件连接
(1)ln文件连接
ln [选项] 源文件 目标文件

  • -b或–backup:删除,覆盖目标文件之前的备份
  • -d或-F或——directory:建立目录的硬连接
  • -f或——force:强行建立文件或目录的连接,不论文件或目录是否存在
  • -i或——interactive:覆盖既有文件之前先询问用户
  • -n或–no-dereference:把符号连接的目的目录视为一般文件
  • -s或——symbolic:对源文件建立符号连接,而非硬连接
  • -S<字尾备份字符串>或–suffix=<字尾备份字符串>:用”-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它
  • -v或——verbose:显示指令执行过程
  • -V<备份方式>或–version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串
1
2
ln ott.txt /cache/test21/ott1.txt # 硬连接,绝对路径,相当于copy备份
ln -s ott.txt /cache/test21/ott1.txt # 软连接,绝对路径,相当于快捷方式

8、查看命令位置
(1)which

1
which ls  # 如果找到就显示这个命令的路径

六、文件压缩

1、tar打包
tar [选项] 文件或目录

  • -A或–catenate:新增文件到以存在的备份文件
  • -B:设置区块大小
  • -c或–create:建立新的备份文件
  • -C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
  • -d:记录文件的差别
  • -x或–extract或–get:从备份文件中还原文件
  • -t或–list:列出备份文件的内容
  • -z或–gzip或–ungzip:通过gzip指令处理备份文件
  • -Z或–compress或–uncompress:通过compress指令处理备份文件
  • -f<备份文件>或–file=<备份文件>:指定备份文件
  • -v或–verbose:显示指令执行过程
  • -r:添加文件到已经压缩的文件
  • -u:添加改变了和现有的文件到已经存在的压缩文件
  • -j:支持bzip2解压文件
  • -v:显示操作过程
  • -l:文件系统边界设置
  • -k:保留原有文件不覆盖
  • -m:保留文件不被覆盖
  • -w:确认压缩文件的正确性
  • -p或–same-permissions:用原来的文件权限还原文件
  • -P或–absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号
  • -N <日期格式> 或 –newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里
  • –exclude=<范本样式>:排除符合范本样式的文件
1
2
3
4
5
tar -cvf log.tar log2012.log  # 仅打包,不压缩
tar -zcvf log.tar.gz log2012.log # 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log # 打包后,以 bzip2 压缩
tar -zxvf /opt/soft/test/log.tar.gz # 解压缩
tar -ztvf log.tar.gz # 查阅tar包内文件

2、gzip压缩
gzip [选项] 文件或目录

  • -a或——ascii:使用ASCII文字模式
  • -d或–decompress或—-uncompress:解开压缩文件
  • -f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接
  • -h或——help:在线帮助
  • -l或——list:列出压缩文件的相关信息
  • -L或——license:显示版本与版权信息
  • -n或–no-name:压缩文件时,不保存原来的文件名称及时间戳记
  • -N或——name:压缩文件时,保存原来的文件名称及时间戳记
  • -q或——quiet:不显示警告信息
  • -r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理
  • -S或<压缩字尾字符串>或—-suffix<压缩字尾字符串>:更改压缩字尾字符串
  • -t或——test:测试压缩文件是否正确无误
  • -v或——verbose:显示指令执行过程
  • -V或——version:显示版本信息
  • -<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高
  • –best:此参数的效果和指定“-9”参数相同
  • –fast:此参数的效果和指定“-1”参数相同
1
2
3
4
5
6
gzip * # 把test目录下的每个文件压缩成.gz文件
gzip -dv * 把上例中每个压缩的文件解压,并列出详细的信息
gzip -l * 把1例中每个压缩的文件解压,并列出详细的信息
gzip -r log.tar # 压缩一个tar备份文件,此时压缩文件的扩展名为.tar.gz
gzip -rv test # 递归的压缩目录
gzip -dr test # 递归地解压目录

七、用户管理

1、用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
(1)添加新用户账号
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
useradd [选项] 用户名

  • -c comment:指定一段注释性描述
  • -d 目录:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
  • -g 用户组:指定用户所属的用户组
  • -G 用户组,用户组:指定用户所属的附加组
  • -s Shell文件 指定用户的登录Shell
  • -u 用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号
1
useradd –d /usr/tester -s /bin/sh -g group –G adm,root tester #新建一个用户tester,同时新建主目录,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

(2)删除用户账号
删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
userdel [选项] 用户名

  • -r:把用户的主目录一起删除
1
userdel -r tester

(3)修改用户账号
usermod [选项] 用户名

  • -c comment:指定一段注释性描述
  • -d 目录:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
  • -g 用户组:指定用户所属的用户组
  • -G 用户组,用户组:指定用户所属的附加组
  • -s Shell文件 指定用户的登录Shell
  • -u 用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号
  • -l 新用户名:指定一个新的账号,即将原来的用户名改为新的用户名
1
usermod -s /bin/ksh -d /home/z –g developer tester

(4)用户口令管理
用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
passwd [选项] 用户名

  • -l:锁定口令,即禁用账号
  • -u:口令解锁
  • -d:使账号无口令
  • -f:强迫用户下次登录时修改口令
1
2
3
4
5
6
7
8
9
10
#普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令
passwd
Old password:******
New password:*******
Re-enter new password:*******

#超级用户为用户指定口令时,就不需要知道原口令
passwd tester
New password:*******
Re-enter new password:*******

2、用户组的管理
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
(1)增加新的用户组
groupadd [选项] 用户组

  • -g GID:指定新用户组的组标识号(GID)
  • -o:一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
1
2
groupadd group1 # 增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1
groupadd -g 101 group2 # 增加了一个新组group2,同时指定新组的组标识号是101

(2)删除用户组
groupdel 用户组

1
groupdel group1

(3)修改用户组
groupmod [选项] 用户组

  • -g GID:为用户组指定新的组标识号
  • -o:与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同
  • -n 新用户组:将用户组的名字改为新名字
1
groupmod –g 10000 -n group3 group2 # 将组group2的标识号改为10000,组名修改为group3

(4)切换用户组
newgrp root

3、与用户账号有关的系统文件
(1)/etc/passwd文件
每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cat /etc/passwd

root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/usr/sam:/bin/sh

#系统中有一类用户称为伪用户(psuedo users)
#bin 拥有可执行的用户命令文件
#sys 拥有系统文件
#adm 拥有帐户文件
#uucp UUCP使用
#lp lp或lpd子系统使用
#nobody NFS使用

(2)/etc/shadow文件
由于/etc/passwd文件是所有用户都可读的,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在/etc/shadow文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# cat /etc/shadow

root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::

(3)/etc/group文件
组名:口令:组标识号:组内用户列表

1
2
3
4
5
6
7
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam

4、查看当前用户
whoami该命令用户查看当前系统当前账号的用户名。可通过cat /etc/passwd查看系统用户信息。

1
whoami

5、查看登录用户
who命令用于查看当前所有登录系统的用户信息。

  • -m或am I : 只显示运行who命令的用户名、登录终端和登录时间
  • -q或–count : 只显示用户的登录账号和登录用户的数量
  • -u或–heading : 显示列标题
1
who

5、退出登录账户
exit,如果是图形界面,退出当前终端;如果是使用ssh远程登录,退出登陆账户;如果是切换后的登陆用户,退出则返回上一个登陆账号。

1
exit

6、切换用户
可以通过su命令切换用户,su后面可以加“-”。su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录:
注意:如果是ubuntu平台,需要在命令前加“sudo”,如果在某些操作需要管理员才能操作,ubuntu无需切换到root用户即可操作,只需加“sudo”即可。

1
2
3
4
5
6
7
su		# 切换到root用户
su root # 切换到root用户
su - # 切换到root用户,同时切换目录到/root
su - root # 切换到root用户,同时切换目录到/root
su 普通用户 # 切换到普通用户
su - 普通用户 # 切换到普通用户,同时切换普通用户所在的目录
sudo -s # ubuntu平台

八、磁盘管理

1、df检查文件系统的磁盘空间占用情况
利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
df [-ahikHTm] [目录或文件名]

  • -a:列出所有的文件系统,包括系统特有的 /proc 等文件系统
  • -k:以 KBytes 的容量显示各文件系统
  • -m:以 MBytes 的容量显示各文件系统
  • -h:以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
  • -H:以 M=1000K 取代 M=1024K 的进位方式
  • -T:显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出
  • -i:不用硬盘容量,而以 inode 的数量来显示
1
2
3
4
5
6
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm

2、du对文件和目录磁盘使用的空间的查看
du [-ahskm] 文件或目录名称

  • -a:列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已
  • -h:以人们较易读的容量格式 (G/M) 显示
  • -s:列出总量而已,而不列出每个各别的目录占用容量
  • -S:不包括子目录下的总计,与 -s 有点差别
  • -k:以 KBytes 列出容量显示
  • -m:以 MBytes 列出容量显示
1
2
3
4
5
6
7
8
[root@www ~]# du -a
12 ./install.log.syslog <==有文件的列表了
8 ./.bash_logout
8 ./test4
8 ./test2
....中间省略....
12 ./.gconfd
220 .

3、fdisk磁盘分区表操作工具
fdisk [-l] 装置名称

  • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@www ~]# df /           #仅找出磁盘文件名而已
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823168 5585388 41% /

[root@www ~]# fdisk /dev/hdc #注意不要加上数字!
...
Command (m for help): # 等待你的输入!

Command (m for help): m #输入 m 后,就会看到底下这些命令介绍
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition #删除一个partition
l list known partition types
m print this menu
n add a new partition #新增一个partition
o create a new empty DOS partition table
p print the partition table #在屏幕上显示分割表
q quit without saving changes #不储存离开fdisk程序
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit #将刚刚的动作写入分割表
x extra functionality (experts only)

4、 mkfs磁盘格式化
mkfs [-t 文件系统格式] 装置文件名

  • -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@www ~]# mkfs -t ext3 /dev/hdc6
mke2fs 1.39 (29-May-2006)
Filesystem label= #这里指的是分割槽的名称(label)
OS type: Linux
Block size=4096 (log=2) #block 的大小配置为 4K
Fragment size=4096 (log=2)
251392 inodes, 502023 blocks #由此配置决定的inode/block数量
25101 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=515899392
16 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done #有日志记录
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# 这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!

5、磁盘挂载和卸载
(1)mount挂载磁盘
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点

1
mount -t ios9660 /dev/cdrom /mnt/cdrom #将光盘设备挂载到/mnt/cdrom

(2)umount卸载磁盘
umount [-fn] 装置文件名或挂载点

  • -f:强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下
  • -n:不升级 /etc/mtab 情况下卸除
1
umount /mnt/cdrom

九、进程管理

1、ps查看进程
ps [选项]

  • -a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
  • a:显示现行终端机下的所有程序,包括其他用户的程序。
  • -A:显示所有程序。
  • -c:显示CLS和PRI栏位。
  • c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
  • -C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
  • -d:显示所有程序,但不包括阶段作业领导者的程序。
  • -e:此选项的效果和指定”A”选项相同。
  • e:列出程序时,显示每个程序所使用的环境变量。
  • -f:显示UID,PPIP,C与STIME栏位。
  • f:用ASCII字符显示树状结构,表达程序间的相互关系。
  • -g<群组名称>:此选项的效果和指定”-G”选项相同,当亦能使用阶段作业领导者的名称来指定。
  • g:显示现行终端机下的所有程序,包括群组领导者的程序。
  • -G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
  • h:不显示标题列。
  • -H:显示树状结构,表示程序间的相互关系。
  • -j或j:采用工作控制的格式显示程序状况。
  • -l或l:采用详细的格式来显示程序状况。
  • L:列出栏位的相关信息。
  • -m或m:显示所有的执行绪。
  • n:以数字来表示USER和WCHAN栏位。
  • -N:显示所有的程序,除了执行ps指令终端机下的程序之外。
  • -p<程序识别码>:指定程序识别码,并列出该程序的状况。
  • p<程序识别码>:此选项的效果和指定”-p”选项相同,只在列表格式方面稍有差异。
  • r:只列出现行终端机正在执行中的程序。
  • -s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
  • s:采用程序信号的格式显示程序状况。
  • S:列出程序时,包括已中断的子程序资料。
  • -t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
  • t<终端机编号>:此选项的效果和指定”-t”选项相同,只在列表格式方面稍有差异。
  • -T:显示现行终端机下的所有程序。
  • -u<用户识别码>:此选项的效果和指定”-U”选项相同。
  • u:以用户为主的格式来显示程序状况。
  • -U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
  • U<用户名称>:列出属于该用户的程序的状况。
  • v:采用虚拟内存的格式显示程序状况。
  • -V或V:显示版本信息。
  • -w或w:采用宽阔的格式来显示程序状况。 
  • x:显示所有程序,不以终端机来区分。
  • X:采用旧式的Linux i386登陆格式显示程序状况。
  • -y:配合选项”-l”使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
  • -<程序识别码>:此选项的效果和指定”p”选项相同。
  • –cols<每列字符数>:设置每列的最大字符数。
  • –columns<每列字符数>:此选项的效果和指定”–cols”选项相同。
  • –cumulative:此选项的效果和指定”S”选项相同。
  • –deselect:此选项的效果和指定”-N”选项相同。
  • –forest:此选项的效果和指定”f”选项相同。
  • –headers:重复显示标题列。
  • –help:在线帮助。
  • –info:显示排错信息。
  • –lines<显示列数>:设置显示画面的列数。
  • –no-headers:此选项的效果和指定”h”选项相同,只在列表格式方面稍有差异。
  • –group<群组名称>:此选项的效果和指定”-G”选项相同。
  • –Group<群组识别码>:此选项的效果和指定”-G”选项相同。
  • –pid<程序识别码>:此选项的效果和指定”-p”选项相同。
  • –rows<显示列数>:此选项的效果和指定”–lines”选项相同。
  • –sid<阶段作业>:此选项的效果和指定”-s”选项相同。
  • –tty<终端机编号>:此选项的效果和指定”-t”选项相同。
  • –user<用户名称>:此选项的效果和指定”-U”选项相同。
  • –User<用户识别码>:此选项的效果和指定”-U”选项相同。
  • –version:此选项的效果和指定”-V”选项相同。
  • –widty<每列字符数>:此选项的效果和指定”-cols”选项相同。
1
2
ps -a #列出所有进程
ps -ef | grep xxx #列出所需进程

2、kill终止进程
kill [选项] 进程或作业识别号

  • -a:当处理当前进程时,不限制命令名和进程号的对应关系
  • -l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称
  • -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号
  • -s <信息名称或编号>:指定要送出的信息
  • -u:指定用户
1
2
3
4
5
6
ps -ef | grep vim #查看pid
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim

kill 3268 #杀掉进程
kill -9 3268 #强制杀掉进程

十、系统性能

1、top实时动态查看系统整体运行情况
top [选项]

  • -b:以批处理模式操作
  • -c:显示完整的治命令
  • -d:屏幕刷新间隔时间
  • -I:忽略失效过程
  • -s:保密模式
  • -S:累积模式
  • -i<时间>:设置间隔时间
  • -u<用户名>:指定用户名
  • -p<进程号>:指定进程
  • -n<次数>:循环显示的次数

在top命令执行过程中可以使用的一些交互命令:

  • h:显示帮助画面,给出一些简短的命令总结说明
  • k:终止一个进程
  • i:忽略闲置和僵死进程,这是一个开关式命令
  • q:退出程序
  • r:重新安排一个进程的优先级别
  • S:切换到累计模式
  • s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s
  • f或者F:从当前显示中添加或者删除项目
  • o或者O:改变显示项目的顺序
  • l:切换显示平均负载和启动时间信息
  • m:切换显示内存信息
  • t:切换显示进程和CPU状态信息
  • c:切换显示命令名称和完整命令行
  • M:根据驻留内存大小进行排序
  • P:根据CPU使用百分比大小进行排序
  • T:根据时间/累计时间进行排序
  • w:将当前设置写入~/.toprc文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[root@www~]$ top
# 统计信息:前五行是系统整体的统计信息
top - 16:07:37 up 241 days, 20:11, 1 user, load average: 0.96, 1.13, 1.25
Tasks: 231 total, 1 running, 230 sleeping, 0 stopped, 0 zombie
Cpu(s): 12.7%us, 8.4%sy, 0.0%ni, 77.1%id, 0.0%wa, 0.0%hi, 1.8%si, 0.0%st
Mem: 12196436k total, 12056552k used, 139884k free, 64564k buffers
Swap: 2097144k total, 151016k used, 1946128k free, 3120236k cached

# 进程信息:统计信息下方类似表格区域显示的是各个进程的详细信息,默认5秒刷新一次
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18411 pplive 20 0 11.9g 7.8g 5372 S 220.2 67.1 16761:00 java
1875 pplive 20 0 3958m 127m 4564 S 4.6 1.1 12497:35 java
4 root 20 0 0 0 0 S 0.3 0.0 184:01.76 ksoftirqd/0
13 root 20 0 0 0 0 S 0.3 0.0 135:49.83 ksoftirqd/2
25 root 20 0 0 0 0 S 0.3 0.0 136:54.49 ksoftirqd/5

# 统计信息说明:
# 第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相同。
# 第1段:系统当前时间,例如:16:07:37
# 第2段:系统运行时间,未重启的时间,时间越长系统越稳定。
# 格式:up xx days, HH:MM
# 例如:241 days, 20:11, 表示连续运行了241天20小时11分钟
# 第3段:当前登录用户数,例如:1 user,表示当前只有1个用户登录
# 第4段:系统负载,即任务队列的平均长度,3个数值分别统计最近1,5,15分钟的系统平均负载
# 系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
# 多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。
# 第2行:Tasks 进程相关信息
# 第1段:进程总数,例如:Tasks: 231 total, 表示总共运行231个进程
# 第2段:正在运行的进程数,例如:1 running,
# 第3段:睡眠的进程数,例如:230 sleeping,
# 第4段:停止的进程数,例如:0 stopped,
# 第5段:僵尸进程数,例如:0 zombie
# 第3行:Cpus CPU相关信息,如果是多核CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。
# 第1段:us 用户空间占用CPU百分比,例如:Cpu(s): 12.7%us,
# 第2段:sy 内核空间占用CPU百分比,例如:8.4%sy,
# 第3段:ni 用户进程空间内改变过优先级的进程占用CPU百分比,例如:0.0%ni,
# 第4段:id 空闲CPU百分比,例如:77.1%id,
# 第5段:wa 等待输入输出的CPU时间百分比,例如:0.0%wa,
# 第6段:hi CPU服务于硬件中断所耗费的时间总额,例如:0.0%hi,
# 第7段:si CPU服务软中断所耗费的时间总额,例如:1.8%si,
# 第8段:st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)
# 第4行:Mem 内存相关信息(Mem: 12196436k total, 12056552k used, 139884k free, 64564k buffers)
# 第1段:物理内存总量,例如:Mem: 12196436k total,
# 第2段:使用的物理内存总量,例如:12056552k used,
# 第3段:空闲内存总量,例如:Mem: 139884k free,
# 第4段:用作内核缓存的内存量,例如:64564k buffers
# 第5行:Swap 交换分区相关信息(Swap: 2097144k total, 151016k used, 1946128k free, 3120236k cached)
# 第1段:交换区总量,例如:Swap: 2097144k total,
# 第2段:使用的交换区总量,例如:151016k used,
# 第3段:空闲交换区总量,例如:1946128k free,
# 第4段:缓冲的交换区总量,3120236k cached

# 进程信息说明:
# A: PID = (Process Id) 进程Id;
# E: USER = (User Name) 进程所有者的用户名;
# H: PR = (Priority) 优先级
# I: NI = (Nice value) nice值。负值表示高优先级,正值表示低优先级
# O: VIRT = (Virtual Image (kb)) 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
# Q: RES = (Resident size (kb)) 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
# T: SHR = (Shared Mem size (kb)) 共享内存大小,单位kb
# W: S = (Process Status) 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
# K: %CPU = (CPU usage) 上次更新到现在的CPU时间占用百分比
# N: %MEM = (Memory usage (RES)) 进程使用的物理内存百分比
# M: TIME+ = (CPU Time, hundredths) 进程使用的CPU时间总计,单位1/100秒
# b: PPID = (Parent Process Pid) 父进程Id
# c: RUSER = (Real user name)
# d: UID = (User Id) 进程所有者的用户id
# f: GROUP = (Group Name) 进程所有者的组名
# g: TTY = (Controlling Tty) 启动进程的终端名。不是从终端启动的进程则显示为 ?
# j: P = (Last used cpu (SMP)) 最后使用的CPU,仅在多CPU环境下有意义
# p: SWAP = (Swapped size (kb)) 进程使用的虚拟内存中,被换出的大小,单位kb
# l: TIME = (CPU Time) 进程使用的CPU时间总计,单位秒
# r: CODE = (Code size (kb)) 可执行代码占用的物理内存大小,单位kb
# s: DATA = (Data+Stack size (kb)) 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
# u: nFLT = (Page Fault count) 页面错误次数
# v: nDRT = (Dirty Pages count) 最后一次写入到现在,被修改过的页面数
# y: WCHAN = (Sleeping in Function) 若该进程在睡眠,则显示睡眠中的系统函数名
# z: Flags = (Task Flags <sched.h>) 任务标志,参考 sched.h
# X: COMMAND = (Command name/line) 命令名/命令行

2、free显示系统使用和空闲的内存情况
free [选项]

  • -b:以Byte为单位显示内存使用情况
  • -k:以KB为单位显示内存使用情况
  • -m:以MB为单位显示内存使用情况
  • -o:不显示缓冲区调节列
  • -s<间隔秒数>:持续观察内存使用状况
  • -t:显示内存总和列
  • -V:显示版本信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@www~]$ free -m
total used free shared buffers cached
Mem: 2016 1973 42 0 163 1497
-/+ buffers/cache: 312 1703
Swap: 4094 0 4094

# 第一部分Mem行解释:
# total:内存总数;total=used+free
# used:已经使用的内存数;
# free:空闲的内存数;
# shared:当前已经废弃不用;
# buffers Buffer:缓存内存数;
# cached Page:缓存内存数。
# 第二部分(-/+ buffers/cache)解释:
# (-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached;反映的是被程序实实在在吃掉的内存。
# (+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached;反映的是可以挪用的内存总数。
# 第三部分Swap交换分区:

3、cat /proc/meminfo查看系统内存情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[root@www~]$ cat /proc/meminfo 

MemTotal: 262144 kB
MemFree: 237904 kB
Cached: 10540 kB
Active: 10220 kB
Inactive: 7004 kB
Active(anon): 6608 kB
Inactive(anon): 76 kB
Active(file): 3612 kB
Inactive(file): 6928 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 524288 kB
SwapFree: 524288 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 6684 kB
Shmem: 2632 kB
Slab: 6972 kB
SReclaimable: 4288 kB
SUnreclaim: 2684 kB

# 显示解释
# MemTotal: 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)
# MemFree: LowFree与HighFree的总和,被系统留着未使用的内存
# Buffers: 用来给文件做缓冲大小
# Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).
# SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。
# Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
# Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
# HighTotal:
# HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
# LowTotal:
# LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。Among many
# other things, it is where everything from the Slab is allocated. Bad things happen when you’re out of lowmem.
# SwapTotal: 交换空间的总大小
# SwapFree: 未被使用交换空间的大小
# Dirty: 等待被写回到磁盘的内存大小。
# Writeback: 正在被写回到磁盘的内存大小。
# AnonPages:未映射页的内存大小
# Mapped: 设备和文件等映射的大小。
# Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
# SReclaimable:可收回Slab的大小
# SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
# PageTables:管理内存分页页面的索引表的大小。
# NFS_Unstable:不稳定页表的大小
# VmallocTotal: 可以vmalloc虚拟内存大小
# VmallocUsed: 已经被使用的虚拟内存大小。
# VmallocChunk: largest contigious block of vmalloc area which is free

3、iostat监视磁盘操作活动
iostat [选项] [时间] [次数]

  • -C:显示CPU使用情况
  • -d:显示磁盘使用情况
  • -k:以 KB 为单位显示
  • -m:以 M 为单位显示
  • -N:显示磁盘阵列(LVM) 信息
  • -n:显示NFS 使用情况
  • -p[磁盘]:显示磁盘和分区的情况
  • -t:显示终端和CPU的信息
  • -x:显示详细信息
  • -V:显示版本信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@www~]# iostat

#系统信息和监测时间
Linux 2.6.18-128.el5 (CT1186) 2012年12月28日

avg-cpu: %user %nice %system %iowait %steal %idle
8.30 0.02 5.07 0.17 0.00 86.44

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.73 43.70 487.42 674035705 7517941952
sda1 0.00 0.00 0.00 2658 536
sda2 0.11 3.74 3.51 57721595 54202216
sda3 0.98 0.61 17.51 9454172 270023368
sda4 0.00 0.00 0.00 6 0
sda5 6.95 0.12 108.73 1924834 1677123536
sda6 2.20 0.18 31.22 2837260 481488056
sda7 12.48 39.04 326.45 602094508 5035104240

# cpu属性值说明:
# %user:CPU处在用户模式下的时间百分比。
# %nice:CPU处在带NICE值的用户模式下的时间百分比。
# %system:CPU处在系统模式下的时间百分比。
# %iowait:CPU等待输入输出完成时间的百分比。
# %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
# %idle:CPU空闲时间百分比。
# 备注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
# disk属性值说明:
# rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
# wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
# r/s: 每秒完成的读 I/O 设备次数。即 rio/s
# w/s: 每秒完成的写 I/O 设备次数。即 wio/s
# rsec/s: 每秒读扇区数。即 rsect/s
# wsec/s: 每秒写扇区数。即 wsect/s
# rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
# wkB/s: 每秒写K字节数。是 wsect/s 的一半。
# avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
# avgqu-sz: 平均I/O队列长度。
# # await: 平均每次设备I/O操作的等待时间 (毫秒)。
# svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
# %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
# 备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

十一、软件安装

1、yum软件包管理器
(1)yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器。
yum [选项] [参数] 软件包
选项:

  • -h:显示帮助信息
  • -y:对所有的提问都回答“yes”
  • -c:指定配置文件
  • -q:安静模式
  • -v:详细模式
  • -d:设置调试等级(0-10)
  • -e:设置错误等级(0-10)
  • -R:设置yum处理一个命令的最大等待时间
  • -C:完全从缓存中运行,而不去下载或者更新任何头文件

参数:

  • install:安装rpm软件包
  • update:更新rpm软件包
  • check-update:检查是否有可用的更新rpm软件包
  • remove:删除指定的rpm软件包
  • list:显示软件包的信息
  • search:检查软件包的信息
  • info:显示指定的rpm软件包的描述信息和概要信息
  • clean:清理yum过期的缓存
  • shell:进入yum的shell提示符
  • resolvedep:显示rpm软件包的依赖关系
  • localinstall:安装本地的rpm软件包
  • localupdate:显示本地rpm软件包进行更新
  • deplist:显示rpm软件包的所有依赖关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
yum install              #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1

yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1

yum info package1 #显示安装包信息package1
yum list #显示所有已经安装和可以安装的程序包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包

yum remove &#124; erase package1 #删除程序包package1
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况

yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers

(2)国内yum源

1
2
3
4
5
6
7
8
9
10
11
#1.首先备份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

#2.下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)
#网易yum源:http://mirrors.163.com/.help/CentOS6-Base-163.repo
#中科大yum源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos
#sohuyum源,安装方法查看: http://mirrors.sohu.com/help/centos.html

#3.运行以下命令生成缓存
yum clean all
yum makecache

2、apt-get软件包管理工具
(1)apt-get命令是Debian Linux发行版中的APT软件包管理工具。
apt-get [选项] [参数] 软件包
选项:

  • -h:本帮助文件。
  • -q:输出到日志 - 无进展指示
  • -qq:不输出信息,错误除外
  • -d:仅下载 - 不安装或解压归档文件
  • -s:不实际安装。模拟执行命令
  • -y:假定对所有的询问选是,不提示
  • -f:尝试修正系统依赖损坏处
  • -m:如果归档无法定位,尝试继续
  • -u:同时显示更新软件包的列表
  • -b:获取源码包后编译 -V 显示详细的版本号
  • -c=?:阅读此配置文件
  • -o=?:设置自定的配置选项,如 -o dir::cache=/tmp

参数:

  • update:重新获取软件包列表
  • upgrade:进行更新
  • install:安装新的软件包
  • remove:移除软件包
  • autoremove:自动移除全部不使用的软件包
  • purge:移除软件包和配置文件
  • source:下载源码档案
  • build-dep:为源码包配置编译依赖
  • dist-upgrade:发行版升级
  • dselect-upgrade:依照 dselect 的选择更新
  • clean:清除下载的归档文件
  • autoclean:清除旧的的已下载的归档文件
  • check:检验是否有损坏的依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apt-get update  # 更新源
apt-get install packagename # 安装一个新软件包
apt-get remove packagename # 卸载一个已安装的软件包(保留配置文件)
apt-get –purge remove packagename # 卸载一个已安装的软件包(删除配置文件)
apt-get autoclean apt # 把已装或已卸的软件都备份在硬盘上,删除你已经删掉的软件
apt-get clean # 把安装的软件的备份也删除
apt-get upgrade # 更新所有已安装的软件包
apt-get dist-upgrade # 将系统升级到新版本
apt-get autoclean # 定期运行这个命令来清除那些已经卸载的软件包的.deb文件
apt-get install package --reinstall # 重新安装包
apt-get -f install # 修复安装
apt-get build-dep package # 安装相关的编译环境
apt-get source package # 下载该包的源代码
apt-get check # 检查是否有损坏的依赖
apt-cache search package # 搜索软件包
apt-cache show package # 获取包的相关信息,如说明、大小、版本等
apt-cache depends package # 了解使用该包依赖那些包
apt-cache rdepends package #查看该包被哪些包依赖

(2)国内apt-get源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#1.原文件重命名备份
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak

#2.编辑源列表文件
sudo vim /etc/apt/sources.list

#3.用下面文本做内容
#deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
#deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
#deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
#deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
# ##测试版源
#deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
# #源码
#deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
# ##测试版源
#deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
# #Canonical 合作伙伴和附加
#deb http://archive.canonical.com/ubuntu/ xenial partner
#deb http://extras.ubuntu.com/ubuntu/ xenial main

#4.更新
sudo apt-get update
sudo apt-get upgrade

十二、网络管理

1、ping测试网络状况
ping [选项] 目的主机

  • -d:使用Socket的SO_DEBUG功能;
  • -c<完成次数>:设置完成要求回应的次数
  • -f:极限检测
  • -i<间隔秒数>:指定收发信息的间隔时间
  • -I<网络界面>:使用指定的网络界面送出数据包
  • -l<前置载入>:设置在送出要求信息之前,先行发出的数据包
  • -n:只输出数值
  • -p<范本样式>:设置填满数据包的范本样式
  • -q:不显示指令执行过程,开头和结尾的相关信息除外
  • -r:忽略普通的Routing Table,直接将数据包送到远端主机上
  • -R:记录路由过程
  • -s<数据包大小>:设置数据包的大小
  • -t<存活数值>:设置存活数值TTL的大小
  • -v:详细显示指令的执行过程
1
ping www.baidu.com

2、nslookup查询DNS信息
nslookup [选项] 域名

  • -sil:不显示任何警告信息
1
2
3
4
5
6
7
8
[root@www~]# nslookup www.baidu.com
Server: 192.168.226.2
Address: 192.168.226.2#53

Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 115.239.211.112

3、ifconfig查看与临时配置网络
ifconfig [参数]

  • add<地址>:设置网络设备IPv6的ip地址;
  • del<地址>:删除网络设备IPv6的IP地址;
  • down:关闭指定的网络设备;
  • <硬件地址>:设置网络设备的类型与硬件地址;
  • io_addr:设置网络设备的I/O地址;
  • irq:设置网络设备的IRQ;
  • media<网络媒介类型>:设置网络设备的媒介类型;
  • mem_start<内存地址>:设置网络设备在主内存所占用的起始地址;
  • metric<数目>:指定在计算数据包的转送次数时,所要加上的数目;
  • mtu<字节>:设置网络设备的MTU;
  • netmask<子网掩码>:设置网络设备的子网掩码;
  • tunnel<地址>:建立IPv4与IPv6之间的隧道通信地址;
  • up:启动指定的网络设备;
  • -broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理;
  • -pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能;
  • -promisc:关闭或启动指定网络设备的promiscuous模式;
  • IP地址:指定网络设备的IP地址;
  • 网络设备:指定网络设备的名称。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@www~]# ifconfig
# eth0表示第一块网卡,inet addr用来表示网卡的IP地址
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB)
# lo是表示主机的回环地址
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)

# 启动关闭指定网卡
ifconfig eth0 up #还有其他命令实现ifup eth0
ifconfig eth0 down #还有其他命令实现ifdown eth0

# 配置IP地址
[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255

5、service network启动关闭网络服务

1
2
3
4
service network start #启动网络服务
service network stop #关闭网络服务
service network restart #重启网络服务
service network status #查看状态

6、修改主机名

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1、临时生效
hostname test

# 2、启动后生效
vi /etc/sysconfig/network

# 修改文件内容:
# NETWORKING=yes
# NETWORKING_IPV6=no
# NETWORKING_IPV4=yes
# HOSTNAME=localhost.localdomain # 主机名定义,将localhost改成你对应的主机名,如test
# DOMAINNAME=localdomain
# GATEWAY=192.168.0.1

7、设置IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1、临时生效
ifconfig eth0 192.168.0.20 netmask 255.255.255.0

# 2、启动后生效
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #centos、redhead用
vi /etc/network/interfaces #debian、ubuntu用

# 修改文件内容:
# DEVICE=eth0
# BOOTPROTO=static #动态IP需设置为dhcp
# HWADDR=00:0C:29:97:E2:45
# ONBOOT=yes
# TYPE=ethernet
# NETMASK=255.255.255.0
# IPADDR=192.168.0.1
# GATEWAY=192.168.0.1
# BROADCAST=192.168.0.255

8、修改DNS

1
2
3
4
5
6

vi /etc/resolv.conf #dhcp环境下修改/etc/resolv.conf后,重启网卡,会自动清除;添加到/etc/sysconfig/network-scripts/ifcfg-eth0的dns地址不会清除;

# 修改文件内容:
# nameserver 202.96.128.68 # 主
# nameserver 219.136.241.206 # 备

9、防火墙开启关闭

1
2
3
4
5
service iptables start #防火墙开启
service iptables stop #防火墙关闭

#设置首启项
ntsysv

十三、日期时间

1、cal显示日历信息
cal [选项] [月份] [年份]

  • -l:显示单月输出
  • -3:显示临近三个月的日历
  • -s:将星期日作为月的第一天
  • -m:将星期一作为月的第一天
  • -j:显示“julian”日期
  • -y:显示当前年的日历
1
2
cal -3
cal 9 2017

2、date显示或设置系统时间与日期
date [选项] <+时间日期格式>

  • -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
  • -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
  • -u:显示GMT;
  • –help:在线帮助;
  • –version:显示版本信息。

日期格式字符串列表:

  • %H 小时,24小时制(00~23)
  • %I 小时,12小时制(01~12)
  • %k 小时,24小时制(0~23)
  • %l 小时,12小时制(1~12)
  • %M 分钟(00~59)
  • %p 显示出AM或PM
  • %r 显示时间,12小时制(hh:mm:ss %p)
  • %s 从1970年1月1日00:00:00到目前经历的秒数
  • %S 显示秒(00~59)
  • %T 显示时间,24小时制(hh:mm:ss)
  • %X 显示时间的格式(%H:%M:%S)
  • %Z 显示时区,日期域(CST)
  • %a 星期的简称(Sun~Sat)
  • %A 星期的全称(Sunday~Saturday)
  • %h,%b 月的简称(Jan~Dec)
  • %B 月的全称(January~December)
  • %c 日期和时间(Tue Nov 20 14:12:58 2012)
  • %d 一个月的第几天(01~31)
  • %x,%D 日期(mm/dd/yy)
  • %j 一年的第几天(001~366)
  • %m 月份(01~12)
  • %w 一个星期的第几天(0代表星期天)
  • %W 一年的第几个星期(00~53,星期一为第一天)
  • %y 年的最后两个数字(1999则是99)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
date +"%Y-%m-%d" # 格式化输出:2007-12-07
date -d "1 day ago" +"%Y-%m-%d" # 输出昨天日期:2012-11-19
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S" # 1234567890 秒:2009-02-13 23:02:30
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S" # 普通转格式:2009/12/12 00:00.00
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S" # 格式转换后时间游走:2007-12-05 00:00.37

# 加减操作:
date +%Y%m%d # 显示前天年月日
date -d "+1 day" +%Y%m%d # 显示前一天的日期
date -d "-1 day" +%Y%m%d # 显示后一天的日期
date -d "-1 month" +%Y%m%d # 显示上一月的日期
date -d "+1 month" +%Y%m%d # 显示下一月的日期
date -d "-1 year" +%Y%m%d # 显示前一年的日期
date -d "+1 year" +%Y%m%d # 显示下一年的日期

# 设定时间:
date -s # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523 # 设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
date -s "01:01:01 20120523" # 这样可以设置全部时间
date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
date -s "20120523 01:01:01" # 这样可以设置全部时间

十四、帮助文档

1、whatis查询一个命令执行什么功能
whatis Command

1
2
3
4
5
[root@localhost ~]# whatis chown
chown (1) - change file owner and group
chown (1p) - change the file ownership
chown (2) - change ownership of a file
chown (3p) - change owner and group of a file

2、man帮助指令
man [选项] [数字] Command

  • -a:在所有的man帮助手册中搜索
  • -f:等价于whatis指令,显示给定关键字的简短描述信息
  • -P:指定内容时使用分页程序
  • -M:指定man手册搜索的路径
  • 数字:指定从哪本man手册中搜索帮助
1
2
man sleep
man 3 sleep

3、help显示shell内部命令的帮助信息
help [选项] Command

  • -s:输出短格式的帮助信息。仅包括命令格式。
1
help cd

4、–help/-h显示shell外部命令帮助信息
Command –help/-h

1
ls --help

十五、vi/vim编辑器

所有的Unix Like系统都会内建vi文本编辑器,vim是从vi发展出来的一个文本编辑器。
vim官方网站:http://www.vim.org

1、vi/vim键盘图
vi-vim键盘图

2、vi/vim工作模式
vi/vim分为三种工作模式:命令模式(Command mode)、输入模式(Insert mode)、底线命令模式(Last line mode)。
vi-vim工作模式

(1)命令模式:
用户刚刚启动vi/vim便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。
常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

(2)输入模式
在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

(3)底线命令模式
在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件
  • 按ESC键可随时退出底线命令模式。

3、vi/vim按键说明
(1)一般模式可用的光标移动、复制粘贴、搜索替换等:
1)移动光标的方法:

  • h 或 向左箭头键(←):光标向左移动一个字符
  • j 或 向下箭头键(↓):光标向下移动一个字符
  • k 或 向上箭头键(↑):光标向上移动一个字符
  • l 或 向右箭头键(→):光标向右移动一个字符
  • [Ctrl] + [f]:屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
  • [Ctrl] + [b]:屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
  • [Ctrl] + [d]:屏幕『向下』移动半页
  • [Ctrl] + [u]:屏幕『向上』移动半页
  • +:光标移动到非空格符的下一行
  • -:光标移动到非空格符的上一行
  • n:那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
  • 0 或功能键[Home]:这是数字『 0 』:移动到这一行的最前面字符处 (常用)
  • $ 或功能键[End]:移动到这一行的最后面字符处(常用)
  • H:光标移动到这个屏幕的最上方那一行的第一个字符
  • M:光标移动到这个屏幕的中央那一行的第一个字符
  • L:光标移动到这个屏幕的最下方那一行的第一个字符
  • G:移动到这个档案的最后一行(常用)
  • nG:n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
  • gg:移动到这个档案的第一行,相当于 1G 啊! (常用)
  • n:n 为数字。光标向下移动 n 行(常用)

2)搜索替换:

  • /word:向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
  • ?word:向光标之上寻找一个字符串名称为 word 的字符串。
  • n:这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
  • N:这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
  • :n1,n2s/word1/word2/g:n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用)
  • :1,$s/word1/word2/g:从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
  • :1,$s/word1/word2/gc:从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

3)删除、复制与贴上:

  • x, X:在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
  • nx:n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
  • dd:删除游标所在的那一整行(常用)
  • ndd:n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
  • d1G:删除光标所在到第一行的所有数据
  • dG:删除光标所在到最后一行的所有数据
  • d$:删除游标所在处,到该行的最后一个字符
  • d0:那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
  • yy:复制游标所在的那一行(常用)
  • nyy:n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
  • y1G:复制游标所在行到第一行的所有数据
  • yG:复制游标所在行到最后一行的所有数据
  • y0:复制光标所在的那个字符到该行行首的所有数据
  • y$:复制光标所在的那个字符到该行行尾的所有数据
  • p, P:p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
  • J:将光标所在行与下一行的数据结合成同一行
  • c:重复删除多个数据,例如向下删除 10 行,[ 10cj ]
  • u;复原前一个动作。(常用)
  • [Ctrl]+r:重做上一个动作。(常用)
  • .:不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

(2)一般模式切换到编辑模式的可用的按钮说明:
1)进入输入或取代的编辑模式:

  • i, I:进入输入模式(Insert mode):i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
  • a, A:进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
  • o, O:进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
  • r, R:进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
  • [Esc]:退出编辑模式,回到一般模式中(常用)

(3)一般模式切换到指令行模式的可用的按钮说明:
1)指令行的储存、离开等指令:

  • :w —— 将编辑的数据写入硬盘档案中(常用)
  • :w! —— 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
  • :q —— 离开 vi (常用)
  • :q! —— 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
  • :wq —— 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
  • ZZ —— 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
  • :w [filename] —— 将编辑的数据储存成另一个档案(类似另存新档)
  • :r [filename] —— 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
  • :n1,n2 w [filename] —— 将 n1 到 n2 的内容储存成 filename 这个档案。
  • :! command —— 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
    2)vim 环境的变更:
  • :set nu —— 显示行号,设定之后,会在每一行的前缀显示该行的行号
  • :set nonu —— 与 set nu 相反,为取消行号!

PS特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

十六、shell编程

1、shell简介
(1)shell分类:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

(2)hello world

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

1
2
#!/bin/bash
echo "Hello World !"

(3)运行shell脚本
将上面的代码保存为test.sh,并cd到相应目录:
1)作为可执行程序:

1
2
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh #执行脚本

2)作为解释器参数:
直接运行解释器,其参数就是shell脚本的文件名:

1
2
/bin/sh test.sh
/bin/php test.php

2、shell关键字
常用的关键字如下:

  • echo:打印文字到屏幕
  • printf:格式化输出字符串
  • exec:执行另一个Shell脚本
  • read:读标准输入
  • expr:对整数型变量进行算术运算
  • test:用于测试变量是否相等、 是否为空、文件类型等
  • exit:退出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
echo "It is a test" # 显示普通字符串
echo "\"It is a test\"" # 显示转义字符
read name # 读取标准输入
echo "$name It is a test" # 显示变量
echo -e "OK! \n" # -e开启转义 \n换行
echo -e "OK! \c" # -e开启转义 \c不换行
echo '$name\"' # 原样输出字符串,不进行转义或取变量(用单引号)
echo `date` # 显示命令执行结果,这里使用的是反引号 `, 而不是单引号 '

printf "Hello, Shell\n" # printf换行需要手动加\n
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 #格式化输出,%d十进制整数、 %s字符串、 %c字符、 %f浮点

exec ./othershell.sh # 执行其他脚本

expr $VAR - 5 # 计算变量运算

#数值测试
test $[num1] -eq $[num2] # -eq 等于则为真
test $[num1] -ne $[num2] # -ne 不等于则为真
test $[num1] -gt $[num2] # -gt 大于则为真
test $[num1] -ge $[num2] # -ge 大于等于则为真
test $[num1] -lt $[num2] # -lt 小于则为真
test $[num1] -le $[num2] # -le 小于等于则为真
#字符串测试
test $str1 = $str2 # = 等于则为真
test $str1 != $str2 # != 不相等则为真
test -z $str1 # -z 字符串 字符串的长度为零则为真
test -n $str2 # -n 字符串 字符串的长度不为零则为真
#文件测试
test -e ./bash # -e 文件名 如果文件存在则为真
test -r ./bash # -r 文件名 如果文件存在且可读则为真
test -w ./bash # -w 文件名 如果文件存在且可写则为真
test -x ./bash # -x 文件名 如果文件存在且可执行则为真
test -s ./bash # -s 文件名 如果文件存在且至少有一个字符则为真
test -d ./bash # -d 文件名 如果文件存在且为目录则为真
test -f ./bash # -f 文件名 如果文件存在且为普通文件则为真
test -c ./bash # -c 文件名 如果文件存在且为字符型特殊文件则为真
test -b ./bash # -b 文件名 如果文件存在且为块特殊文件则为真
#Shell提供了( 与-a )、( 或-o )、( 非! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低
test -e ./notFile -o -e ./bash

3、shell变量
(1)定义变量

  • 只能使用英文字母,数字和下划线,首字符不能以数字开头
  • 中间不能有空格,可以使用下划线_
  • 等号前后不要有空格:NUM=10
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

(2)使用变量
在变量名前面加美元$符号即可:echo $VARecho ${VAR}

(3)自定义变量
常见前缀:

  • unset:删除变量
  • readonly:标记只读变量
  • export:指定全局变量
  • local:指定本地变量
1
2
3
4
5
6
7
8
9
10
CITY=SHENZHEN # 定义普通变量
export NAME=cdeveloper # 定义全局变量
readonly AGE=21 # 定义只读变量

# 打印变量的值
echo $CITY
echo $NAME
echo $AGE

unset CITY # 删除 CITY 变量

(4)位置变量

1
2
3
4
5
6
7
8
9
10
11
12
[root@www~]# cat test.sh
#!/bin/bash
echo $0
echo $2
echo $1

[root@www~]# ./test.sh arg0 arg1
./test.sh
arg1
arg0

#执行脚本传入变量,可以看到:$0 表示脚本名称、$1 表示第一个参数、$2 表示第二个参数

(5)预定义变量
预定义变量常用来获取命令行的输入:

  • $0 :脚本文件名
  • $1-9 :第 1-9 个命令行参数名
  • $# :命令行参数个数
  • $@ :所有命令行参数
  • $* :所有命令行参数
  • $? :前一个命令的退出状态,可用于获取函数返回值
  • $$ :执行的进程 ID

(6)环境变量
环境变量默认就存在,常用的有:

  • HOME:用户主目录
  • PATH:系统环境变量 PATH
  • TERM:当前终端
  • UID:当前用户 ID
  • PWD:当前工作目录,绝对路径

4、shell字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。
(1)单引号和双引号

  • 单引号里的任何字符都会原样输出
  • 单引号字符串中的变量是无效的
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
  • 双引号里可以有变量
  • 双引号里可以出现转义字符
1
2
your_name='www'
str="Hello, I know your are \"$your_name\"! \n"

(2)字符串拼接

1
2
3
4
your_name="www"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

(3)获取字符串长度

1
2
string="abcd"
echo ${#string} #输出 4

(4)提取子字符串

1
2
string="hello world"
echo ${string:1:4} # 输出 ello

(5)查找子字符串

1
2
string="tester is a good friend"
echo `expr index "$string" is` # 输出 8

5、shell数组
(1)定义数组
用括号来表示数组,数组元素用”空格”符号分割开

1
2
3
4
5
6
7
8
9
10
11
12
13
array_name=(value0 value1 value2 value3)

array_name=(
value0
value1
value2
value3
)

#单独定义数组的各个分量
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

(2)读取数组
${数组名[下标]}

1
2
3
valuen=${array_name[n]}
echo ${array_name[@]} # 使用@符号可以获取数组中的所有元素
echo ${array_name[*]} # 使用*符号可以获取数组中的所有元素

(3)获取数组的长度

1
2
3
4
5
6
# 取得数组元素的个数
length=${#array_name[@]}
length=${#array_name[*]}

# 取得数组单个元素的长度
lengthn=${#array_name[n]}

6、shell运算符
原生bash不支持简单的数学运算,但是可以通过其他命令(awk和expr等)来实现,其中expr最常用。
(1)算术运算符

运算符 说明 举例
+ 加法 expr $a + $b 结果为 30。
- 减法 expr $a - $b 结果为 -10。
* 乘法。乘号*前边必须加反斜杠\才能实现乘法运算。 expr $a * $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

(2)数字关系运算符

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

(3)布尔运算符

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

(4)逻辑运算符

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

(5)字符串运算符

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

(6)文件测试运算符

运算符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

7、shell流程控制
(1)if语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# if语法格式
if condition
then
command1
command2
...
commandN
fi

# if else语法格式
if condition
then
command1
command2
...
commandN
else
command
fi

# if else-if elseelse语法格式
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi

#实例
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi

(2)for 循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# for循环一般格式
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

# 顺序输出当前列表中的数字
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done

# 普通for循环
for ((i = 1; i <= 3; i++))
do
echo $i
done

# 无限循环
for (( ; ; ))

(3)while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# while循环一般格式
while condition
do
command
done

# 实例
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done

# 无限循环
while : # 或while true
do
command
done

(4)until循环
until 循环执行一系列命令直至条件为 true 时停止。

1
2
3
4
5
6
7
8
9
10
11
12
13
# until语法格式
until condition
do
command
done

#实例
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done

(5)case语句
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# case语句格式
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac

# 实例
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac

(6)break命令
break命令允许跳出所有循环。

1
2
3
4
5
6
7
8
9
10
11
#实例
for VAR in 1 2 3
do
# 如果VAR等于2就跳出循环
if [ $VAR -eq 2 ]
then
break
fi

echo $VAR
done

(7)continue命令
continue命令仅仅跳出当前循环。

1
2
3
4
5
6
7
8
9
10
11
# 实例
for VAR in 1 2 3
do
# 如果VAR等于2,就跳过,直接进入下一次VAR = 3的循环
if [ $VAR -eq 2 ]
then
continue
fi

echo $VAR
done

8、shell函数
(1)定义函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 定义函数,[]表示可加可不加
[ function ] funname [()]

{

action;

[return int;]

}

# 实例
function hello_world()
{
echo "hello world fun"
echo $1 $2 ${10} # 注意:当n>=10时,需要使用${n}来获取参数。
return 1
}

(2)调用函数

1
2
3
4
5
6
7
8
9
# 直接用函数名调用
hello_world

# 使用「函数名 函数参数」来传递参数
hello_world 1 2 3 4 5 6 7 8 9 10

# 使用「FUN=`函数名 函数参数`」 来间接调用
FUN=`hello_world 1 2 3 4 5 6 7 8 9 10`
echo $FUN

(3)获取返回值

1
2
hello_world 1 2 3 4 5 6 7 8 9 10
echo $? # $? 可用于获取前一个函数的返回值,这里结果是 1

9、shell文件包含
shell也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
shell文件包含的语法格式:

  • . filename # 注意点号(.)和文件名中间有一空格
  • source filename
1
2
3
4
5
6
7
8
9
10
11
12
# test1.sh代码
#!/bin/bash
url="http://www.baidu.com"

# test2.sh代码
#!/bin/bash
. ./test1.sh # 或者使用source ./test1.sh
echo "百度地址:$url"

# 为test2.sh添加可执行权限并执行
$ chmod +x test2.sh
$ ./test2.sh

10、shell重定向
(1)输入/输出重定向
重定向命令列表:

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
1
2
3
4
5
6
7
command1 > file1 # 输出重定向      
command1 < file1 # 输入重定向
command 2 > file # stderr重定向到file
command 2 >> file # stderr追加到file文件末尾
command > file 2>&1 # stdout和stderr合并后重定向到 file
command >> file 2>&1 # stdout和stderr合并后重定向到 file
command < file1 >file2 # 对stdin和stdout都重定向

(2)Here Document
Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

1
2
3
4
5
6
7
8
9
10
# 基本的形式如下,作用是将两个delimiter之间的内容(document)作为输入传递给command:
command << delimiter
document
delimiter

# 实例
#!/bin/bash
cat << EOF
hello world
EOF

(3)/dev/null文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
$ command > /dev/null
/dev/null是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。

1
2
# 屏蔽stdout和stderr
$ command > /dev/null 2>&1

持续更新…

最后更新: 2018年11月04日 17:23

原始链接: http://pythonfood.github.io/2017/12/29/linux/

× 多少都行~
打赏二维码