Skip to content

Linux 命令大全

1: Linux 目录结构

1.1:基本介绍

linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录/,然后在此目录下再创建其他的目录。
在 Linux 世界里,一切皆文件。

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

1.2:Linux 具体目录结构

● /lib
系统开机所需要最基本的动态链接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
● /lost+found
一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
● /etc [重点]
所有系统管理所需要的配置文件和子目录。my.conf
● /usr
用户的很多应用程序和文件都放在这个目录下。类似于 Windows 下的 program.files 目录
● /bin (usr/bin、/usr/local/bin) [usr:Unix System Resource,即Unix系统资源的缩写]
是 Binary 的缩写,这个目录存放着经常使用的命令
● /sbin (usr/sbin、/usr/local/sbin)
s 就是 per user 的意思,这里存放的是系统管理员使用的系统管理程序
● /home [重点]
存放普通用户的主目录,在 Linux 中的每个用户都有一个自己的目录,一般该目录一用户的账号名命名
● /root [重点]
该目录为系统管理员,超级权限者的用户目录
● /boot
存放的启动 Linux 时使用的一些核心文件,包括一些链接文件和镜像文件
● /proc
虚拟目录,是系统内存的映射,访问这个目录来获取系统信息。
● /srv
service 的缩写,该目录是存放一些服务启动之后需要提取的数据
● /sys
Linux2.6 内核的一个很大变化,该目录安装了 2.6 内核中新出现的一个文件系统
● /tmp
存放临时文件
● /dev
类似于 windows 的设备管理器,把所有的硬件用文件的形式存储
● /media [重点]
Linux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
● /mnt [重点]
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。d:/ myshare
● /opt
这是给主机额外安装软件所摆放的目录。如安装 ORACLE 数据库就可放到该目录下。默认为空。
● /usr/local [重点]
这是另个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
● /var [重点]
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
● /selinux [security-enhanced linux] 类似 360
Selinux 是一种安全子系统,它能控制程序只能访同特定文件。


2: Linux 常用命令

2.1:目录处理命令

2.1.1  命令格式

命令格式 :命令 [-选项] [参数]
例 : ls -la /etc
说明:

  1. 个别命令使用不遵循此格式
  2. 当有多个选项时,可以写在一起
  3. 简化选项与完整选项-a 等于 --all

2.1.2 列出目录的内容:ls 命令

命令名称:ls
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls  选项[-ald]  [文件或目录]
-a    显示所有文件,包括隐藏文件
-l     详细信息显示
-d    查看目录属性
命令名称:ls
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls  选项[-ald]  [文件或目录]
-a    显示所有文件,包括隐藏文件
-l     详细信息显示
-d    查看目录属性

当使用 ls -l 会显示文件的详细信息,包含权限信息:

-rw-r--r--
- 文件类型(- 文件 d 目录 l 软链接文件)
rw- r-- r--
u g o
u所有者 g所属组 o其他人
r读 w写 x执行
-rw-r--r--
- 文件类型(- 文件 d 目录 l 软链接文件)
rw- r-- r--
u g o
u所有者 g所属组 o其他人
r读 w写 x执行

2.1.3 创建目录:mkdir 命令

命令名称:mkdir

命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p  [目录名]
功能描述:创建新目录-p  递归创建

范例: $mkdir -p /tmp/zhang/test
       $mkdir /tmp/zhang/test1 /tmp/zhang/test2
命令名称:mkdir

命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p  [目录名]
功能描述:创建新目录-p  递归创建

范例: $mkdir -p /tmp/zhang/test
       $mkdir /tmp/zhang/test1 /tmp/zhang/test2

2.1.4 切换工作目录:cd 命令

命令名称:cd

命令所在路径:shell内置
命令执行权限:所有用户
语法:cd [目录]
功能描述:切换目录

范例: $cd  /tmp/zhang/test1     切换到指定目录
      $cd  ..        回到上一级目录
命令名称:cd

命令所在路径:shell内置
命令执行权限:所有用户
语法:cd [目录]
功能描述:切换目录

范例: $cd  /tmp/zhang/test1     切换到指定目录
      $cd  ..        回到上一级目录

2.1.5 显示当前路径:pwd 命令

命令名称:pwd

命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录

范例:$pwd

显示结果:/tmp/zhang
命令名称:pwd

命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录

范例:$pwd

显示结果:/tmp/zhang

2.1.6 删除空目录: rmdir 命令

命令名称:rmdir

命令所在路径:/bin/rmdir
执行权限:所有用户
语法:rmdir [目录名]
功能描述: 删除空目录

范例: $rmdir /tmp/zhang/test
命令名称:rmdir

命令所在路径:/bin/rmdir
执行权限:所有用户
语法:rmdir [目录名]
功能描述: 删除空目录

范例: $rmdir /tmp/zhang/test

2.1.7 拷贝文件:cp 命令

命令名称:cp

命令所在路径:/bin/cp
执行权限:所有用户
语法:cp  -rp  [原文件或目录] [目标目录]
-r  复制目录
-p  保留文件属性
功能描述:复制文件或目录

范例:$cp  -r /tmp/zhang/test1  /root
将目录/tmp/zhang/test1复制到目录/root下
$cp  -rp /tmp/zhang/test2 /tmp/zhang/test2 /root
将/tmp/zhang目录下的test1和test2目录复制到/root下,保持目录属性
命令名称:cp

命令所在路径:/bin/cp
执行权限:所有用户
语法:cp  -rp  [原文件或目录] [目标目录]
-r  复制目录
-p  保留文件属性
功能描述:复制文件或目录

范例:$cp  -r /tmp/zhang/test1  /root
将目录/tmp/zhang/test1复制到目录/root下
$cp  -rp /tmp/zhang/test2 /tmp/zhang/test2 /root
将/tmp/zhang目录下的test1和test2目录复制到/root下,保持目录属性

2.1.8 删除文件:rm 命令

命令名称:rm

命令所在路径:/bin/rm
执行权限:所有用户
语法:rm  -rf   [文件或目录]
-r  删除目录
-f  强制执行
功能描述:删除文件

范例:$rm  /tmp/yum.log
删除文件/tmp/yum.log
$rm -rf  /tmp/zhang/test2
删除目录/tmp/zhang/test2
命令名称:rm

命令所在路径:/bin/rm
执行权限:所有用户
语法:rm  -rf   [文件或目录]
-r  删除目录
-f  强制执行
功能描述:删除文件

范例:$rm  /tmp/yum.log
删除文件/tmp/yum.log
$rm -rf  /tmp/zhang/test2
删除目录/tmp/zhang/test2

2.2:文件处理命令

2.2.1 创建文件:touch 命令

命令名称:touch

命令所在路径:/bin/touch
执行权限:所有用户
语法:touch  [文件名]
功能描述:创建空文件

范例:$touch test
命令名称:touch

命令所在路径:/bin/touch
执行权限:所有用户
语法:touch  [文件名]
功能描述:创建空文件

范例:$touch test

2.2.2 显示文件内容:cat 命令

命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
功能描述:显示文件内容
-n  显示行号

范例:$cat  /etc/issue              $cat  -n /etc/services
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
功能描述:显示文件内容
-n  显示行号

范例:$cat  /etc/issue              $cat  -n /etc/services

2.2.3 分屏显示:more 命令

命令名称:more

命令所在路径:/bin/more
执行权限:所有用户
语法:more  [文件名]
(空格) 或f           翻页
(Enter)             换行
q或Q                退出
功能描述:分页显示文件内容

范例:
$ more  /etc/services
命令名称:more

命令所在路径:/bin/more
执行权限:所有用户
语法:more  [文件名]
(空格) 或f           翻页
(Enter)             换行
q或Q                退出
功能描述:分页显示文件内容

范例:
$ more  /etc/services

2.2.4 分屏显示:less 命令

命令名称:less

命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less  [文件名]
功能描述:分页显示文件内容(可向上翻页)

范例:
$  less  /etc/services
tips: 按下 / 后可以搜索 会反显高亮  按q退出(more也可以)
命令名称:less

命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less  [文件名]
功能描述:分页显示文件内容(可向上翻页)

范例:
$  less  /etc/services
tips: 按下 / 后可以搜索 会反显高亮  按q退出(more也可以)

2.2.5 取首 n 行:head 命令

命令名称:head

命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head  [文件名]
功能描述:显示文件前面几行
-n 指定行数

范例:$head -n 20 /etc/services
命令名称:head

命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head  [文件名]
功能描述:显示文件前面几行
-n 指定行数

范例:$head -n 20 /etc/services

2.2.6 取尾 n 行:tail 命令

命令名称:tail

命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail  [文件名]
功能描述:显示文件后面几行
-n 指定行数
-f  动态显示文件末尾内容

范例:$tail -n 18 /etc/services
命令名称:tail

命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail  [文件名]
功能描述:显示文件后面几行
-n 指定行数
-f  动态显示文件末尾内容

范例:$tail -n 18 /etc/services

2.3 链接命令

2.3.1 建立链接文件:ln 命令

命令名称:ln

命令所在路径:/bin/ln
执行权限:所有用户
语法:ln  -s  [原文件]  [目标文件]
 -s  创建软链接
功能描述:生成链接文件

范例:$ln -s  /etc/issue  /tmp/issue.soft
创建文件/etc/issue的软链接/tmp/issue.soft
$ln  /etc/issue  /tmp/issue.hard
创建文件/etc/issue的硬链接/tmp/issue.hard
命令名称:ln

命令所在路径:/bin/ln
执行权限:所有用户
语法:ln  -s  [原文件]  [目标文件]
 -s  创建软链接
功能描述:生成链接文件

范例:$ln -s  /etc/issue  /tmp/issue.soft
创建文件/etc/issue的软链接/tmp/issue.soft
$ln  /etc/issue  /tmp/issue.hard
创建文件/etc/issue的硬链接/tmp/issue.hard

软链接特征:类似 Windows 快捷方式 1、lrwxrwxrwx l 软链接 软链接文件权限都为 rwxrwxrwx 2、文件大小-只是符号链接 3、/tmp/issue.soft -> /etc/issue 箭头指向原文件 硬链接特征: 1、拷贝 cp -p + 同步更新 2、可通过 i 节点识别 3、不能跨分区 4、不能针对目录使用

2.4 权限管理命令

2.4.1 修改文件权限:chmod 命令

命令名称:chmod

命令所在路径:/bin/chmod
执行权限:所有用户
语法:chmod  [{ugoa}{+-=}{rwx}] [文件或目录]
[mode=421 ]  [文件或目录]
-R  递归修改
功能描述:改变文件或目录权限
权限的数字表示
r  ---- 4      w ---- 2      x  ---- 1
rwxrw-r--    7   6    4

范例:$chmod  g+w  testfile
赋予文件testfile所属组写权限
$chmod  -R 777  testdir
修改目录testfile及其目录下文件为所有用户具有全部权限
命令名称:chmod

命令所在路径:/bin/chmod
执行权限:所有用户
语法:chmod  [{ugoa}{+-=}{rwx}] [文件或目录]
[mode=421 ]  [文件或目录]
-R  递归修改
功能描述:改变文件或目录权限
权限的数字表示
r  ---- 4      w ---- 2      x  ---- 1
rwxrw-r--    7   6    4

范例:$chmod  g+w  testfile
赋予文件testfile所属组写权限
$chmod  -R 777  testdir
修改目录testfile及其目录下文件为所有用户具有全部权限

rwx 权限的解释:

表头表头表头表头
字符权限对文件的含义对目录的含义
r读权限可以查看文件内容可以列出目录中的内容
w写权限可以修改文件内容可以在目录中创建、删除文件
x执行权限可以执行文件可以进入目录

2.4.2 修改文件所有者:chown 命令

命令名称:chown

命令所在路径:/bin/chown
执行权限:所有用户
语法:chown  [用户] [文件或目录]
功能描述:改变文件或目录的所有者

范例:$chown  zhang  test
改变文件
test的所有者为zhang
命令名称:chown

命令所在路径:/bin/chown
执行权限:所有用户
语法:chown  [用户] [文件或目录]
功能描述:改变文件或目录的所有者

范例:$chown  zhang  test
改变文件
test的所有者为zhang

2.4.3 修改文件所属组:chgrp 命令

命令名称:chgrp

命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户组] [文件或目录]
功能描述:改变文件或目录的所属组

范例:$chgrp group01 text01
改变文件text01的所属组为group01
命令名称:chgrp

命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户组] [文件或目录]
功能描述:改变文件或目录的所属组

范例:$chgrp group01 text01
改变文件text01的所属组为group01

2.4.4 默认权限:umask 命令

命令名称:umask

命令所在路径:Shell内置命令
执行权限:所有用户
语法:umask [-S]
-S   以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限

范例:$umask -S
tips: 新建文件是默认没有x权限(比如:防止木马病毒攻击)
命令名称:umask

命令所在路径:Shell内置命令
执行权限:所有用户
语法:umask [-S]
-S   以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限

范例:$umask -S
tips: 新建文件是默认没有x权限(比如:防止木马病毒攻击)

2.5 文件搜索命令

2.5.1 查找文件:find 命令

命令名称:find

命令所在路径:/bin/find
执行权限:所有用户
语法:find  [搜索范围]  [匹配条件]
功能描述:文件搜索

范例:
$ find  /etc  -name  init
在目录/etc中查找文件init
-iname 不区分大小写
$ find /etc -name *init*
在目录/etc中查找文件名包含init
$ find /etc -name init???
在目录/etc中查找文件名init开头并有3个字符的
$ find /etc -name init*
在目录/etc中查找文件名init开头的
tips:* 匹配任意字符,?匹配单个字符
$ find  /  -size  +204800
在根目录下查找大于100MB的文件
+n  大于   -n 小于   n 等于
$ find  /home  -user  shenchao
在根目录下查找所有者为shenchao的文件
 -group  根据所属组查找
$ find  /etc  -cmin  -5
在/etc下查找5分钟内被修改过属性的文件和目录
-amin  访问时间 access
-cmin  文件属性 change
-mmin 文件内容 modify

$ find  /etc -size  +163840 -a -size  -204800
在/etc下查找大于80MB小于100MB的文件
-a 两个条件同时满足
-o 两个条件满足任意一个即可
$ find /etc -name inittab -exec ls -l {} \;
在/etc下查找inittab文件并显示其详细信息
-exec/-ok 命令 {} \\;  对搜索结果执行操作
tips:-exec直接执行,ok会询问操作

-type 根据文件类型查找
f 文件    d 目录    l 软链
-inum  根据i节点查找
命令名称:find

命令所在路径:/bin/find
执行权限:所有用户
语法:find  [搜索范围]  [匹配条件]
功能描述:文件搜索

范例:
$ find  /etc  -name  init
在目录/etc中查找文件init
-iname 不区分大小写
$ find /etc -name *init*
在目录/etc中查找文件名包含init
$ find /etc -name init???
在目录/etc中查找文件名init开头并有3个字符的
$ find /etc -name init*
在目录/etc中查找文件名init开头的
tips:* 匹配任意字符,?匹配单个字符
$ find  /  -size  +204800
在根目录下查找大于100MB的文件
+n  大于   -n 小于   n 等于
$ find  /home  -user  shenchao
在根目录下查找所有者为shenchao的文件
 -group  根据所属组查找
$ find  /etc  -cmin  -5
在/etc下查找5分钟内被修改过属性的文件和目录
-amin  访问时间 access
-cmin  文件属性 change
-mmin 文件内容 modify

$ find  /etc -size  +163840 -a -size  -204800
在/etc下查找大于80MB小于100MB的文件
-a 两个条件同时满足
-o 两个条件满足任意一个即可
$ find /etc -name inittab -exec ls -l {} \;
在/etc下查找inittab文件并显示其详细信息
-exec/-ok 命令 {} \\;  对搜索结果执行操作
tips:-exec直接执行,ok会询问操作

-type 根据文件类型查找
f 文件    d 目录    l 软链
-inum  根据i节点查找

2.5.2 文件资料库查找:locate 命令

命令名称:locate

命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate  文件名
功能描述:在文件资料库中查找文件

范例:
$ locate inittab
tips:新建文件locate不到,可以updatedb,更新文件资料库后查找[tmp不在文件资料库内]
$  locate -i text01 // -i 作用你不区分大小写类似 -iname
命令名称:locate

命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate  文件名
功能描述:在文件资料库中查找文件

范例:
$ locate inittab
tips:新建文件locate不到,可以updatedb,更新文件资料库后查找[tmp不在文件资料库内]
$  locate -i text01 // -i 作用你不区分大小写类似 -iname

2.5.3 查看命令位置:which 命令

命令名称:which

命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which  命令
功能描述:搜索命令所在目录及别名信息

范例:
$which ls
命令名称:which

命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which  命令
功能描述:搜索命令所在目录及别名信息

范例:
$which ls

2.5.4 查看命令位置:whereis 命令

命令名称:whereis

命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis  [命令名称]
功能描述:搜索命令所在目录及帮助文档路径

范例:
$ whereis ls
命令名称:whereis

命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis  [命令名称]
功能描述:搜索命令所在目录及帮助文档路径

范例:
$ whereis ls

2.5.5 文本搜索:grep 命令

命令名称:grep

命令所在路径:/bin/grep
执行权限:所有用户
语法:grep  -iv [指定字串] [文件]
功能描述:在文件中搜寻字串匹配的行并输出
-i  不区分大小写
-v 排除指定字串

范例:
# grep  mysql  /root/install.log
# grep -v ^# /etc/inittab 去除以#开头的所有行信息,^表示以XXX开头
命令名称:grep

命令所在路径:/bin/grep
执行权限:所有用户
语法:grep  -iv [指定字串] [文件]
功能描述:在文件中搜寻字串匹配的行并输出
-i  不区分大小写
-v 排除指定字串

范例:
# grep  mysql  /root/install.log
# grep -v ^# /etc/inittab 去除以#开头的所有行信息,^表示以XXX开头

2.6 帮助命令

2.6.1 帮助:man 命令

命令名称:man

命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man  [命令或配置文件]
(空格) 或f           翻页
q或Q                退出
功能描述:获得帮助信息

范例:
$ man ls
查看 ls命令的帮助信息
$ man services
查看配置文件services的帮助信息
命令名称:man

命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man  [命令或配置文件]
(空格) 或f           翻页
q或Q                退出
功能描述:获得帮助信息

范例:
$ man ls
查看 ls命令的帮助信息
$ man services
查看配置文件services的帮助信息

2.6.2 获取简介:whatis 命令

命令:whatis
语法:whatis 命令
功能描述:获得命令的简单介绍信息

范例:whatis ls
命令:whatis
语法:whatis 命令
功能描述:获得命令的简单介绍信息

范例:whatis ls

2.6.3 获取帮助:help 命令

命令名称:help

命令所在路径:Shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得Shell内置命令的帮助信息

范例:
$help umask
查看umask命令的帮助信息
命令名称:help

命令所在路径:Shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得Shell内置命令的帮助信息

范例:
$help umask
查看umask命令的帮助信息

2.7 用户管理命令

2.7.1 添加用户:useradd 命令

命令名称:useradd

命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户

范例:
$ useradd zhangdapao
命令名称:useradd

命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户

范例:
$ useradd zhangdapao

2.7.2 修改密码:passwd 命令

命令名称:passwd

命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户

范例:
$ passwd zhangdapao
命令名称:passwd

命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户

范例:
$ passwd zhangdapao

2.7.3 查看登录用户:who 命令

命令名称:who

命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登录用户信息

范例:
$who
显示所有登录用户信息
命令名称:who

命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登录用户信息

范例:
$who
显示所有登录用户信息

2.7.4  w 命令

命令名称:w

命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登录用户详细信息

范例:
$ w
命令名称:w

命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登录用户详细信息

范例:
$ w

2.7.5 切换用户:su 命令

命令含义
su切换到 root 用户
su root切换到 root 用户
su -切换到 root 用户,同时切换目录到/root
su - root切换到 root 用户,同时切换目录到/root
su 普通用户切换到普通用户
su - 普通用户切换到普通用户,同时切换普通用户所在的目录

2.8 压缩解压缩命令

2.8.1 压缩:gzip 命令

命令名称:gzip

命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件
压缩后文件格式:.gz

范例:
gzip text01
命令名称:gzip

命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件
压缩后文件格式:.gz

范例:
gzip text01

2.8.2 解压缩:gunzip 命令

命令名称:gunzip  [= gzip -d]

命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:解压缩.gz的压缩文件

范例:
$ gunzip textgz
tips:只能压缩文件不能压缩目录
命令名称:gunzip  [= gzip -d]

命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:解压缩.gz的压缩文件

范例:
$ gunzip textgz
tips:只能压缩文件不能压缩目录

2.8.3 归档管理:tar 命令

tar 与 gzip 命令结合使用实现文件打包、压缩。 tar 只负责打包文件,但不压缩,用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxxx.tar.gz。

命令名称:tar

命令所在路径:/bin/tar
执行权限:所有用户
语法:tar  选项[-zcf] [压缩后文件名] [目录]
-c    打包
-v    显示详细信息
-f     指定文件名
-z     打包同时压缩
功能描述:打包目录 压缩后文件格式:.tar.gz

范例:
$ tar  -zcf   Japan.tar.gz  Japan
将目录Japan打包并压缩为.tar.gz文件
tar命令解压缩语法:
-x     解包
-v    显示详细信息
-f     指定解压文件
-z     解压缩

范例:$ tar  -zxvf  Japan.tar.gz
命令名称:tar

命令所在路径:/bin/tar
执行权限:所有用户
语法:tar  选项[-zcf] [压缩后文件名] [目录]
-c    打包
-v    显示详细信息
-f     指定文件名
-z     打包同时压缩
功能描述:打包目录 压缩后文件格式:.tar.gz

范例:
$ tar  -zcf   Japan.tar.gz  Japan
将目录Japan打包并压缩为.tar.gz文件
tar命令解压缩语法:
-x     解包
-v    显示详细信息
-f     指定解压文件
-z     解压缩

范例:$ tar  -zxvf  Japan.tar.gz

2.8.4 zip 命令

命令名称:zip

    命令所在路径:/usr/bin/zip

    执行权限:所有用户

    语法:

    zip  选项[-r]  [压缩后文件名]  [文件或目录]

    -r    压缩目录

    功能描述:压缩文件或目录

    压缩后文件格式:.zip

    范例:

    $ zip  textzip  text01

    压缩文件

    $ zip  -r  zhang.zip  zhang

    压缩目录

    tips:会保留原文件
命令名称:zip

    命令所在路径:/usr/bin/zip

    执行权限:所有用户

    语法:

    zip  选项[-r]  [压缩后文件名]  [文件或目录]

    -r    压缩目录

    功能描述:压缩文件或目录

    压缩后文件格式:.zip

    范例:

    $ zip  textzip  text01

    压缩文件

    $ zip  -r  zhang.zip  zhang

    压缩目录

    tips:会保留原文件

2.8.5 unzip 命令

命令名称:unzip

    命令所在路径:/usr/bin/unzip

    执行权限:所有用户

    语法:unzip  [压缩文件]

    功能描述:解压.zip的压缩文件

    范例:$ unzip textzip
命令名称:unzip

    命令所在路径:/usr/bin/unzip

    执行权限:所有用户

    语法:unzip  [压缩文件]

    功能描述:解压.zip的压缩文件

    范例:$ unzip textzip

2.9 网络命令

2.9.1 write 命令

指令名称:write

    指令所在路径:/usr/bin/write

    执行权限:所有用户

    语法:write  <用户名>

    功能描述:给用户发信息,以Ctrl+D保存结束

    范例:

    write zhang
指令名称:write

    指令所在路径:/usr/bin/write

    执行权限:所有用户

    语法:write  <用户名>

    功能描述:给用户发信息,以Ctrl+D保存结束

    范例:

    write zhang

2.9.2 wall 命令

指令名称:wall

    命令英文原意:write all

    指令所在路径:/usr/bin/wall

    执行权限:所有用户

    语法:wall  [message]

    功能描述:发广播信息

    范例:

    wall  HelloWord
指令名称:wall

    命令英文原意:write all

    指令所在路径:/usr/bin/wall

    执行权限:所有用户

    语法:wall  [message]

    功能描述:发广播信息

    范例:

    wall  HelloWord

2.9.3 测试网络连通性:ping 命令

命令名称:ping

    命令所在路径:/bin/ping

    执行权限:所有用户

    语法:ping  选项  IP地址

     -c  指定发送次数

    功能描述:测试网络连通性

    范例:

    ping 11156
命令名称:ping

    命令所在路径:/bin/ping

    执行权限:所有用户

    语法:ping  选项  IP地址

     -c  指定发送次数

    功能描述:测试网络连通性

    范例:

    ping 11156

2.9.4 查看和设置网卡信息:ifconfig

命令名称:ifconfig

    命令所在路径:/sbin/ifconfig

    执行权限:root

    语法:ifconfig  网卡名称  IP地址

    功能描述:查看和设置网卡信息

    范例:

    ifconfig
命令名称:ifconfig

    命令所在路径:/sbin/ifconfig

    执行权限:root

    语法:ifconfig  网卡名称  IP地址

    功能描述:查看和设置网卡信息

    范例:

    ifconfig

2.9.5 查看发送电子邮件:mail 命令

命令名称:mail

    命令所在路径:/bin/mail

    执行权限:所有用户

    语法:mail [用户名]

    功能描述:查看发送电子邮件

    范例:

    mail root
命令名称:mail

    命令所在路径:/bin/mail

    执行权限:所有用户

    语法:mail [用户名]

    功能描述:查看发送电子邮件

    范例:

    mail root

2.9.6 查看登录用户历史信息:last 命令

命令名称:last

    命令所在路径:/usr/bin/last

    执行权限:所有用户

    语法:last

    功能描述:列出目前与过去登入系统的用户信息

    范例:

    last
命令名称:last

    命令所在路径:/usr/bin/last

    执行权限:所有用户

    语法:last

    功能描述:列出目前与过去登入系统的用户信息

    范例:

    last

2.9.7 显示网络相关信息:netstat 命令

命令名称:netstat

    命令所在路径:/bin/netstat

    执行权限:所有用户

    语法:netstat  [选项]

    功能描述:显示网络相关信息

    选项:

      -t : TCP协议

      -u : UDP协议

      	      -l : 监听

      -r : 路由

      -n : 显示IP地址和端口号

    范例:

    netstat -tlun  查看本机监听的端口

    netstat -an  查看本机所有的网络连接

    netstat -rn  查看本机路由表

    查看某一端口是否被占用:netstat -tunlp |grep 2181
命令名称:netstat

    命令所在路径:/bin/netstat

    执行权限:所有用户

    语法:netstat  [选项]

    功能描述:显示网络相关信息

    选项:

      -t : TCP协议

      -u : UDP协议

      	      -l : 监听

      -r : 路由

      -n : 显示IP地址和端口号

    范例:

    netstat -tlun  查看本机监听的端口

    netstat -an  查看本机所有的网络连接

    netstat -rn  查看本机路由表

    查看某一端口是否被占用:netstat -tunlp |grep 2181

2.9.8 配置网络:setup 命令

命令名称:setup

    命令所在路径:/usr/bin/setup

    执行权限:root

    语法:setup

    功能描述:配置网络

    范例:

    setup
命令名称:setup

    命令所在路径:/usr/bin/setup

    执行权限:root

    语法:setup

    功能描述:配置网络

    范例:

    setup

2.9.9 挂载:mount 命令

命令名称:mount

    命令位置:/bin/mount

    执行权限:所有用户

    命令语法:mount [-t 文件系统] 设备文件名 挂载点

    范例:

    mount -t iso9660 /dev/sr0 /mnt/cdrom
命令名称:mount

    命令位置:/bin/mount

    执行权限:所有用户

    命令语法:mount [-t 文件系统] 设备文件名 挂载点

    范例:

    mount -t iso9660 /dev/sr0 /mnt/cdrom

2.10 关机重启命令

2.10.1 关机:shutdown 命令

命令名称:shutdown

    shutdown [选项] 时间

    选项:  -c: 取消前一个关机命令  -h: 关机  -r: 重启
命令名称:shutdown

    shutdown [选项] 时间

    选项:  -c: 取消前一个关机命令  -h: 关机  -r: 重启

2.10.2 退出登录:logout 命令

3 文本编辑器 vim

3.1 Vim 常用操作

Vim 简介:

Vim 是一个功能强大的全屏幕文本编辑器, 是 Linux/UNIX 上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件。

Vim 没有菜单,只有命令。

3.1.1 插入命令

表头表头

|

命令

|

作用

| |

a

|

在光标所在字符后插入

| |

A

|

在光标所在行尾插入

| |

i

|

在光标所在字符前插入

| |

I

|

在光标所在行行首插入

| |

o

|

在光标下插入新行

| |

O

|

在光标上插入新行

|

3.1.2  定位命令

表头表头

|

命令

|

作用

| | :set nu | 设置行号 | | :set nonu | 取消行号 | | gg |

到第一行

| | GG | 到最后一行 | | nG | 到第 n 行 | | :n | 到第 n 行 | | $ | 移至行尾 | | 0 | 移至行首 |

3.1.3 删除命令

表头表头

|

命令

| 作用 | |

x

| 删除光标所在处字符 | | nx | 删除光标所在处后 n 个字符 | | dd | 删除光标所在行,ndd 删除 n 行 | | dG | 删除光标所在行到文件末尾内容 | | D | 删除光标所在处到行尾内容 | | :n1,n2d | 删除指定范围的行 |

3.1.4 复制和剪切命令

表头表头

|

命令

| 作用 | | yy |

复制当前行

| | nyy |

复制当前行以下 n 行

| | dd |

剪切当前行

| | ndd |

剪切当前行以下 n 行

| | p、P | 粘贴在当前光标所在行下或者行上 |

3.1.5 保存和退出命令

表头表头
命令作用
:w保存修改
:w 文件名另存为指定文件
:wq保存修改并退出
ZZ快捷键,保存修改并退出
:q!不保存修改退出
:wq!保存修改退出(文件所有者和 root 均可忽略只读权限强制写入)

4 软件安装

4.1 软件包管理简介

4.1.1 软件分类

源码包:脚本安装

二进制包:RPM 包

源码包

源码包的优点是:

  • 开源,如果有足够的能力,可以修改源代码

  • 可以自由选择所需的功能

  • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高

  • 卸载方便

源码包的缺点

  • 安装过程步骤较多,尤其安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误

  • 编译过程时间较长,安装比二进制安装时间长

  • 因为是编译安装,安装过程中一旦报错新手很难解决

RPM包

二进制包的优点

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载

  • 安装速度比源码包安装快的多

二进制包缺点:

  • 经过编译,不再可以看到源代码

  • 功能选择不如源码包灵活

  • 依赖性

4.2  rpm 命令管理

4.2.1 包命名与依赖性

RPM 包依赖性

  • 树形依赖: a→b→c

  • 环形依赖: a→b→c→a

  • 模块依赖: 模块依赖查询网站: www.rpmfind.net

4.2.2 安装升级与卸载

RPM安装

rpm –ivh 包全名

    选项:

            -i(install) 安装

            -v(verbose) 显示详细信息

            -h(
    																																																														hash) 显示进度

            --nodeps 不检测依赖性
rpm –ivh 包全名

    选项:

            -i(install) 安装

            -v(verbose) 显示详细信息

            -h(
    																																																														hash) 显示进度

            --nodeps 不检测依赖性

RPM包升级

rpm -Uvh 包全名

    选项:

        -U(upgrade) 升级
rpm -Uvh 包全名

    选项:

        -U(upgrade) 升级

卸载

rpm -e 包名

    选项:

        -e(erase) 卸载

        --nodeps 不检查依赖性
rpm -e 包名

    选项:

        -e(erase) 卸载

        --nodeps 不检查依赖性

4.3 yum 在线管理

4.3.1 yum 命令

查询

yum list

    查询所有可用软件包列表

    yum search 关键字

    搜索服务器上所有和关键字相关的包
yum list

    查询所有可用软件包列表

    yum search 关键字

    搜索服务器上所有和关键字相关的包

安装

yum –y install 包名

    选项:

             install 安装

             -y 自动回答
    																																																														yes
yum –y install 包名

    选项:

             install 安装

             -y 自动回答
    																																																														yes

升级

yum -y update 包名

    选项:

             update 升级

             -y 自动回答
    																																																														yes
yum -y update 包名

    选项:

             update 升级

             -y 自动回答
    																																																														yes

卸载

yum -y remove 包名

    选项:

             remove 卸载

             -y 自动回答
    																																																														yes
yum -y remove 包名

    选项:

             remove 卸载

             -y 自动回答
    																																																														yes

4.3.2 yum 软件组管理命令

yum grouplist

    列出所有可用的软件组列表

    yum groupinstall  软件组名

    安装指定软件组,组名可以由grouplist查询出来

    yum groupremove  软件组名

    卸载指定软件组
yum grouplist

    列出所有可用的软件组列表

    yum groupinstall  软件组名

    安装指定软件组,组名可以由grouplist查询出来

    yum groupremove  软件组名

    卸载指定软件组

5 shell 基础

5.1 shell 概述

5.1.1 shell 是什么

  • Shell是一个命令行解释器 ,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

  • Shell还是一个功能相当强大的编程语言 ,易编写,易调试,灵活性较强。Shell 是解释执行的脚本语言,在 Shell 中可以直接调用 Linux 系统命令。

5.1.2 shell 的分类

  • Bourne Shell:从 1979 起 Unix 就开始使用 Bourne Shell,Bourne Shell 的主文件名为 sh。

  • C Shell: C Shell 主要在 BSD 版的 Unix 系统中使用,其语法和 C 语言相类似而得名

  • Shell 的两种主要语法类型有 Bourne 和 C,这两种语法彼此不兼容。Bourne 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括:csh、tcsh

  • Bash: Bash 与 sh 兼容, 现在使用的Linux 就是使用Bash作为用户的基本Shell

5.2 shell 脚本的执行方式

5.2.1 echo 输出命令

命令名称:
    																																																														echo

    																																																														echo [选项] [输出内容]

    选项:  -e: 支持反斜线控制的字符转换
命令名称:
    																																																														echo

    																																																														echo [选项] [输出内容]

    选项:  -e: 支持反斜线控制的字符转换
表头表头
控制字符作用
\\输出\
\a输出警告音
\b退格键,向左删除键
\c取消输出行末的换行符,和“-n”选项一致
\e

ESCAPE 键

| | \f | 换页符 | | \n | 换行符 | | \r | 回车键 | | \t |

制表符,Tab 键

| | \v | 垂直制表符 | | \0nnn | 按照八进制 ASCII 码表输出字符,0 为数字零,nnn 为三位八进制数 | | \xhh | 按照十六进制 ASCII 码表输出字符,其中 hh 是两位十六进制数 |

示例:

[root@zhangRabbitMQ zhang]
    																																																														# echo -e "ab\\bc"

    ac

    [root@zhangRabbitMQ zhang]
    																																																														# echo -e "a\\tb\\tc\\nd\\te\\tf"

    a	b	c

    d	e	f
[root@zhangRabbitMQ zhang]
    																																																														# echo -e "ab\\bc"

    ac

    [root@zhangRabbitMQ zhang]
    																																																														# echo -e "a\\tb\\tc\\nd\\te\\tf"

    a	b	c

    d	e	f

5.2.2 编写脚本

[root@zhangRabbitMQ zhang]
    																																																														# vi /tmp/hello.sh

    																																																														#!/bin/bash

    																																																														echo
    																																																														"helloword"
[root@zhangRabbitMQ zhang]
    																																																														# vi /tmp/hello.sh

    																																																														#!/bin/bash

    																																																														echo
    																																																														"helloword"

5.2.3 执行脚本

[root@zhangRabbitMQ zhang]
    																																																														# chmod 755 /tmp/hello.sh

    [root@zhangRabbitMQ zhang]
    																																																														# /tmp/hello.sh

    helloword
[root@zhangRabbitMQ zhang]
    																																																														# chmod 755 /tmp/hello.sh

    [root@zhangRabbitMQ zhang]
    																																																														# /tmp/hello.sh

    helloword

5.3 Bash 的基本功能

5.3.1 历史命令与命令补全

历史命令:history

命令名称:
    																																																														history

    [root@localhost ~]
    																																																														# history [选项] [历史命令保存文件]

    选项:

    -c:  清空历史命令

    -w: 把缓存中的历史命令写入历史命令保存文件

    ~/.bash_history
命令名称:
    																																																														history

    [root@localhost ~]
    																																																														# history [选项] [历史命令保存文件]

    选项:

    -c:  清空历史命令

    -w: 把缓存中的历史命令写入历史命令保存文件

    ~/.bash_history
  • 历史命令默认会保存 1000 条,可以在环境变量配置文件/etc/profile 中进行修改

历史命令的调用

  • 使用上、下箭头调用以前的历史命令

  • 使用!n 重复执行第 n 条历史命令

  • 使用!!重复执行上一条命令

  • 使用!字串重复执行最后一条以该字串开头的命令

命令与文件补全

  • 在 Bash 中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按 Tab 键就会自动进行补全

5.3.2 命名别名与常用快捷键

命令别名

[root@localhost ~]
    																																																														# alias 别名='原命令'

    																																																														#设定命令别名

    [root@localhost ~]
    																																																														# alias

    																																																														#查询命令别名
[root@localhost ~]
    																																																														# alias 别名='原命令'

    																																																														#设定命令别名

    [root@localhost ~]
    																																																														# alias

    																																																														#查询命令别名

命令的执行顺序

  1. 第一顺位执行用绝对路径或相对路径执行的命令。
  1. 第二顺位执行别名。
  1. 第三顺位执行 Bash 的内部命令。
  1. 第四顺位执行按照$PATH 环境变量定义的目录查找顺序找到的第一个命令。

让别名永久生效,需要把配置写入配置文件/root/.bashrc中

Bash 常用快捷键

5.3.3 输入输出重定向

同时输出正确和错误

5.3.4 多命令执行与管道符

多命令顺序执行

管道符:|

命令名称:|

    命令格式:

    [root@localhost ~]
    																																																																		# 命令1  |  命令2

    																																																																		#命令1的正确输出作为命令2的操作对象

    例子:

    [root@localhost ~]
    																																																																		# ll -a /etc/  | more

    [root@localhost ~]
    																																																																		# netstat -an | grep "ESTABLISHED"
命令名称:|

    命令格式:

    [root@localhost ~]
    																																																																		# 命令1  |  命令2

    																																																																		#命令1的正确输出作为命令2的操作对象

    例子:

    [root@localhost ~]
    																																																																		# ll -a /etc/  | more

    [root@localhost ~]
    																																																																		# netstat -an | grep "ESTABLISHED"

5.3.5 通配符与其他特殊符号

通配符

其他特殊符号

5.4 Bash 变量

5.4.1 用户自定义变量

什么是变量

  • 变量是计算机内存的单元,其中存放的值可以改变。当 Shell 脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

变量设置规则

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是 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

5.4.2 环境变量

环境变量是什么

  • 用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的 Shell 中生效

设置环境变量

export 变量名=变量值

    申明变量

    																																																																				env

    查询变量

    																																																																				unset 变量名

    删除变量
export 变量名=变量值

    申明变量

    																																																																				env

    查询变量

    																																																																				unset 变量名

    删除变量

系统常见环境变量

PATH:系统查找命令的路径

    [root@localhost ~]
    																																																																				# echo $PATH /usr/lib/qt-3/bin:/usr/local/sbin:/usr/local/bin: /sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    PATH=
    																																																																				"
    																																																																					$PATH"
    																																																																				:/root/sh

    PATH变量叠加

    PS1:定义系统提示符的变量

    \\d:显示日期,格式为“星期 月 日”

    \\h:显示简写主机名。如默认主机名“localhost”

    \\t:显示24小时制时间,格式为“HH:MM:SS”

    \\T:显示12小时制时间,格式为“HH:MM:SS”

    \\A:显示24小时制时间,格式为“HH:MM”

    \\u:显示当前用户名

    \\w:显示当前所在目录的完整名称

    \\W:显示当前所在目录的最后一个目录

    \\
    																																																																				#:执行的第几个命令

    \\$:提示符。如果是root用户会显示提示符为“
    																																																																				#”,如果是普通用户会显示提示符为“$”

    示例:

    [root@localhost ~]
    																																																																				# PS1='[\\u@\\t \\w]\\$ '

    [root@04:50:08 /usr/local/src]
    																																																																				#PS1='[\\u@\\@ \\h \# \\W]\\$‘

    [root@04:53 上午 localhost 31 src]
    																																																																				#PS1='[\\u@\\h \\W]\\$ '
PATH:系统查找命令的路径

    [root@localhost ~]
    																																																																				# echo $PATH /usr/lib/qt-3/bin:/usr/local/sbin:/usr/local/bin: /sbin:/bin:/usr/sbin:/usr/bin:/root/bin

    PATH=
    																																																																				"
    																																																																					$PATH"
    																																																																				:/root/sh

    PATH变量叠加

    PS1:定义系统提示符的变量

    \\d:显示日期,格式为“星期 月 日”

    \\h:显示简写主机名。如默认主机名“localhost”

    \\t:显示24小时制时间,格式为“HH:MM:SS”

    \\T:显示12小时制时间,格式为“HH:MM:SS”

    \\A:显示24小时制时间,格式为“HH:MM”

    \\u:显示当前用户名

    \\w:显示当前所在目录的完整名称

    \\W:显示当前所在目录的最后一个目录

    \\
    																																																																				#:执行的第几个命令

    \\$:提示符。如果是root用户会显示提示符为“
    																																																																				#”,如果是普通用户会显示提示符为“$”

    示例:

    [root@localhost ~]
    																																																																				# PS1='[\\u@\\t \\w]\\$ '

    [root@04:50:08 /usr/local/src]
    																																																																				#PS1='[\\u@\\@ \\h \# \\W]\\$‘

    [root@04:53 上午 localhost 31 src]
    																																																																				#PS1='[\\u@\\h \\W]\\$ '

5.4.3 位置参数变量

位置参数变量

示例:

#!/bin/bash

    num1=
    																																																																						$1

    num2=
    																																																																						$2

    																																																																						sum=$((
    																																																																						$num1 +
    																																																																						$num2))

    																																																																						#变量sum的和是num1加num2

    																																																																						echo
    																																																																						$sum

    																																																																						#打印变量sum的值

    [root@zhangRabbitMQ zhang]
    																																																																						# /tmp/sum.sh 1 2

    3
#!/bin/bash

    num1=
    																																																																						$1

    num2=
    																																																																						$2

    																																																																						sum=$((
    																																																																						$num1 +
    																																																																						$num2))

    																																																																						#变量sum的和是num1加num2

    																																																																						echo
    																																																																						$sum

    																																																																						#打印变量sum的值

    [root@zhangRabbitMQ zhang]
    																																																																						# /tmp/sum.sh 1 2

    3

5.4.4 预定义变量

5.5 Bash 运算符

5.5.1  数值运算与运算符

declare声明变量类型

数值运算

[root@localhost ~]
    																																																																							# declare [+/-][选项] 变量名

    选项:

      -:  给变量设定类型属性

      +:   取消变量的类型属性

     -i:   将变量声明为整数型(
    																																																																							integer)

     -x:   将变量声明为环境变量

     -p:   显示指定变量的被声明的类型
[root@localhost ~]
    																																																																							# declare [+/-][选项] 变量名

    选项:

      -:  给变量设定类型属性

      +:   取消变量的类型属性

     -i:   将变量声明为整数型(
    																																																																							integer)

     -x:   将变量声明为环境变量

     -p:   显示指定变量的被声明的类型
方法1:

    [root@localhost ~]
    																																																																							# aa=11

    [root@localhost ~]
    																																																																							# bb=22 #给变量aa和bb赋值

    [root@localhost ~]
    																																																																							# declare -i cc=$aa+$bb

    方法2:
    																																																																							expr或
    																																																																							let数值运算工具

    [root@localhost ~]
    																																																																							# aa=11

    [root@localhost ~]
    																																																																							# bb=22

    																																																																							#给变量aa和变量bb赋值

    [root@localhost ~]
    																																																																							# dd=$(expr $aa + $bb)

    																																																																							#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格

    方法3:“$((运算式))”或“$[运算式]” (推荐)

    [root@localhost ~]
    																																																																							# aa=11

    [root@localhost ~]
    																																																																							# bb=22

    [root@localhost ~]
    																																																																							# ff=$(( $aa+$bb ))

    [root@localhost ~]
    																																																																							# gg=$[ $aa+$bb ]
方法1:

    [root@localhost ~]
    																																																																							# aa=11

    [root@localhost ~]
    																																																																							# bb=22 #给变量aa和bb赋值

    [root@localhost ~]
    																																																																							# declare -i cc=$aa+$bb

    方法2:
    																																																																							expr或
    																																																																							let数值运算工具

    [root@localhost ~]
    																																																																							# aa=11

    [root@localhost ~]
    																																																																							# bb=22

    																																																																							#给变量aa和变量bb赋值

    [root@localhost ~]
    																																																																							# dd=$(expr $aa + $bb)

    																																																																							#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格

    方法3:“$((运算式))”或“$[运算式]” (推荐)

    [root@localhost ~]
    																																																																							# aa=11

    [root@localhost ~]
    																																																																							# bb=22

    [root@localhost ~]
    																																																																							# ff=$(( $aa+$bb ))

    [root@localhost ~]
    																																																																							# gg=$[ $aa+$bb ]

5.6 环境变量配置文件

5.6.1 配置文件简介

source命令

source 命令通常用于保留、更改当前 shell 中的环境变量。

[root@localhost ~]
    																																																																								# source 配置文件



    [root@localhost ~]
    																																																																								# . 配置文件
[root@localhost ~]
    																																																																								# source 配置文件



    [root@localhost ~]
    																																																																								# . 配置文件

环境变量配置文件简介

  • 环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如 PATH、HISTSIZE、PS1、HOSTNAME 等默认环境变量。

  • /etc/profile

  • /etc/profile.d/*.sh

  • ~/.bash_profile

  • ~/.bashrc

  • /etc/bashrc

5.6.2  环境变量配置文件作用

配置文件列表如下:

  • /etc/profile

  • /etc/profile.d/*.sh

  • ~/.bash_profile

  • ~/.bashrc

  • /etc/bashrc

tips:/etc 目录下的对所有用户都生效

~/.bash_profile 和 ~/.bashrc -> 每个用户自己的配置文件,只对用户生效。

配置文件读取顺序

上图从左到右如果有叠加。后面的命令会覆盖前面的命令。

/etc/profile 的作用:

  • USER 变量:

  • LOGNAME 变量:

  • MAIL 变量:

  • PATH 变量:

  • HOSTNAME 变量:

  • HISTSIZE 变量:

  • umask:

  • 调用/etc/profile.d/*.sh 文件

~/.bash_profile 的作用

  • 用了~/.bashrc 文件。

  • 在 PATH 变量后面加入了:$HOME/bin 这个目录

5.6.3  其他配置文件和登录信息

注销时生效的环境变量配置文件

  • ~/.bash_logout

其他配置文件

  • ~/bash_history

Shell 登录信息

  • 本地终端欢迎信息: /etc/issue

6 Shell 编程

6.1 正则表达式

6.1.1 正则表达式与通配符

  • 正则表达式用来在文件中匹配符合条件的字符串, 正则是包含匹配 。grep、awk、sed 等命令可以支持正则表达式。

  • 通配符用来匹配符合条件的文件名, 通配符是完全匹配 。ls、find、cp 这些命令不支持正则表达式,所以只能使用 shell 自己的通配符来进行匹配了。

基础正则表达式

7ab4f88e6ad6f6901480cc01686246da.png

示例1:"*" 前一个字符匹配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
    																																																																										"a*" test_rule.txt

    																																																																										#匹配所有内容,包括空白行

    ● grep
    																																																																										"aa*" test_rule.txt

    																																																																										#匹配至少包含有一个a的行

    ● grep
    																																																																										"aaa*" test_rule.txt

    																																																																										#匹配最少包含两个连续a的字符串

    ● grep
    																																																																										"aaaaa*" test_rule.txt

    																																																																										#则会匹配最少包含四个个连续a的字符串

示例2:"." 匹配除了换行符外任意一个字符

● grep
    																																																																										"s..d" test_rule.txt

    																																																																										#“s..d”会匹配在s和d这两个字母之间一定有两个字符的单词

    ● grep
    																																																																										"s.*d" test_rule.txt

    																																																																										#匹配在s和d字母之间有任意字符

    ● grep
    																																																																										".*" test_rule.txt

    																																																																										#匹配所有内容,0或多个任意字符
● grep
    																																																																										"s..d" test_rule.txt

    																																																																										#“s..d”会匹配在s和d这两个字母之间一定有两个字符的单词

    ● grep
    																																																																										"s.*d" test_rule.txt

    																																																																										#匹配在s和d字母之间有任意字符

    ● grep
    																																																																										".*" test_rule.txt

    																																																																										#匹配所有内容,0或多个任意字符

示例3: "^" 匹配行首,"$" 匹配行尾

● grep
    																																																																										"^M" test_rule.txt

    																																																																										#匹配以大写“M”开头的行

    ● grep
    																																																																										"n$" test_rule.txt

    																																																																										#匹配以小写“n”结尾的行

    ● grep -n
    																																																																										"^$" test_rule.txt

    																																																																										#会匹配空白行
● grep
    																																																																										"^M" test_rule.txt

    																																																																										#匹配以大写“M”开头的行

    ● grep
    																																																																										"n$" test_rule.txt

    																																																																										#匹配以小写“n”结尾的行

    ● grep -n
    																																																																										"^$" test_rule.txt

    																																																																										#会匹配空白行

示例4:"[]" 匹配中括号中指定的任意一个字符,只匹配一个字符

● grep
    																																																																										"s[ao]id" test_rule.txt

    																																																																										#匹配s和i字母中,要不是a、要不是o 

    ● grep
    																																																																										"[0-9]" test_rule.txt

    																																																																										#匹配任意一个数字 

    ● grep
    																																																																										"^[a-z]" 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 

    																																																																										#匹配用小写字母开头的行

示例5:"[^]" 匹配除中括号的字符以外的任意一个字符

● grep
    																																																																										"^[â-z]" test_rule.txt  

    																																																																										#匹配不用小写字母开头的行 

    ● grep
    																																																																										"^[â-zA-Z]" test_rule.txt 

    																																																																										#匹配不用字母开头的行 “\\” 转义符 

    ● grep
    																																																																										"\.$" test_rule.txt

    																																																																										#匹配使用“.”结尾的行
● grep
    																																																																										"^[â-z]" test_rule.txt  

    																																																																										#匹配不用小写字母开头的行 

    ● grep
    																																																																										"^[â-zA-Z]" test_rule.txt 

    																																																																										#匹配不用字母开头的行 “\\” 转义符 

    ● grep
    																																																																										"\.$" test_rule.txt

    																																																																										#匹配使用“.”结尾的行

示例6:"\\{n\\}" 表示其前面的字符恰好出现n次

● grep
    																																																																										"a\\{3\\}" test_rule.txt 

    																																																																										#匹配a字母连续出现三次的字符串 

    ● grep
    																																																																										"[0-9]\\{3\\}" test_rule.txt 

    																																																																										#匹配包含连续的三个数字的字符串
● grep
    																																																																										"a\\{3\\}" test_rule.txt 

    																																																																										#匹配a字母连续出现三次的字符串 

    ● grep
    																																																																										"[0-9]\\{3\\}" test_rule.txt 

    																																																																										#匹配包含连续的三个数字的字符串

示例7:"\\{n,\\}" 表示其前面的字符出现不小于n次

● grep
    																																																																										"^[0-9]\\{3,\\}[a-z]" test_rule.txt 

    																																																																										#匹配最少用连续三个数字开头的行
● grep
    																																																																										"^[0-9]\\{3,\\}[a-z]" test_rule.txt 

    																																																																										#匹配最少用连续三个数字开头的行

示例8:"\\{n,m\\}" 匹配其前面的字符至少出现n次,最多出现m次

​​​​​​​● grep
    																																																																										"sa\\{1,3\\}i" test_rule.txt 

    																																																																										#匹配在字母s和字母i之间有最少一个a,最多三个a
​​​​​​​● grep
    																																																																										"sa\\{1,3\\}i" test_rule.txt 

    																																																																										#匹配在字母s和字母i之间有最少一个a,最多三个a

6.2 字符串截取命令

6.2.1 cut 字段提取命令

[root@localhost ~]
    																																																																										# cut [选项] 文件名

    选项:

    -f  列号:  	   提取第几列

    -d 分隔符:  按照指定分隔符分割列
[root@localhost ~]
    																																																																										# cut [选项] 文件名

    选项:

    -f  列号:  	   提取第几列

    -d 分隔符:  按照指定分隔符分割列

创建演示文件 student.txt

[root@localhost ~]
    																																																																										# vi student.txt

    ID      Name       gender     Mark

    1        Liming      M         86

    2        Sc          M         90

    3        Gao         M         83
[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

    																																																																										#以:为分隔符提取第一第三列
[root@localhost ~]
    																																																																										# cut -f 2 student.txt

    																																																																										#提取第二列

    [root@localhost ~]
    																																																																										# cut -f 2,3 student.txt

    																																																																										#提取第二第三列

    [root@localhost ~]
    																																																																										# cut -d ":" -f 1,3 /etc/passwd

    																																																																										#以:为分隔符提取第一第三列

cut 命令的局限

[root@localhost ~]# df -h | cut -d " " -f 1,3

#有空格时提取会出问题,不能识别多个空格情况

6.2.2 printf 命令

[root@localhost ~]
    																																																																										# printf   ’输出类型输出格式’    输出内容

    输出类型:

    %ns :  输出字符串。n是数字指代输出几个字符

    %ni :  输出整数。n是数字指代输出几个数字

    %m.nf : 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%2f代表:2位是小数,8位是整数。
[root@localhost ~]
    																																																																										# printf   ’输出类型输出格式’    输出内容

    输出类型:

    %ns :  输出字符串。n是数字指代输出几个字符

    %ni :  输出整数。n是数字指代输出几个数字

    %m.nf : 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%2f代表:2位是小数,8位是整数。

其中输出格式选项有:

输出格式:

\a : 输出警告声音

\b : 输出退格键,也就是 Backspace 键

\f : 清除屏幕

\n : 换行

\r : 回车,也就是 Enter 键

\t : 水平输出退格键,也就是 Tab 键

\v : 垂直输出退格键,也就是 Tab 键

6.2.3 awk 命令

[root@localhost ~]
    																																																																										# awk ‘条件1{动作1} 条件2{动作2}…’ 文件名

    条件(Pattern):

        一般使用关系表达式作为条件

        x > 10 判断变量 x是否大于10

        x>=10 大于等于

        x<=10 小于等于

    动作(Action):

        格式化输出

        流程控制语句
[root@localhost ~]
    																																																																										# awk ‘条件1{动作1} 条件2{动作2}…’ 文件名

    条件(Pattern):

        一般使用关系表达式作为条件

        x > 10 判断变量 x是否大于10

        x>=10 大于等于

        x<=10 小于等于

    动作(Action):

        格式化输出

        流程控制语句

示例

[root@zhangRabbitMQ zhang]# vi
    																																																																										/tmp
    																																																																										/student.txt

    id      name    java    linux   mysql

    																																																																										1       bilei
    																																																																										88
    																																																																										88
    																																																																										88

    																																																																										2       zhang
    																																																																										60
    																																																																										60
    																																																																										60

    [root@zhangRabbitMQ zhang]# awk
    																																																																										'{printf $2 "\\t" $5 "\\n"}'
    																																																																										/tmp
    																																																																										/student.txt

    name	mysql

    bilei
    																																																																										88

    zhang
    																																																																										60
[root@zhangRabbitMQ zhang]# vi
    																																																																										/tmp
    																																																																										/student.txt

    id      name    java    linux   mysql

    																																																																										1       bilei
    																																																																										88
    																																																																										88
    																																																																										88

    																																																																										2       zhang
    																																																																										60
    																																																																										60
    																																																																										60

    [root@zhangRabbitMQ zhang]# awk
    																																																																										'{printf $2 "\\t" $5 "\\n"}'
    																																																																										/tmp
    																																																																										/student.txt

    name	mysql

    bilei
    																																																																										88

    zhang
    																																																																										60

BEGIN

#awk BEGIN{printf "This is a transcript \n" } {printf $2 "\t" $6 "\n"} student.tx
END

awk END{printf "The End \n" }

{printf $2 "\t" $6 "\n"} student.txt

FS内置变量

#cat /etc/passwd | grep "/bin/bash" | awk BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}

关系运算符

#cat student.txt | grep -v Name | awk $6 >= 87 {printf $2 "\n" }

6.2.4 sed 命令

sed 是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。sed 主要是用来将数据进行选取、替换、删除、新增的命令。

[root@localhost ~]
    																																																																											# sed [选项] ‘[动作]’ 文件名

    选项:

        -n:  一般sed命令会把所有数据都输出到屏幕 ,  如果加入此选择,则只会把经过           		sed命令处  理的行输出到屏幕。

        -e: 允许对输入数据应用多条sed命令编辑

        -i:  用sed的修改结果直接修改读取数据的文件,  而不是由屏幕输出

    动作:

        a \\:  追加,在当前行后添加一行或多行。添加多行时,除最后 一行  外,每行末尾需要用“\\”代	     		表数据未完结。

        c \\:  行替换,用c后面的字符串替换原数据行,替换多行时,除最  后一行外,每行末尾需“\\”代   		表数据未完结。

        i \\:  插入,在当期行前插入一行或多行。插入多行时,除最后 一行  外,每行末尾需要“\\”代

    表数据未完结。

        d:  删除,删除指定的行。

        p:  打印,输出指定的行。

        s:  字串替换,用一个字符串替换另外一个字符串。格式为“行范  围s/旧字串/新字串/g”(和vim

    中的替换格式类似)。
[root@localhost ~]
    																																																																											# sed [选项] ‘[动作]’ 文件名

    选项:

        -n:  一般sed命令会把所有数据都输出到屏幕 ,  如果加入此选择,则只会把经过           		sed命令处  理的行输出到屏幕。

        -e: 允许对输入数据应用多条sed命令编辑

        -i:  用sed的修改结果直接修改读取数据的文件,  而不是由屏幕输出

    动作:

        a \\:  追加,在当前行后添加一行或多行。添加多行时,除最后 一行  外,每行末尾需要用“\\”代	     		表数据未完结。

        c \\:  行替换,用c后面的字符串替换原数据行,替换多行时,除最  后一行外,每行末尾需“\\”代   		表数据未完结。

        i \\:  插入,在当期行前插入一行或多行。插入多行时,除最后 一行  外,每行末尾需要“\\”代

    表数据未完结。

        d:  删除,删除指定的行。

        p:  打印,输出指定的行。

        s:  字串替换,用一个字符串替换另外一个字符串。格式为“行范  围s/旧字串/新字串/g”(和vim

    中的替换格式类似)。

示例

[root@zhangRabbitMQ zhang]
    																																																																												# vi /tmp/student.txt

    																																																																												id      name    java    linux   mysql

    1       bilei   88      88      88

    2       zhang   60      60      60
[root@zhangRabbitMQ zhang]
    																																																																												# vi /tmp/student.txt

    																																																																												id      name    java    linux   mysql

    1       bilei   88      88      88

    2       zhang   60      60      60
#查看文件的第二行

    [root@zhangRabbitMQ tmp]
    																																																																												# sed '2p' student.txt

    																																																																												id	name	java	linux	mysql

    1	bilei	88	88	88

    1	bilei	88	88	88

    2	zhang	60	60	60

    																																																																												#只显示第二行

    [root@zhangRabbitMQ tmp]
    																																																																												# sed -n '2p' student.txt

    1	bilei	88	88	88

    																																																																												#删除第二行到第四行的数据,但不修改文件本身

    [root@zhangRabbitMQ tmp]
    																																																																												# sed '2,3d' student.txt

    																																																																												id	name	java	linux	mysql
#查看文件的第二行

    [root@zhangRabbitMQ tmp]
    																																																																												# sed '2p' student.txt

    																																																																												id	name	java	linux	mysql

    1	bilei	88	88	88

    1	bilei	88	88	88

    2	zhang	60	60	60

    																																																																												#只显示第二行

    [root@zhangRabbitMQ tmp]
    																																																																												# sed -n '2p' student.txt

    1	bilei	88	88	88

    																																																																												#删除第二行到第四行的数据,但不修改文件本身

    [root@zhangRabbitMQ tmp]
    																																																																												# sed '2,3d' student.txt

    																																																																												id	name	java	linux	mysql

6.3 字符处理命令

6.3.1 排序命令 sort

[root@localhost ~]
    																																																																												# sort [选项] 文件名

    选项:

        -f:  忽略大小写

        -n:  以数值型进行排序,默认使用字符串型排序

        -r:  反向排序

        -t:  指定分隔符,默认是分隔符是制表符

        -k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
[root@localhost ~]
    																																																																												# sort [选项] 文件名

    选项:

        -f:  忽略大小写

        -n:  以数值型进行排序,默认使用字符串型排序

        -r:  反向排序

        -t:  指定分隔符,默认是分隔符是制表符

        -k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

示例

[root@localhost ~]
    																																																																												# sort /etc/passwd

    																																																																												#排序用户信息文件

    [root@localhost ~]
    																																																																												# sort -r /etc/passwd

    																																																																												#反向排序

    [root@localhost ~]
    																																																																												# sort -t ":" -k 3,3 /etc/passwd

    																																																																												#指定分隔符是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序

    [root@localhost ~]
    																																																																												# sort -n -t ":" -k 3,3 /etc/passwd

    																																																																												#指定分隔符是“:”,用第三字段开头,第三字段结尾排序,以数值型进行排序
[root@localhost ~]
    																																																																												# sort /etc/passwd

    																																																																												#排序用户信息文件

    [root@localhost ~]
    																																																																												# sort -r /etc/passwd

    																																																																												#反向排序

    [root@localhost ~]
    																																																																												# sort -t ":" -k 3,3 /etc/passwd

    																																																																												#指定分隔符是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序

    [root@localhost ~]
    																																																																												# sort -n -t ":" -k 3,3 /etc/passwd

    																																																																												#指定分隔符是“:”,用第三字段开头,第三字段结尾排序,以数值型进行排序

6.3.2 wc 统计命令

[root@localhost ~]
    																																																																												# wc [选项] 文件名

    选项:

        -l: 只统计行数

        -w: 只统计单词数

        -m: 只统计字符数
[root@localhost ~]
    																																																																												# wc [选项] 文件名

    选项:

        -l: 只统计行数

        -w: 只统计单词数

        -m: 只统计字符数

上次更新于: