Linux (CentOS 7)笔记

1. Linux 目录的作用

目录名 目录作用
/bin 存放系统命令的目录, 普通用户和超级用户都可以执行. 不过放在/bin下的命令在单用户模式下也可以执行.
/sbin 保存和系统环境设置相关的命令, 只有超级用户可以使用这些命令进行系统环境设置, 但有些命令可以允许普通用户查看.
/usr/bin 放系统命令的目录, 普通用户和超级用户都可以执行. 这些命令和系统启动无关, 在单用户模式下不能执行.
/usr/sbin 存放根文件系统不必要的系统管理命令, 如多数服务程序. 只有超级用户可以使用.
/boot 系统启动目录, 保存系统启动相关的文件, 如内核文件和启动引导程序(grub)文件, 不要向里面放东西.
/dv 设备文件保存位置. Linux所有的内容都以文件的形式保存, 包括硬件, 此目录就是用来保存所有硬件设备文件的.
/etc 配置文件保存位置. 系统内所有采用默认安装方式(rpm安装)的服务的配置文件全部放在此目录, 如用户帐号和密码, 服务的启动脚本, 常用服务的配置文件等.
/home 普通用户的家目录. 建立每个用户时, 会自动的在此目录下创建一个同用户名的目录.如/home/myname. 超级用户root不一样, 其放在/root一级目录下.
/lib 系统调用的函数库保存位置.
/lost+found 当系统意外崩溃或机器意外关闭, 而产生一些文件碎片. 当系统启动过程中fsck工具会检查这里, 并修复损坏的文件系统. 此只在每个分区都会有.
/media 挂载目录. 系统建议用来挂在媒体设备, 如软盘和光盘.
/mnt 挂载目录. 以前Linux只有这样一个目录, 现在建议用于挂载U盘, 移动硬盘和其他操作系统的分区.
/misc 挂载目录.系统建议用于挂载NFS服务的共享目录.
/opt 第三方安装的软件保存位置. 习惯于还是放置在/usr/local/中
/proc 虚拟文件系统, 该目录的数据并不保存在硬盘中, 而是保存在内存中. 主要保存系统的内核, 进程, 外部设备状态和网络状态灯. 如/proc/cpuinfo是保存CPU信息的, /proc/devices是保存设备驱动的列表, /proc/filesystems是保存文件系统列表的, /proc/net是保存网络歇息信息的.
/sys 虚拟文件系统. 和/proc目录类似, 都是保存在内存当中的, 主要是保存与内核相关信息的.
/root 超级用户的家目录.
/srv 服务数据目录. 一些系统服务启动后, 可以在这个目录中保存所需的数据.
/tmp 临时目录. 系统存放临时文件的目录, 该目录下所有用户都可以访问和写入.
/usr 系统软件资源目录. Unix Software Resource. 系统中安装的软件大多数存档在这里.
/var 动态数据保存位置.主要保存缓存, 日志以及软件运行所产生的文件.
  • 单用户模式:类似于windows中的安全模式.
  • sbin是超级用户才能使用的, bin是所有用户都可以使用的.
  • 最好备份./boot和/etc目录
  • /proc和/sys是存于内存的, 不要向里面放东西.

2.Linux常用命令

2.1 命令格式

命令格式: 命令 [-选项] [参数]
例: ls -la /etc
说明:
.个别命令不使用此格式.
.当有多个选项可以写在一起.
.简化选项和完整选项 (-a 等于 --all)(简化选项使用-, 完整选项使用–)

2.2 目录处理命令

2.2.1 目录处理命令 —— ls

命令名称: ls
原意: list
命令所在路径: /bin/ls
权限: 所有用户
功能: 显示目录文件
语法: ls [选项]

  • tips:

隐藏文件: 在Linux中隐藏文件是以.开头的.

命令 语法 含义
-a / --all ls -a / --all (all)显示当前目录下所有文件(包括隐藏的)
-l ls -l (long)详细显示当前目录下文件的信息,分为7个部分:1.(*1) 2.引用计数 3.所有者 4.所有组 5.文件大小 6.文件最后一次修改日期 7.文件名
-lh ls -lh (human)详细显示文件的信息并且文件大小按照k,mb等形式表示
-ld ls -ld (direct) 显示当前目录的详细信息
-i ls -i (inode)显示文件的ID号
ll ll 同ls -l

(*1):

位置 代表含义 具体含义
1 文件类型 1.-(二进制文件) 2.d(目录) 3.l(软链接文件)
2 所有者(user)是否有读权限 1.r(read) 2.-(没有)
3 所有者(user)是否有写权限 1.w(write) 2.-(没有)
4 所有者(user)是否有执行权限 1.x(excute) 2.-(没有)
5 所有组(group)是否有读权限 1.r(read) 2.-(没有)
6 所有组(group)是否有写权限 1.w(write) 2.-(没有)
7 所有组(group)是否有执行权限 1.x(excute) 2.-(没有)
8 其他人(other)是否有读权限 1.r(read) 2.-(没有)
9 其他人(other)是否有写权限 1.w(write) 2.-(没有)
10 其他人(other )是否有执行权限 1.x(excute) 2.-(没有)

2.2.2 目录处理命令 —— mkdir

命令名称: mkdir
命令英文原意: make directories
命令所在路径: /bin/mkdir
执行权限: 所有用户
语法: mkdir -p [目录名]
功能描述: 创建新目录
-p递归创建
例子:
mkdir -p /tmp/Japan/boduo (递归创建)
mkdir tmp/Japan/longze /tmp/Japan/cangjing (创建多个)

命令 语法 含义
mkdir mkdir [文件路径] 创建目录
mkdir -p mkdir -p [文件路径] 递归创建文件

2.2.3 目录处理命令 —— cd

命令名称: cd
命令英文原意: change directory
命令所在路径: shell 内置命令
执行权限: 所有用户
语法: cd [目录]
功能描述: 切换目录
例子:
cd /tmp/Japan/boduo

命令 语法 含义
cd cd [目录] 切换到指定目录
pwd pwd 输出当前目录
cd … cd … 切换到上一级目录
cd . cd . 切换到当前目录

2.2.4 目录处理命令 —— rmdir

命令名称: rmdir
命令英文原意: remove empty directories
命令所在路径: /bin/rmdir
执行权限: rmdir [目录名]
功能描述: 删除空目录
例子:
rmdir /tmp/Japan/boduo

命令 语法 含义
rmdir rmdir [目录名] 删除空目录

2.2.5 目录处理命令 —— cp

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

命令 语法 含义
cp cp [源文件名] [目标目录] 复制文件到指定的目录
cp -r cp -r [源文件名或目录] [目标目录] 复制文件或者目录到指定的目录
cp -p cp -p [源文件名] [目标目录] 复制文件到指定目录并同时保存其属性
  • 在复制的过程还可以同时改名, 名字就是为指定的目标目录上的文件名.
    例子: cp /etc/my.conf /tmp/Japan/boduo/newname.conf

2.2.6 目录处理命令 —— mv

命令名称: mv
命令英文原意: move
命令所在路径: /bin/mv
执行权限: 所有用户
语法: mv [源文件或目录] [目标目录]
功能描述: 剪切文件, 改名

命令 语法 含义
mv mv [源文件或目录] [目标目录] 移动文件或目录到指定目录
  • mv [源文件或目录] [同源目录下不同名字] 即可进行改名
    例子: mv test test2 把test改为test2

2.2.7 目录处理命令 —— rm

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

命令 语法 含义
rm rm [文件] 删除指定文件
-r rm -r [文件或目录] 删除指定文件或目录
-f rm -f [文件] 强制删除执行文件

2.3 文件处理命令

2.3.1 文件处理命令 —— touch

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

命令 语法 含义
touch touch [文件名] 创建一个空的文件
touch touch [文件名] [文件名] 创建多个空的文件
touch touch “[xxx xxx.xxx]” 创建一个带空格的空文件

2.3.2 文件处理命令 —— cat

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

命令 语法 含义
cat cat [文件名] 显示文件内容
-n cat -n [文件名] 显示文件内容且前面带有行号
-A cat -A [文件名] 显示隐藏的字符

2.3.3 文件处理命令 —— tac

命令名称: tac
命令所在路径: /usr/bin/tac
执行权限: 所有用户
语法: tac [文件名]
功能描述: 显示文件内容 (反向显示)
例子:
tac /etc/issue

命令 语法 含义
tac tac [文件名] 反向显示文件内容

2.3.4 文件处理命令 —— more

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

命令 语法/操作 含义
more more [文件名] 按分页的形式显示文件内容
more (空格)/f 翻页
more (Enter) 换行
more q/Q 退出
more b 向上翻页

2.3.5 文件处理命令 —— less

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

命令 语法/操作 含义
less less [文件名] 按分页的形式显示文件内容
less (空格)/f 翻页
less (Enter)/方向下 换行
less 方向上 上一行
less q/Q 退出
less b 向上翻页
less /搜索内容 可在文件中所有内容并以标白的形式显示
less /搜索内容 + n 可显示下一条标白内容

2.3.6 文件处理命令 —— head

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

命令 语法 含义
head head [文件名] 显示文件的前十行
-n head -n xx [文件名] 显示文件的前xx行

2.3.7 文件处理命令 —— tail

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

命令 语法 含义
tail tail [文件名] 显示文件的末尾10行
-n xx tail -n xx [文件名] 显示末尾xx行
-f tail -f [文件名] 动态显示末尾10行
-fn tail -fn xx [文件名] 动态显示末尾xx行. fn顺序不能换

2.4 链接命令

2.4.1 链接命令 —— ln

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

命令 语法 含义
ln ln [源文件] [目标文件] 生成硬链接
-s ln -s [源文件] [目标文件] 生成软链接
区别 软链接 硬链接
文件大小 一般为几十k大小 和源文件一样大
i节点数 与源文件的i节点数不同 和源文件i节点相同
是否可与源文件同步 NO YES
源文件删除, 链接是否可用 NO YES
是否能跨区链接 YES NO
是否能对目录使用 YES NO
权限 拥有所有权限, 但实际取决的真实文件的权限 拥有和实际文件一样的权限

2.5 权限管理命令

2.5.1 权限管理命令 —— chmod

命令名称: chmod
命令英文原意: change the permissions mode of a file
命令所在路径: /bin/chmod
执行权限: 所有用户
语法:
chmod [{ugoa}{±=}{rwx}] [文件名或目录]
chmod [mode=421] [文件或目录]
-R 递归修改
功能描述: 改变目录或目录权限

命令 语法 含义
chmod chmod {ugoa}{±=}{rwx} [文件名或目录] 给指定的文件或目录添加删除等于指定的权限
xxx chmod xxx [文件名或目录] 给指定文件或目录以数字的方针设定权限
-R chmod -R xxx [文件名或目录] 给文件或给目录下所有的文件设置为xxx权限

使用数字的方式权限解释:

权限 数值
r 4
w 2
x 1

例子:
设置:u 为 读写权限
g 为 读权限
o 为 读权限
-rw-r–r--
= (4+2)(4)(4)
= 644

读写执行的权限解释:

字符 权限 对文件的含义 对目录的含义
r 读权限 可以查看文件的内容 可以列出目录中的文件
w 写权限 可以修改文件内容 可以在目录中添加, 删除文件
x 执行权限 可以执行文件 可以进入目录
  • 一般新建完一个目录都是包好rx的权限的.

2.5.2 权限管理命令 —— chown

命令名称: chown
命令英文原意: change file ownership
命令所在路径: /bin/chown
执行权限:: 所有用户
语法: chown [用户] [文件或目录]
功能描述: 改变文件或目录的所有者
例子: chown user1 testfile

命令 语法 含义
chown chown [用户] [文件或目录] 改变文件的所有者
chown chown [用户:用户组] [文件或目录] 可同时改用户和组
  • 只有超级用户才可以改变, 即使是文件的所有者也不行.

2.5.3 权限管理命令 —— chgrp

命令名称: chgrp
命令英文原意: change file group ownership
命令所在路径: /bin/chgrp
执行权限: 所有用户
语法: chgrp [用户组] [文件或目录]
功能描述: 改变文件或目录的所属组
例子:
chgrp chen testfile

命令 语法 含义
chgrp chgrp [用户组] [文件或目录] 改变文件或目录的所属组
  • 创建一个文件默认的所有者是创建者, 默认的所属组是创建组

2.5.4 权限管理命令 —— umask

命令名称: umask
命令英文原意: the user file-creation mask
命令所在路径: Shell 内置命令
执行权限: 所有用户
语法: umask [-S]
-S 以rwx形式显示新建文件缺省权限
功能描述: 显示, 设置文件的缺省权限
例子: umask -S

命令 语法 含义
umask xxx umask xxx 设置新建文件的缺省权限
-S umask -S 显示新建文件的缺省权限
  • 创建文件夹和文件的权限不同, 文件默认都会把x的权限都移除.
    设置新建文件缺省权限解释:
    默认的缺省权限:
    文件夹: rwxr-xr-x
    文件 : rw-r–r--

如果要设置新的缺省权限为:
文件夹: rwxrwxr-x
文件 : rx-rw-r–

计算如下:
首先写出全部权限:
rwxrwxrwx (全部权限)
xxxxxxxxx (未知权限)
-------------------- (每位进行异或运算)
rwxrwxr-x (目标权限)

xxxxxxxxx = -------w- = 002
所以要设为此权限: umask 002.

2.6 文件搜索命令

2.6.1 文件搜索命令 —— find

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

命令 语法 含义
find find [搜索范围] [匹配条件] 文件搜索
-name find [搜索范围] -name [文件名] 搜索指定文件名的文件
* name 使用*匹配任意多个字符
? name? 使用?匹配单个任意字符
iname find [搜索范围] -iname [文件名] 搜索时不区分大小写
-size [±=] find [搜索范围] -size [±=][数据块数量] 搜索大于(+), 小于(-), 等于(=) [数据库数量]的文件
-user find [搜索范围] -user [所有者] 根据所有者查找
-group find [搜索范围] -group [所属组] 根据所属组查找
-cmin find [搜索范围] -cmin [±][时间] 查找大于(+)或者小于指定时间内被修改过文件属性(权限)的文件
-amin find [搜索范围] -amin [±][时间] 查找大于(+)或小于(-)指定时间内被访问的文件
-mmin find [搜索范围] -mmin [±][时间] 查找大于(+)或小于(-)指定时间内被修改过的文件
-a find [搜索范围] -size [±=][文件大小] -a -size [±=][文件大小] -a = and, 同时满足
-type find [搜索范围] -type [fdl] 根据类型查找文件(f), 目录(d), 软链接(l)
-o find [搜索范围] -type [fdl] -o -type [fdl] -o = or, 满足其中之一
-exec/-ok find [搜索范围] -name -exec/-ok ls {} ; 搜索完之后对结果执行指定操作(-exec), 或询问后再执行(-ok)
-inum find [搜索范围] -inum [节点数] 搜索指定节点的文件

2.6.2 文件搜索命令 —— locate

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

命令 语法 含义
locate locate 文件名 在文件资料库中查找文件
-i locate -i 文件名 不区分大小写查找
  • 其不会时时更新, 需要使用updatedb 更新文件资料库
  • 在/tmp 下的文件是找不到的
  • 文件资料库存放在 /var/lib/mlocate/mlocate.db 中

2.6.3 文件搜索命令 —— which

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

命令 语法 含义
which which [命令] 搜索命令所在的目录以及别名信息
  • 我们是用的rm等会询问是否的命令其实它原本是没有询问的, 其使用了别名, 别名中带有参数 -i, 才使之询问.

2.6.4 文件搜索命令 ——whereis

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

命令 语法 含义
whereis whereis [命令] 搜索命令所在的目录以及别名信息

2.6.5 文件搜索命令 —— grep

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

命令 语法 含义
grep grep [指定字串] [文件名] 在文件中搜寻字符串匹配的行并输出
-i grep -i [指定字串] [文件名] 不区分大小写的查找
-v grep -v [指定字串] [文件名] 排除指定字串

2.7 帮助命令

2.7.1 帮助命令 —— man

命令名称: man
命令英文原意: manual
命令所在路径: /usr/bin/man
执行权限: 所有用户
语法: man [命令或配置文件]
功能描述: 获得帮助信息
例子:
man ls 查看ls命令的帮助信息
man services 查看配置文件services的帮助信息

命令 语法 含义
man man [命令或配置文件] 查看命令或配置文件的帮助信息
1 man 1 [命令] 查看命令的帮助信息
5 man 5 [配置文件] 查看配置文件的帮助信息
  • info 同样也可以查找到类似的帮助信息

2.7.2 帮助命令 —— whatis

命令名称: whatis
命令英文原意:what is
命令所在路径: /usr/bin/whatis
执行权限: 所有用户
语法: whatis [命令]
功能描述: 获得命令的帮助简短信息

命令 语法 含义
whatis whatis [命令] 获得命令的帮助简短信息

2.7.3 帮助命令 —— apropos

命令名称: apropos
命令英文原意: apropos
命令所在路径: /usr/bin/apropos
执行权限: 所有用户
语法: apropos [配置文件]
功能描述: 获得配置文件的帮助简短信息

命令 语法 含义
apropos apropos [配置文件] 获得配置文件的帮助简短信息
  • 配置文件不需要路径
  • 可以使用 [命令] --help 查看简短的帮助信息

2.7.4 帮助命令 —— help

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

命令 语法 含义
help help [shell内置命令] 用于查看内置命令
  • 还可以使用help查看while 等shell 关键字的帮助信息.

2.8 用户管理命令

2.8.1 用户管理命令 —— useradd

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

命令 语法 含义
useradd useradd [用户名] 添加一个用户

2.8.2 用户管理命令 —— passwd

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

命令 语法 含义
passwd passwd [用户名] 设置/更改用户的密码
  • root用户可以设置不符合规范的密码, 但是用户自己不可以设置.

2.8.3 用户管理命令 —— who

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

命令 语法 含义
who who 查看登录用户信息
用户名 登陆终端 登陆时间 登陆主机IP地址
root (超级用户) tty1(本地终端) 登陆时间
chen pts0 (远程终端0) 登陆时间 xxx.xxx.xxx

2.8.4 用户管理命令 —— w

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

命令 语法 含义
w w 查看更详细登录用户信息

w命令输出详解:

当前系统时间 up xx:xx (系统连续运行时间) x users (当前多少用户登陆) load average: x.xx(一分钟负载), x.xx(五分钟), x.xx(十分钟)
11:17:51 up 2 days, 29 min 2 users load average: 0.00, 0.01, 0.05

*以上也可以使用uptime进行输出.

User TTY LOGIN@ IDLE (空闲时间) JCPU (累计占用cpu时间) PCPU (执行的操作占用的时间) WHAT (当前执行了什么操作)
root pts/0 02:59 2.00s 0.52s 0.00s w

2.9 压缩解压命令

2.9.1 压缩解压命令 —— gzip

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

命令 语法 含义
gzip gzip [文件] 压缩文件
-d gzip -d [文件] 解压文件
gunzip gunzip [文件] 解压文件
  • gzip 只能压缩文件, 不能压缩目录

2.9.2 压缩解压命令 —— gunzip

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

命令 语法 含义
gunzip gunzip [压缩文件] 解压缩文件

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

命令 语法 含义
tar -zcvf tar -zcvf [压缩后文件名] [目录] 打包并压缩目录且显示详细信息
tar -cvf tar -cvf [打包后文件名] [目录] 打包目录且显示详细信息
tar -zxvf tar -zxvf [压缩文件名] 解压目录且显示详细信息
tar -xvf tar -xvf [打包文件名] 解包且显示详细信息
tar -cjvf tar -cjvf [压缩后文件名.bz2] [目录] 打包并压缩为bz2的文件
tar -xjvf tar -xjvf [压缩文件名.bz2] 解压.bz2的文件
  • 解压压缩都会保留源文件

2.9.4 压缩解压命令 —— zip

命令名称: zip
命令所在路径: /usr/bin/zip
执行权限: 所有用户
语法:
zip 选项[-r] [压缩后文件名] [文件或目录]
-r 压缩目录
功能描述: 压缩文件或目录
压缩后文件格式 .zip

命令 语法 含义
zip zip [压缩后文件名] [文件] 压缩文件
-r zip -r [压缩后文件名] [文件或目录] 压缩文件或目录
  • 会保留源文件

2.9.5 压缩解压命令 —— unzip

命令名称: unzip
命令所在路径: /usr/bin/unzip
执行权限: 所有用户
语法:
unzip [压缩文件]

命令 语法 含义
unzip unzip [压缩文件] 解压文件

2.9.6 压缩解压命令 —— bzip2

命令名称: bzip2
命令所在路径: /usr/bin/bzip2
执行权限: 所有用户
语法: bzip2 选项[-k] [文件]
-k 产生压缩文件后保留源文件
功能描述: 压缩文件
压缩后文件格式: .bz2

命令 语法 含义
bzip2 bzip2 [文件] 压缩文件且删除源文件
-k bzip2 -k [文件] 压缩文件且保留源文件

2.9.7 压缩解压命令 —— bunzip2

命令名称: bunzip2
命令所在路径: /usr/bin/bunzip2
执行权限: 所有用户
语法: bunzip2 选项[-k] [压缩文件]
-k 产生解压文件后保留源文件
功能描述: 解压文件

命令 语法 含义
bunzip2 bunzip2 [压缩文件] 解压文件且删除源文件
-k bunzip2 -k [压缩文件] 解压文件且保留源文件

2.10 网络命令

####2.10.1 网络命令 —— write
命令名称: write
命令所在路径: /usr/bin/write
执行权限: 所有用户
语法: write [用户名]
功能描述: 给用户发信息, 以ctrl + D保存结束
例子:
write chen

命令 语法 含义
write write [用户名] 给在线的指定用户发送信息

2.10.2 网络命令 —— wall

命令名称: wall
命令所在路径: /usr/bin/wall
命令英文原意: write all
执行权限: 所有用户
语法: wall [message]
功能描述: 发送广播信息
例子:
wall testmessage

命令 语法 含义
wall wall [message] 发送广播信息

2.10.3 网络命令 —— ping

命令名称: ping
命令所在路径: /usr/bin/ping
命令英文原意: ping
执行权限: 所有用户
语法: ping 选项 IP地址
-c 指定发送次数
功能描述: 测试网络连通性
例子:
ping -c 3 127.0.0.1

命令 语法 含义
ping ping [IP地址] 测试网络连通性
-c ping -c [次数] [IP地址] 测试指定次数的ip地址

2.10.4 网络命令 —— ifconfig

命令名称: ipconfig
命令所在路径: /sbin/ifconfig
命令英文原意: interface configure
执行权限: root
语法: ifconfig [网卡名称] [IP地址]
功能描述: 查看和设置网卡信息
例子:
ifconfig eth0 10.211.55.10

命令 语法 含义
ifconfig ifconfig 查看网卡信息
ifconfig [网卡名称] [IP地址] ifconfig [网卡名称] [IP地址] 设置网卡信息
  • root用户可以修改, 普通使用可以查看但是不能修改.

2.10.5 网络命令 —— mail

命令名称: mail
命令所在路径: /bin/mail
命令英文原意: Email
执行权限: 所有用户
语法: mail [用户名]
功能描述:查看发送电子邮件
例子: mail root

命令 语法 含义
mail mail [用户名] 发送邮件
mail mail 查看邮件

进入邮件系统操作解释:

命令 语法 含义
h h 查看是否有邮件
d d [数字] 删除指定邮件
q q 退出邮件系统
[数字] [数字] 查看指定邮件
help help 查看帮助信息

2.10.6 网络命令 —— last

命令名称: last
命令所在路径: /usr/bin/last
命令英文原意: last
执行权限: 所有用户
语法: last
功能描述: 查看列出目前和过去登入系统的用户信息
例子:
last

命令 语法 含义
last last 查看列出目前和过去登入系统的用户信息

2.10.7 网络命令 —— lastlog

命令名称: lastlog
命令所在路径: /usr/bin/lastlog
命令英文原意: last log
执行权限: 所有用户
语法: lastlog
功能描述: 显示所有用户登陆信息
例子: lastlog

命令 语法 含义
lastlog lastlog 显示所有用户登陆信息
-u lastlog -u [UID] 显示指定用户的登陆信息

2.10.8 网络命令 —— traceroute

命令名称: traceroute
命令所在路径: /usr/bin/traceroute
命令英文原意: traceroute
执行权限: 所有用户
语法: traceroute
功能描述: 显示数据包到主机间的路径
例子: traceroute

命令 语法 含义
traceroute traceroute 显示数据包到主机间的路径

2.10.9 网络命令 —— netstat

命令名称: netstat
命令所在路径: /usr/bin/netstat
命令英文原意: net state
执行权限: 所有用户
语法: netstat [选项]
功能描述: 显示网络相关信息
选项:
-t : TCP协议
-u : UDP协议
-l : 监听
-r : 路由
-n : 显示IP地址和端口号
例子:
netstat -tlun 查看本机监听的端口
netstat -an 查看本机所有的网络连接
netstat -rn 查看本机路由表

命令 语法 含义
netstat -tuln netstat -tuln 查看本机监听的端口
netstat -an netstat -an 查看本机所有的网络连接
netstat -rn netstat -rn 查看本机路由表(网关信息)

2.10.10 网络命令 —— setup

命令名称: setup
命令所在路径: /usr/sbin/setup
命令英文原意: setup
执行权限: 所有用户
语法: setup
功能描述: 文本模式配置
例子: setup
成功后进入如此页面(CentOS 7)

命令 语法 含义
setup setup 进入文件模式配置
  • 只有redhot系列的Linux才有此命令, 如UNIX是没有的.

2.11 挂载命令

2.11.1 挂载命令 —— mount

命令名称: mount
命令所在路径: /usr/bin/mount
命令英文原意: mount
执行权限: 所有用户
语法: mount [-t 文件系统] 设备文件名挂载点
功能描述: 挂载文件系统
例子: mount -t iso9660 /dev/sr0 /mnt/cdrom

命令 语法 含义
mount mount [文件系统(/dev/sr0)] [挂载点] 挂载文件系统到指定挂载点
umount umount [文件系统/挂载点] 卸载挂载
  • 不能在挂载点卸载挂载.

###2.12 关机重启命令

2.12.1 关机重启命令 —— shutdown

命令名称: shutdown
命令所在路径: /usr/sbin/shutdown
命令英文原意: shutdown
执行权限: 所有用户
语法: shutdown [选项] 时间
功能描述:关机重启
例子:
shutdown -h now

命令 语法 含义
shutdown -c shutdown -c 取消上一个关机命令
shutdown -h shutdown -h [时间] 在指定时间关机
shutdown -r shutdown -r [时间] 在指定时间重启
  • halt, poweroff(最好不要用), init 0 都可以进行关机
  • reboot, init 6 可以进行重启

init [数字] 详解:

系统运行级别 含义
0 关机
1 单用户 (类似于windows的安全模式), 启动最小的核心程序, root用户登陆
2 不完全多用户, 不含NFS服务(用于文件共享)
3 完全多用户
4 未分配
5 图形界面
6 重启

2.12.2 关机重启命令 —— logout

命令名称: logout
命令所在路径: shell 内嵌命令
命令英文原意: logout
执行权限: 所有用户
语法: logout
功能描述: 退出登陆
例子: logout

命令 语法 含义
logout logout 退出登陆

3. 文本编辑器

vim 是一个全屏幕文本编辑器, 它的作用是建立, 编辑, 显示文本文件.
vim 没有菜单, 只有命令.

3.1 vim 常用操作

命令 语法 含义
vi/vim vi/vim [文件名] 打开文件, 进入命令模式

3.1.1 vim 常用操作 —— 插入模式

插入模式:

命令 作用
a 在光标所在字符后插入
A 在光标所在行的行尾插入
i 在光标所在字符前面插入
I 在光标所在行的行首插入
o 在光标所在行的上一行插入新行
O 在光标所在行的后一行插入新行

3.1.2 vim 常用操作 —— 定位命令

定位命令(在命令模式下):

命令 作用
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG/ngg 到第n行
:n 到第n行
$ 移至行尾
0 移至行首

3.1.3 vim 常用操作 —— 删除命令

删除命令:

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

3.1.4 vim 常用操作 —— 复制和剪切命令

复制和剪切命令:

命令 作用
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行下n行
p,P 粘贴在当前光标所在行下或上行

3.1.5 vim 常用操作 —— 替换和取消命令

替换和取消命令:

命令 作用
r 取代光标所在处字符
R 从光标所在处开始替换字符, 按Esc结束
u 取消上一步操作

3.1.6 vim 常用操作 —— 搜索和搜索替换命令

搜索和搜索替换命令:

命令 作用
/string 搜索指定字符串, 要搜索时互留大小写:set ic
n 搜索指定字符串时显示下一个出现位置
:%s/old/new/g 全文替换指定字符串
:%s/old/new/c 全文替换指定字符串并每个都进行询问
:n1,n2s/old/new/g 在一定范围内替换指定字符串
:n1,n2s/old/new/c 在一定范围内替换指定字符串并每次都询问

3.1.7 vim 常用命令 —— 保存和退出命令

保存和退出命令:

命令 作用
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键, 保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出 (文件所有者及root可使用)

3.2 vim 使用技巧

3.2.1 vim 使用技巧 —— 导入命令执行结果

命令 语法 作用
r r [文件名] 导入其他文件的内容
! ! [命令] 在vi中执行命令
r ! r ! [命令] 导入命令执行结果

例子:
r ! date 导入时间

3.2.2 vim 使用技巧 —— 定义快捷键

命令 语法 作用
map map + (ctrl + v) + [定义的快捷键] 定义指定快捷键

3.2.3 vim 使用技巧 —— 连续行注释

命令 作用
:n1,n2s/^/#/g 添加注释
:n1,n2s/^#//g 去掉注释
:n1,n2s/^g 添加//
  • 一般命令是带有别名的, 可以使用\ [命令]来使用其原本的命令.

3.2.4 vim 使用技巧 —— 替换

命令 作用
:ab [字符] [替换字符] 定义输入字符, 空格回车后变为替换字符
  • 字符需要前后隔开才会识别

3.2.5 vim 使用技巧 —— 永久化快捷方式

以上命令重启后都会没有, 可以在用户的家目录下创建一个.vimrc的文件用于快捷键的永久化.

示例:
.vimrc:
set nu
ab mail chen

配置如此后进入vim 就会显示行号, 输入mail回车就会变为chen

4.Linux软件安装

4.1 软件包管理简介

分类: 源码包(包括脚本安装包), 二进制包 (RPM包, 系统默认包)

源码包:
优点: 开源, 可以修改源代码, 自由选择所需的功能, 稳定效率更高, 卸载方便.
缺点: 安装过程多, 编译时间长, 报错难解决.

RPM包:
优点: 包管理系统简单, 安装速度快
缺点: 不能看到源代码, 功能选择不如源码包灵活, 依赖性

4.2 RPM包管理

分为二种安装方式: rpm, yum.

4.2.1 RPM包管理 —— rpm命令管理

1.rpm包命名原则:
如: httpd-2.2.15-15.el6.centos.l.i686.rpm
httpd: 软件包名
2.2.15: 版本号
15: 软件发布次数
el6.centos: 支持Red Hat 6.x,CentOS 6.x和CloudLinux 6.x的下载
rpm: 拓展名

  • 其他一些不同的有noarch的, 表示与平台架构无关, 有x86_64表示适合的平台.
  • name 分为主包名和分包名

2.rpm包依赖性
树形依赖: a -> b -> c
环形依赖: a -> b -> c -> a
模块依赖: 模块依赖查询网站: www.rpmfind.net

4.2.2 RPM包管理 —— yum在线管理

可以在云端和本地, 自动的查找所需的所有包, 不会有依赖的影响, 但是要钱, centos不要钱.

4.3 rpm命令管理

4.3.1 rpm命令管理 —— 安装升级与卸载

包全名: 操作的包是没有安装的软件包时, 使用包全名,而且要注意路径.
包名: 操作已经安装的软件包时, 使用包名, 是搜索/var/lib/rpm中的数据库.

命令 语法 含义
rpm -i rpm -i [包全名] 安装包
rpm -iv rpm -iv [包全名] 安装包且显示详细信息
rpm -ivh rpm -ivh [包全名] 安装包且显示详细信息和进度
rpm -i --nodeps rpm -i -nodeps [包全名] 不检测依赖性安装
rpm -U rpm -U [包全名] 升级包
rpm -e rpm -e [包名] 卸载

4.3.2 rpm命令管理 —— 查询

命令 语法 含义
rpm -q rpm -q [包名] 查询包是否安装 q(query)
rpm -qa rpm -qa 查询所有安装的包 a(all)
rpm -qi rpm -qi [包名] 查询安装的包的信息 i(information)
rpm -qip rpm -qi [包全名] 查询未安装的包的信息 p(package)
rpm -ql rpm -ql [包名] 查询包中文件安装位置 l(list)
rpm -qlp rpm -qlp [包全名] 查询未安装包将要安装的位置 p(package)
rpm -qf rpm -qf [文件名] 查询文件是属于哪个包 f(file)
rpm -qR rpm -qR [包名] 查询安装包依赖性
rpm -qRp rpm -qRp [包全名] 查询未安装包的依赖性

4.3.3 rpm命令管理 —— 检验和文件提取

命令 语法 含义
rpm -V rpm -V [包名] 校验指定rpm包中文件 (verify)

验证结果详解:
例:
S.5…T c /etc/httpd/conf/httpd.conf

(S.5…T)解释:

参数 含义
S 文件大小是否改变
M 文件的类型或文件的权是否改变
5 文件MD5校验和是否改变 (可以看做文件内容是否改变)
D 设备中钙吗是否改变
L 文件路径是否变化
U 文件的属主(所有者) 是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变

c 解释:

参数 含义
c 配置文件 (config file)
d 普通文档 (documentation)
g 鬼文件(ghost file), 代表该文件不应该被这个RPM包包含
l 授权文件 (license file)
r 描述文件 (read me)

/etc/httpd/conf/httpd.conf 代表写文件发生了改变


RPM包中文件提取.
一般当误删了安装路径中的一个文件, 无需重新安装, 只要到安装包中去提取文件再覆盖到自己的就可以.

命令: rpm2cpio [全包名] | cpio -idv [此cpio中要的文件路径]
rpm2cpio的作用是将rpm转换成cpio, 接着在此cpio中找需要的路径, 如ls在/usr/bin/ls ,最后会将找到的放在当前目录下.

4.4 yum在线管理

4.4.1 yum在线管理 —— IP地址配置和网络yum源

yum源有很多在路径:/etc/yum.repos.d下, 默认使用Base源,还有CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo等, 光盘等中配置.

网络yum源配置:
配置文件: /etc/yum.repos.d/CentOS-Base.repo

配置文件中使用[], 分为多个池, 默认全部采用, 有base, updates, extras 等.

 13 [base]14 name=CentOS-$releasever - Base15 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra16 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/17 gpgcheck=118 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[base] : 容器名称, 软件池的名称, 可以修改
name : 容器说明, 可以任意修改
mirrorlist : 镜像站点, 可以注释
baseurl : yum源服务器的地址, 默认是官方的yum源服务器, 可以修改为别的yum源.
enabled : 此容器是否生效, 默认是1且不显示, 而且每个池默认都打开.
gpgcheck: 如果是1是指RPM的数字证书生效, 如果是0 则不生效.
gpgkey : 数字证书的公钥文件保存位置. 不用修改.

基本不用修改只要能上网就可以.

4.4.2 yum在线管理 —— yum命令

命令 语法 含义
yum list yum list 查询所有可用的软件包列表
yum search yum search [关键字] 搜索服务器上所有和关键字相关的包
yum install yum install [包名] 安装包并询问
yum -y install yum install [包名] 安装并不询问
yum -y update yum -y update [包名] 升级指定包
yum -y update yum -y update 升级所有东西(慎用!)
yum -y remove yum -y remove [包名] 卸载指定包名(会把所有相关的卸载掉, 慎用!)
yum grouplist yum grouplist 查询可用的软件组列表 (远程显示的是中文, 本机显示的是英文)
yum groupinstall yum groupinstall [软件组名(英文)] 安装软件组
yum groupremove yum groupremove [软件组名] 卸载指定软件组

4.4.3 yum在线管理 —— 光盘yum源

  1. 首先挂载光盘.
  2. 进入/etc/yum.repos.d目录,将出了yum-Media.repo 的文件名都改变, 接着煎yum-Media.d中的enabled=0改为enabled=1, 要注意格式, 不能有多余的空格和注释要顶格写.

4.5 源码包管理

4.5.1 源码包管理 —— 源码包和RPM包的区别

区别: 安装路径不同
RPM默认安装路径:

路径 含义
/etc/ 配置文件安装位置
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的库函数保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置

源码包安装一般放置在: /usr/local/软件名/

例: 安装完httpd 后, 启动httpd 服务:
centos 6 启动命令: service httpd start
centos 7 启动命令: systemctl start httpd.service
centos 7 可能还需要关闭防火墙才可以访问到——
systemctl stop firewalld.service

即可看到如下页面:

这是默认显示的页面, 也可以在/var/www/html里创建一个index.html页面.

4.5.2 源码包管理 —— 源码包安装过程

  1. 安装准备
  2. 下载源码包: http://mirror.bit.edu.cn/apache/httpd/
  3. 使用工具将源码包移动到系统中, 接着使用tar进行解压, 进入目录查看文件INSTALL和README, 得知怎么安装.
    如下:

    1. ./configure --prefix=PREFIX
    2. make
    3. make install
    4. PREFIX/bin/apachectl start

./configure 软件配置和检查
1. 定义需要的功能选项
(我们只需定义其安装路径即可)
2. 检测系统环境是否符合安装要求
3. 吧定义好的功能选项和检测系统环境的信息都写入Makefile文件, 用于后续的编辑.
运行命令:
./configure --prefix=/usr/local/apache2
make
用于编译源码包.

make install
安装到路径下.

PREFIX/bin/apachectl start
告知如何启动.
如: /usr/local/apache2/bin/apachectl start
(启动前需要先保证端口80没有被占用)

  • 要是想卸载httpd, 只要删除安装目录就可以.

4.6 脚本安装包

脚本安装包不是独立的软件包类型, 常见安装的是源码包.
是人为把安装过程写成了自动安装的脚本, 只要执行脚本, 定义简单的参数, 就可以完成安装.

如安装webmin, 下载完成之后同样进入解压, 最后运行解压文件夹下的setup.sh即可.
webmin是一个使用网页图形化管理Linux的一个软件.
可以在: https://sourceforge.net/projects/webadmin/
里下载

5. 用户和用户组管理

5.1 用户配置文件

5.1.1 用户配置文件 —— 用户信息文件

用户信息文件路径: /etc/passwd
文件内容格式:
name: password:UID:GID:GECOS:directory:shell
root:x :0 :0 :root :/root :/bin/bash

字段 含义 详解
name 用户名称
password 密码标志 x:有密码, 没有密码的话只能本机登陆, 不可远程登陆, 真的密码放在/etc/shadow 里面(只有root可看且加密)
UID UID(用户ID) 0:超级用户 1-999:系统用户(伪用户, 用于系统命令服务使用, 不能登陆不要删除) 1000-65535:普通用户 (centos 7)
GID GID (用户初始组ID) 初始组(老婆):每个用户只能有一个初始组, 一般为同用户名; 附加组(小三):可加入多个, 并拥有其权限, 根据/etc/group 匹配组名
GECOS 用户说明 可以不加说明
directory 家目录 普通用户: /home/用户名/ 超级用户: /root
shell 登陆之后shell shell就是Linux的命令解释器, 超级和普通都是bin/bash, 系统用户都是sbin/nologin, 要是想竟用某个用户可以改为nologin.
  • 一般普通用户变为超级用户, 就是把普通用户的UID改为0, 记得备份.

5.1.2 用户配置文件 —— 影子文件

因/etc/shadow的权限为000,所以叫做shadow.
文件内容格式:
root:$6$7fdFfOrdWjWYm.zx$MZsK6KtvUFwafvlk6uSvKfPU7HFAOvO36cEsCacrLYtA7mZ5xxN9v.80Ecv2epSH6U9d.Puii4fg7PAWDTrtx1:18315: 0:99999:7:5:18375:

字段 含义 详解
root 用户名
$6$7fdFfOrdWjWYm.zx$MZsK6KtvU
Fwafvlk6uSvKfPU7HFAOvO36cEsCacrL
YtA7mZ5xxN9v.80Ecv2epSH6U9
d.Puii4fg7PAWDTrtx1
加密密码 加密算法为SHA512散列加密算法; 如果密码是!! 或 * 代表没有密码, 不能登陆;可以在密码前加!来禁用密码.
18315 密码最后一次修改时间 使用1970年1月1日作为标准时间, 每过一天时间戳加一
0 二次密码的修改时间间隔时间(和第三个字段比较) 表示上一次到下一次修改密码所需时间
99999 密码的有效期
7 密码到期的之前的警告天数
5 密码到期的宽限时间 0:代表到期后立即失效 -1:代表密码永远不会失效
18375 帐号失效时间 一旦到时间就失效(不管有效期限), 要用时间戳表示; date -d “1970-01-01 18375 days” 可以获得时间戳天数的那一天; echo $((date --date=“2014/01/06” +%s)/86400+1)) 可以得到目标日期的时间戳
保留字段

5.1.3 用户配置文件 —— 组信息文件

组信息文件: /etc/group

字段 含义
第一字段 组名
第二字段 组密码标志
第三字段 GID
第四字段 组中附加用户

组密码文件: /etc/gshadow

字段 含义
第一字段 组名
第二字段 组密码
第三字段 组管理员用户名
第四字段 组中附加用户

5.2 用户管理相关文件

  1. 用户的家目录
    普通用户: /home/用户名/ , 所有者和所属组都是此用户, 权限是700.
    超级用户: /root/, 所有者和所属组都是root用户
    , 权限是550.
    把普通用户改为超级用户(在/etc/passwd里改UID为0), 他的家目录不会改变, 权限会改变.
    2.用户的邮箱
    /var/spool/mail/用户名/
    3.用户模版
    /etc/skel.
    添加用户会自动创建文件, 可以在此文件夹中放置文件以每次创建用户都会自动的创建放入文件.

5.3 用户管理命令

5.3.1 用户管理命令 —— useradd

使用 useradd 添加用户.

命令 语法 含义
-u useradd -u [UID] [用户名] 指定用户的UID号
-d useradd -d [目录] [用户名] 指定用户的家目录
-c useradd -c [备注信息] [用户名] 指定用户的备注
-g useradd -g [组名] [用户名] 指定用户的初始组
-G useradd -G [组名,组名] [用户名] 添加附加组
-s useradd -s [shell] [用户名] 指定用户的shell

用户缺省默认值的配置文件:
/etc/default/useradd

  1 # useradd defaults file2 GROUP=100  #用户默认组3 HOME=/home #用户家目录  4 INACTIVE=-1 #密码过期宽限天数 (shadow文件7字段)5 EXPIRE= #密码失效时间(shadow第8个字段)6 SHELL=/bin/bash #默认shell7 SKEL=/etc/skel # 模版目录8 CREATE_MAIL_SPOOL=yes #是否建立邮箱

shadow文件的其他字段默认值的定义:
/etc/login.defs

MAIL_DIR /var/spool/mail #创建邮箱的目录PASS_MAX_DAYS   99999 #密码有效天数 (shadow第5个字段)
PASS_MIN_DAYS   0 # 密码修改间隔 (shadow第4个字段)
PASS_MIN_LEN    5 # 密码最小长度(PAM)(其实没用, 系统采用别的方式验证, 最小8为)
PASS_WARN_AGE   7 #密码到期警告天数(shadow第6个字段)UID_MIN                  1000 #UID 最小值
UID_MAX                 60000 #UID 最大值
SYS_UID_MIN               201 #系统UID 最小值
SYS_UID_MAX               999 #系统UID 最大值GID_MIN                  1000 #组ID 最小值
GID_MAX                 60000 #组ID 最大值
SYS_GID_MIN               201 #系统组ID 最小值
SYS_GID_MAX               999 #系统组ID 最大值CREATE_HOME yes #是否创建家目录UMASK           077 #家目录默认的权限为700USERGROUPS_ENAB yes #在组中没有其他成员的时候, 允许userdel删除用户的组ENCRYPT_METHOD SHA512 #密码的加密算法

5.3.2 用户管理命令 —— passwd

passwd用于修改用户密码

命令 语法 含义
passwd passwd 更改当前用户的密码
passwd passwd [用户名] 给指定用户添加密码 (只有root用户可以用)
-S passwd -S [用户名] 查询指定用户的密码状态(shadow)
-l passwd -l [用户名] 锁定指定用户(实际就是在shadow的密码前加了!!)(已经登陆的用户不会退出)
-u passwd -u [用户名] 解锁指定的用户
  • 使用echo “123” | passwd --stdin user 来重定向输入密码.

5.3.3 用户管理命令 —— usermod

usermod 用于修改用户信息
usermod路径 : user/sbin/usermod

命令 语法 含义
-u usermod -u [UID] [用户名] 修改指定用户的UID号
-c usermod -c [备注信息] [用户名] 修改指定用户的备注
-g usermod -g [组名] [用户名] 修改指定用户的初始组
-G usermod -G [组名,组名] [用户名] 修改附加组
-L usermod -L [用户名] 锁定指定用户( shadow里添加一个!)
-U usermod -U [用户名] 解锁指定用户

5.3.4 用户管理命令 —— chage

chage 用于修改用户密码的状态

命令 语法 含义
-l chage -l [用户名] 显示指定用户的详细密码状态
-d chage -d [时间戳] [用户名] 修改指定用户的密码最后一次修改时间(3)
-m chage -m [天数] [用户名] 修改密码间隔(4)
-M chage -M [天数] [用户名] 修改密码有效期(5)
-W chage -W [天数] [用户名] 修改密码过期警告天数(6)
-I chage -I [天数] [用户名] 修改密码过期宽限天数(7)
-E chage -E [时间戳] [用户名] 修改密码失效时间(8)
  • 把用户的密码最后一次修改时间改为0, 系统会认为它从未改过密码, 即使有初始密码也会一登陆就要求改密码, 可以使用chage -d 0 [用户名] 进行改时间.

5.3.5 用户管理命令 —— userdel

创建一个用户会添加如下文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/var/spool/mail/用户名
/home/用户名

手工删除一个用户只要删除以上文件就可以达到同样的效果

命令 语法 含义
-r userdel -r [用户名] 删除用户同时删除用户家目录

5.3.6 用户管理命令 —— id

可以查看用户的信息.
uid=1000(chen) gid=1000(chen) 组=1000(chen),0(root)

命令 语法 含义
id id [用户名] 查看用户的UID,GID,组信息

5.3.7 用户管理命令 —— su

su用于用户身份切换

命令 语法 含义
su su [用户名] 切换用户, 但是环境没有切换
- su - [用户名] 切换用户, 同时切换环境
-c su - [用户名] -c “命令” 使用指定用户执行指定命令
  • 可以使用env查看当前用户所在的环境.

5.3.8 用户管理命令 —— groupadd

groupadd 用于添加用户组.

命令 语法 含义
groupadd groupadd [组名] 添加用户组
groupadd -g groupadd -g [GID] [组名] 添加指定GID的用户组

5.3.9 用户管理命令 —— groupmod

groupmod 用于修改用户组.

命令 语法 含义
groupmod -g groupmod -g [GID] [组名] 修改组ID
groupmod -n groupmod -n [新组名] [组名] 修改组名

5.3.10 用户管理命令 —— groupdel

groupdel 用于删除组.

命令 语法 含义
groupdel groupdel [组名] 删除组名
  • 删除组的时候必须保证其没有被用户做为初始组,不然会无法删除.

5.3.11 用户管理命令 —— gpasswd

gpasswd 用于把用户添加入组或从组中删除 (附加组).

命令 语法 含义
gpasswd -a gpasswd -a [用户名] [组名] 添加用户入组
gpasswd -d gpasswd -d [用户名] [组名] 删除用户从组中

6.权限管理

6.1 ACL权限

6.1.1 ACL权限 —— ACL权限简介与开启

已知有三类用户对权限而言, 所有者, 所属组, 其他人, 按如此分类权限难免会遇到不能达到要求的分配, 比如第四类用户的出现就无法合理的分配权限. ACL权限可以使之每个用户, 每个组都拥有单独的权限.

要使ACL权限能够使用, 必须使其所在分区拥有ACL权限.
1.使用 df -h 查看系统有哪些分区和挂载点.

2.使用 dumpe2fs -h [分区名] 查看分区的详细信息, 查看 Default mount options 这一栏看是否支持acl. (默认支持acl).

3.如果分区不支持acl. 采用 mount -o remount,acl [分区名], 重新挂载指定分区, 并挂载加入acl权限. (临时生效, 关机则无).

4.要使acl权限永久生效, 打开 /etc/fstab 文件, 找到指定的分区, 加入acl权限, 默认是default(但可能默认就支持acl), 实在不行就在default后加入acl.(千万不可多加别的符号).
(光驱是没有在此文件中显示的, 因为光盘不能保证每次都挂载).
(需要重启或是重新挂载分区)
重新挂载 : mount -o remount [分

6.1.2 ACL权限 —— 查看与设定

getfacl 用于查看acl权限
setfacl 用于设定acl权限

setfacl详解:

命令 语法 含义
-m setfacl -m [u/g]:[用户/用户组]:[权限] [文件或目录] 设定acl权限

getfacl详解:

命令 语法 含义
getfacl getfacl [文件或目录] 显示文件的权限

6.1.3 ACL权限 —— 最大有效权限与删除

使用getfacl可以查看最大的有效权限, 从mask可以查看其最大用户权限, 最大权限mask和权限相与得到真实的权限.

命令 语法 含义
-m setfacl -m m:[权限] [文件或目录] 设定acl最大权限
-x setfacl -x [u/g]:[用户/用户组] [文件或目录] 删除指定用户或用户组的ACL权限
-b setfacl -b [文件或目录] 删除所有文件或目录的ACL权限
  • 貌似mask的值和文件的group权限时一样的, 如果同时此文件有所有者的权限又有此用户的acl权限, 二者同时存在且不同时, 采用所有者的权限, 而且假如所有者的权限比所有者acl的权限低是不可能的(改的时候会同时改成一样的), 只会比他高, 所以只要看所有者权限即可.
  • acl权限和文件的组权限感觉有千丝万缕的关系, 添加acl用户权限会影响文件的组权限, mask的限制同时也会影响组权限, 而不只是acl方式添加的组和用户.

6.1.4 ACL权限 —— 默认与递归ACL权限

递归是fumble在设定ACL权限时 所有的子文件和子目录也会拥有相同的ACL权限.

命令 语法 含义
-R setfacl -m [u/g]:[用户名/用户组]:[权限] -R [目录] 递归设定文件下所有的文件和目录设置权限

默认ACL权限的作用是如果给父目录设定了默认ACL权限, 那么父目录中所有新建的子文件都会继承父目录的ACL权限.

设置指定文件夹下新建的其他文件对于指定用户的权限默认设置为.

命令 语法 含义
d setfacl -m d:[u/g]:[用户名/用户组]:[权限] [目录] 设置默认ACL权限
  • 以上命令只能使用于目录

6.2 文件特殊权限

6.2.1 文件特殊权限 —— SetUID

  • 只有可执行的二进制程序(命令)才可以设定SUID权限
  • 命令执行者要对该二进制程序(命令)有x权限
  • 命令执行者在执行该程序(命令)时获得该程序(命令)文件的所有者的身份
  • SetUID权限只在该程序(命令)执行过程中有效

特殊权限的意义不是在与让其可以执行, 而是在于其命令会牵扯到一些此用户无法执行的命令, 所以赋予其权限, 让其可以执行, 所以其前提就是此命令必须可执行, 其次才是考虑特殊权限.

命令 语法 含义
chmod chmod 4[权限] [二进制文件] 设定特殊权限
chmod chmod u+s [二进制文件] 设定特殊权限
chmod chmod [权限] [二进制文件] 删除特殊权限
chmod chmod u-s [二进制文件] 删除特殊权限
  • 使用 chmod 4755 /usr/bin/vim 就可以使普通用户也有修改任何文件的权限.
  • 此例子和passwd的命令权限一致, 可参考
  • 当权限是大写的S的时候, 说明此文件不是可执行文件, 这是错误的.

6.2.2 文件特殊权限 —— SetGID

针对二进制文件

  • 只有可执行的二进制程序(命令)才可以设定SGID权限
  • 命令执行者要对该二进制程序(命令)有x权限
  • 命令执行者在执行该程序(命令)时获得该程序(命令)文件的所有组的身份
  • SetGID权限只在该程序(命令)执行过程中有效

针对目录

  • 普通用户必须对此目录有rx权限, 才可以进入目录
  • 普通用户在此目录中的有效组会变成此目录的属组
  • 若普通用户对此目录拥有w权限时, 新建的文件的默认属组是这个目录的属组.(也就是这个文件夹之前是啥组的, 现在别的用户里面创建出来的文件的组是和这个文件夹的组是一致的, 原本我们创建一个文件其所有者和所属组都是自己, 现在不是了)
命令 语法 含义
chmod chmod 2[权限] [二进制文件] 设定特殊权限
chmod chmod g+s [二进制文件] 设定特殊权限
chmod chmod g-s [二进制文件] 删除特殊权限
  • 此例子可以采用locate命令参考.

6.2.3 文件特殊权限 —— Sticky BIT

  • 粘着位只对目录有效.
  • 普通用户对目录拥有wx权限, 即普通用户可以在此目录拥有写入权限
  • 如果没有粘着位, 因为普通用户拥有w权限, 所以可以删除此目录下所有文件, 包括其他用户建立的文件. 一旦赋予了粘着位, 除了root和所有者可以删除所有的文案, 普通用户就算拥有w权限, 也只能删除自己建立的文件, 但是不能删除其他用户建立的文件.
命令 语法 含义
chmod chmod 1[权限] [目录] 设定特殊权限
chmod chmod o+t [目录] 设定特殊权限
chmod chmod o-t [目录] 删除特殊权限

6.3 文件系统属性权限

6.3.1 文件系统属性权限 —— chattr

命令 语法 含义
i chattr [±=] i [文件或目录] 给文件或目录设置i属性. 文件: 对所有用户(包括root)而言, 不能删除, 修改, 改名 等除了读之外的任何操作. 目录: 对所有用户而言, 只能修改目录下的文件,不能删除和新建.
a chattr [±=] a [文件或目录] 文件: 只能给文件增加数据, 不能删除也不能修改(不能使用vi进行增加数据, 可以用echo重定向). 目录: 只允许目录下的文件的新建和修改(不包括改名), 不能删除.
  • 此命令主要用于免于误操作, 而不是用于限制用户.

6.3.2 文件系统属性权限 —— lsattr

命令 语法 含义
-a lsattr -a 显示所有的文件和目录的属性
-d lsattr -d [目录] 显示目录本身的属性, 而不是其子文件

6.4 系统命令sudo权限

  • root把本来只能超级用户执行的命令赋予普通用户执行
  • sudo的操作对象是系统命令
命令 语法 含义
visudo visudo 查看sudoers文件, 等同与 vi /etc/sudoers
sudo -l sudo -l 显示可以使用的命令
sudo sudo [路径+命令] 使用sudo执行命令

配置文件格式 sudoers :
root ALL=(ALL) ALL
1 2 3 4

  1. root 用户名
  2. ALL 被管理主机的地址, 其指的不是哪台ip的主机可以访问, 指的是可以访问哪台主机, ALL和本机ip都是表示可以访问这台主机
  3. (ALL) 可使用的身份, 可省略, ALL代表的就是root用户, 指的是其可升级为root用户执行命令
  4. ALL 授权命令(绝对路径), ALL代表所有命令, 此处可以具体到命令的参数.

7. 文件系统管理

7.1 回顾分区和文件系统

  1. 分区类型
  • 主分区: 总共最多只能分四个
  • 扩展分区: 只能有一个, 也算主分区的一种, 也就是说主分区加扩展分区最多有4个. 但是扩展分区是不能存储数据和格式化的, 必须在划分成逻辑分区才能使用.
  • 逻辑分区: 逻辑分区是在扩展分区中划分的, 如果是IDE硬盘, Linux最多支持59个逻辑分区, 入骨哦是SCSI硬盘最多支持11个逻辑分区.
分区 设备文件名
主分区1 /dev/sda1
主分区2 /dev/sda2
主分区3 /dev/sda3
扩展分区 /dev/sda4
逻辑分区1 /dev/sda5
逻辑分区2 /dev/sda6
逻辑分区3 /dev/sda7
  • 逻辑分区默认是从sda5开始, 即使没有主分区.
  • centos 6 默认文件系统ext4, centos 7 是xfs.

7.2 文件系统常用命令

7.2.1 文件系统常用命令 —— df

使用df命令用于查看文件系统信息.

命令 语法 含义
df df 显示主要的文件系统信息
df df [挂载点] 显示指定挂载点的文件系统信息
-a df -a 显示所有的文件的系统信息, 包括特殊文件系统, 如/proc /sysfs(内存挂载点).
-h df -h [挂载点] 使用习惯单位显示容量, 如kb, mb或gb
-T df -T [挂载点] 显示文件系统类型
-m df -m [挂载点] 以mb为单位显示容量
-k df -k [挂载点] 以kb为单位显示容量
  • 主要用于查看分区的占用情况

7.2.2 文件系统常用命令 —— du

du命令用于统计目录或文件大小.

命令 语法 含义
-a du -a [目录或文件] 显示每个子文件的磁盘占用率. 默认只统计子目录的磁盘占用量.
-h du -h [目录或文件] 使用习惯单位显示磁盘占用量, 如KB, MB, GB
-s du -s [目录或文件] 统计总占用量, 而不列出子目录和子文件的占用量 (计算的也只是子目录的总占用量)
  • ls命令也显示可大小, 但是其表示的是文件名等信息所占用的大小, 而不是其中的数据所占用的大小.
  • 此命令用于查看文件的大小.

df命令和du命令的不同之处:

  1. du命令会扫描, 会耗费资源.
  2. du和df计算同一个路径, 发现大小不一样, 而且df还更大, 这是因为df还要计算被命令或程序占用的空间(最常见的就是文件删除了, 但是程序没有释放空间)
  3. du命令是面向文件的, 只会计算文件或目录占用的空间.
  4. 实际我们还是要看df命令所占用的空间

7.2.3 文件系统常用命令 —— fsck

fsck用于修复文件系统.

命令 语法 含义
fsck fsck [分区设备文件名] 修复指定分区
-a fsck -a [分区设备文件名] 不用显示用户提示, 自动修复文件系统
-y fsck -y [分区设备文件名] 自动修复. 和-a作用一致, 不过有些文件系统只支持-y

7.2.4 文件系统常用命令 —— dumpe2fs

可以查看分区中数据块的大小是多大.

命令 语法 含义
dumpe2fs dumpe2fs [设备文件名] 显示磁盘状态命令
  • ext4文件系统可以支持此命令, xfs不支持.

7.2.5 文件系统常用命令 —— 挂载命令

将设备文件名和挂载点联系起来.

命令 语法 含义
mount mount 显示系统中已经挂载的设备
-l mount -l 显示已经挂载的设备, 并显示卷标名称
-a mount -a 按照配置文件/etc/fstab的内容重新挂载一边
-t mount -t [文件系统] [设备文件名] [挂载点] 指定挂载的文件系统类型, 可以用ext3, ext4, iso9660等文件系统
-L mount -L [卷标名] [设备文件名] [挂载点] 挂载指定卷标的分区
-o mount -o [选项] [挂载点] 可以指定挂载的额外选项

-o的选项 :

  • remount: 重新挂载
  • exec/noexec : 是否允许分区中可以执行文件, 即使文件有执行权限.

例子: mount -o remount,noexec /home. 重新挂载home使之不能执行.

7.2.6 文件系统常用命令 —— 挂载光盘和U盘

挂载光盘:

  1. 建立挂载点(最好挂载点设置在media下)
    mkdir /media/cdrom
  2. 挂载光盘
    mount -t iso9660 /dev/cdrom /media/cdrom
    或者 mount /dev/sr0 /media/cdrom
    -t iso9660 这个是默认的, 可以省略.
    (/dev/cdrom和/dev/sr0是同一个目录, cdrom是sr0的软链接)
  3. 使用完成后卸载光盘
    umount /media/cdrom
    或者 umonut /dev/cdrom
    (卸载的时候记得cd离开那个目录)

挂载U盘:

  1. 把U盘插入电脑, 让虚拟机识别, 使用目录fdisk查看U盘的设备文件名
    fdisk -l 查看分区
  2. 使用命令将设备文件名和挂载点连接.(最好将U盘挂载在/mnt/usb下)
    U盘的文件系统: FAT16 在 -t 中是fat
    FAT32 在 -t中是vfat.
    mount -t vfat /dev/sdb1 /mnt/usb
  • 如果有乱码需要改编吗格式.
  • Linux默认是不支持NTFS文件系统的.

7.2.7 文件系统常用命令 —— 支持NTFS文件系统

要支持NTFS文件系统需要下载驱动.
使用一下网址可以下载第三方NTFS的插件以支持.
https://www.tuxera.com/community/open-source-ntfs-3g/

  1. 下载完成后进行解压安装.
    tar -zxvf ntfs-3g_ntfsprogs-2017.3.23.gz
    接着进入解压目录使用命令进行安装:
    ./configure && make && make install
    (需要提前下载好gcc)

  2. 安装完成后使用命令进行挂载.
    mount -t ntfs-3g /dev/sdb1 /mnt/usb

7.3 fdisk分区

7.3.1 fdisk分区 —— fdisk命令分区过程

  1. 如果有未分配的硬盘, 使用fdisk -l 查看是否有未分配的sdb.
    接着使用命令对sdb进行分区:
    fdisk /dev/sdb (无需加数字, 因为还没分区)

  2. 利用以下命令进行分区.
    逻辑分区的选项需要再分配扩展分区后在会出现.

  3. 重启或者使用命令partprobe进行重新读区分区表信息.

  4. 使用命令对分区进行格式化, 格式成指定的文件系统.
    mkfs -t ext4 /dev/sdb1

  5. 挂载分区.
    mount /dev/sdb1 /disk1

7.3.2 fdisk分区 —— 自动挂载与fstab文件修复

用mount挂载的话, 关机就会消失, 需要再次挂载.

  1. /etc/fstab 文件:
  • 第一字段: 分区设备文件名或UUID (硬盘通用唯一识别码)
    可以使用dumpe2fs查看分区的UUID(ext4文件系统可用)
  • 第二字段: 挂载点
  • 第三字段: 文件系统
  • 第四字段: 分区挂载的时候使用默认权限
  • 第五字段: 指定分区是否被dump备份, 0代表不备份, 1代表每天备份, 2代表不定期备份. 保存在每个分区的lost+found中
  • 第六字段: 指定分区是都被fsck检测, 0代表不检测, 其他数字代表检测的优先级, 数字越小优先级越高.(根分区是最优先检测的, 我们自己设置时应该都大于1).

只要添加如上格式的条例就可以每次开机就挂载.

假如以上文件写错了, 就会导致系统奔溃.
重启的话可以输入密码进行错误文件的修改, 同时再重启.

7.4 分配swap分区

使用free命令可以查看系统内存和swap分区使用情况.

  • 缓存(cached): 是指把读取出来的数据保存在内存当中, 当再次读取时, 不用读取硬盘而直接从内存当中读取, 加速了数据的读取过程.
  • 缓冲(buffers): 是指在写入数据时, 先把分散的写入操作保存到内存当中, 当达到一定程度再集中写入硬盘, 减少了磁盘碎片和硬盘的反复寻道, 加速了数据的写入过程.

分配swap分区过程:

  1. 首先先将/dev/sdb分一部分给swap.
    fdisk /dev/sdb 进入分区界面
  2. 接着在交互界面使用 n进行分区, 但是使用L命令可以查看到swap分区的ID是82, 而我们使用p命令可以看到我们的分区是83, 所以要使用t命令进行修改ID, 改完之后使用命令w退出.
  3. 分区完后是格式化分区, swap和别的分区不同, 命令也不同.
    mkswap /dev/sdb2 (如果不能找到分区, 可以重启或使用命令partprobe)
  4. 接着将新的swap分区和以前的加在一起.
    swapon /dev/sdb2 (加入swap分区, 类似于挂载)
    swapoff /dev/sdb2 (取消swap分区)
  5. 已知我们这样挂载分区重启之后就会失效, 所以还是要将其加入到/etc/fstab中.
    /dev/sdb2 swap swap defaults 0 0
    (注意挂载的地方是swap, 而不是/swap)

8. Shell基础

8.1 Shell概述

  • Shell是一个命令行解释器.
  • Shell的语法类型有: Bourne和C. Bourne 只要包括sh, ksh, Bash, psh, zsh; C家族主要包括: csh, tcsh. Linux使用的是Bash, 其和sh兼容.
  • /etc/shells 中有Linux所支持的shell, 可以通过命令sh, tsh等进行切换.
  • 以上总结来说, shell就是我们的那个交互窗口, 就是个编辑器, 其支持很多语言, 可以在/etc/shells里面看, 直接输入语言名字就可以切换语言, shell的优点在于, 其可以直接使用系统命令.

8.2 Shell脚本的执行方式

  1. echo 输出命令
命令 语法 含义
echo echo [输出内容] 输出指定内容
-e echo -e [输出内容] 支持反斜线控制的字符转换

控制字符:

  • echo -e “\e[;31mabcd\e[0m” 使用此命令可以输出红色的abcd, 30m=黑色, 31m=红色, 32m=绿色, 33m=黄色, 34m=蓝色, 35m=洋红, 36m=青色, 37m=白色.

编写shell, #开头的是注释, 但是第一行#!/bin/bash不是注释, 其表示此脚本使用/bin/bash来解释, 不能少.

shell执行方式:

  1. 如果脚本有执行权限, 那么可以使用绝对路径或相对路径的方式进行执行.
  2. 如果脚本没有执行权限或者有, 可以采用 bash + 绝对路径或相对路径的方式执行.
  • windows 和 Linux 中的换行符是不同的, 所以如果将windows中的文件放到Linux 中不一定能执行, 可以使用 cat -A [文件名] 查看隐藏的字符, 然后可以安装dos2unix进行转换.

8.3 Bash的基本功能

8.3.1 历史命令与命令补全

命令 语法 含义
history history 显示此用户的历史命令
-c history -c 清空历史命令
-w history -w 将缓存中的命令写入/用户/.bash_history中
  • 历史命令默认保存1000条, 可以在/etc/profile中修改保存条数, 需要使用命令或重启生效.

历史命令的调用:

  • 使用上, 下箭头调用以前的历史命令
  • 使用!n重复执行第n条命令, 不知道哪条用history查看
  • 使用!!重复执行上一条命令
  • 使用!字符串重复执行最后一条以该字串开头的命令

命令与文件补全:

  • 在Bash中, 命令与文件补全是非常方便与常用的, 按Tab就会自动补全.

8.3.2 命令别名与常用快捷键

命令 语法 含义
alias alias 查询命令别名
alias alias [别名]=[原命令] 设定命令别名
unalias unalias [别名] 取消设定别名

命令执行时顺序:

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

让别名永久生效:
修改 /用户/.bashrc 文件.

常用快捷键:

8.3.3 输入输出重定向

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/stderr 2 标准错误输出

输出重定向:

类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式把命令的正确输出到指定的文件或设备当中
标准输出重定向 命令 >> 文件 以追加的当时把命令的正确输出到指定文件或设备
标准错误输出重定向 错误命令 2> 文件 以覆盖的方式把命令的错误输出到指定的文件或设备中
标准错误输出重定向 错误命令 2>> 文件 以追加的方式, 把命令的错误输出到指定文件或设备中
正确输出和错误输出同时保存 命令 > 文件 2>&1 以覆盖的方式把命令的正确和错误的输出到指定的文件或设备当中
正确输出和错误输出同时保存 命令 >> 文件 2>&1 以追加的方式把命令的正确的和错误的输出到指定的文件或设备当中
正确输出和错误输出同时保存 命令 &> 文件 以覆盖的方式把命令的正确和错误的输出到指定的文件或设备当中
正确输出和错误输出同时保存 命令 &>> 文件 以追加的方式把命令的正确的和错误的输出到指定的文件或设备当中
正确输出和错误输出同时保存 命令 > 文件1 2> 文件2 把正确的输出最佳到文件1中, 把错误的输出覆盖的到文件2中
正确输出和错误输出同时保存 命令 >> 文件1 2>> 文件2 把正确的输出最佳到文件1中, 把错误的输出追加的到文件2中

输入重定向:

命令 语法 含义
wc wc 输入内容, 按ctrl + D , 统计行数, 单词数, 字符数
wc wc [文件名] 统计文件的行树, 单词数, 字符数
-c wc -c [文件名] 统计字节数
-w wc -w [文件名] 统计单词数
-l wc -l [文件名] 统计行数
< wc < [文件名] 统计文件的行树, 单词数, 字符数

8.3.4 多命令顺序执行与管道符

多命令顺序执行:

多命令执行符 格式 作用
; 命令1;命令2 命令按照顺序执行, 即使有命令错误
&& 命令1&&命令2 命令按照顺序执行, 只要有错误的命令就停止
|| 命令1||命令2 命令按照顺序执行, 执行到正确的为止
  • 命令 && echo “yes” || echo “no”

管道符:

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

8.3.5 通配符和其他特殊符号

通配符 作用
? 匹配任意一个字符
* 匹配0个或任意多个任意字符, 也就是可以匹配任何内容
[] 匹配括号中任意一个字符. 例如[abc] 代表一定匹配一个字符, 或者是a, 或者是b, 或者是c
[-] 匹配中括号中任意一个字符, - 代表一个单位, 例如: [a-z]代表匹配一个小写字母
[^] 逻辑非, 表示匹配不是中括号内的一个字符. 例如: [^0-9]代表匹配一个不是数字的字符.

特殊符号:

8.4 Bash变量

8.4.1 用户自定义变量

  • 变量只能以字母, 下划线开头.
  • Bash中, 变量的默认类型都是字符串型, 要使用数值运算, 必须指定变量类型为数值型.
  • 变量用等号连接值, 等号左右二边不能有空格.
  • 变量的值如果有空格, 需要使用单引号或双引号包括.
  • 变量需要使用双引号包含"变量名"或使用变量名"或使用变量名"或使用{变量名}.
  • 使用命令的结果可以使用$(命令)来表示.
  • 环境变量名最好大写, 便于区分.

变量分类:

  • 用户自定义变量
  • 环境变量: 主要保存的是和操作系统相关的数据
  • 位置参数变量: 主要用于向脚本当中传递参数或数据, 变量名不能自定义, 变量作用是固定的.
  • 预定义变量: 是Bash中已经定义好的变量, 变量名不能自定义, 变量作用也是固定的.

变量叠加:
name=123
name="$name"456
name=${name}789

变量查看:
set(查询所有变量包括环境等)

变量删除:
unset 变量名

8.4.2 环境变量

  • 用户自定义变量只在当前的shell中有效, 环境变量在当前shell和这个shell的所有子shell当中生效, 如果把环境变量写入相应的配置文件, 这个环境变量就会在所有的shell中生效.
  • 子shell开启方式可以输入命令bash开启
  • 查看是否是子shell, 可以使用命令pstree的sshd栏目查看.

设置环境变量:
export 变量名=变量值 :定义变量
env :查询环境变量
unset :删除变量

  • 当我们使用su切换用户时, 不使用-的话, 环境是不变的, 所以环境变量的值也是可以获取到的.

PATH详解:
我们可以看到一些系统命令例如ls等无需使用绝对路径就可以执行, 是因为系统会在PATH环境变量的路径中寻找是否有ls的二进制执行文件, 如果有就执行, 没有就会说找不到. 我们自己写的二进制执行文件同样可以放在/bin下, 这样就无需绝对路径, 甚至还可以使用tab直接补全(但是不推荐这么做). 合适的做法是将我们的二进制执行文件的路径放入PATH, 同样可以达到效果.

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

通过上面的可以自定义我们所需要的系统提示符.

8.4.3 位置参数变量

位置参数变量 作用
$n n 为数字, $0 代表本身, $1-$9代表不同位置, 但是超过10之后都要使用括号包括, 例如${10}.
$* 代表所有参数, $*把所有的参数看成一个整体
$@ 代表所有参数, $@把每个参数区分对待
$# 表示有几个参数

8.4.4 预定义变量

预定义变量 作用
$? 最后一次执行命令的返回状态, 0表示正确执行, 其他数字由命令决定, 表示执行不正确
$$ 当前进程的进程号(PID)
$! 后台运行着的最后一个进程的进程号(PID)

接受键盘输入:

命令 语法 含义
read read [变量名] 接受键盘输入赋值给变量
-p read -p [提示文字] [变量名] 提示信息
-t read -t [时间] [变量名] 限制输入时间
-s read -s [变量名] 隐藏输入
-n read -n [个数] [变量名] 限制输入个数, 直接执行

8.5 Bash的运算符

8.5.1 数值运算与运算符

  • Linux shell的变量的类型默认是字符串.

declare声明变量类型:

命令 语法 含义
declare -i declare [+/-] i [变量名] 设定或取消值整数型
declare -x declare [+/-] x [变量名] 设定或取消值为环境变量
declare -p declare -p [变量名] 显示指定的被声明的类型

数值运算方法:

  1. 方法一:

    • declare -i cc=$aa+$bb
  2. 方法二: expr或let数值运算工具

    • cc=$(expr $aa + $bb)
    • let cc=$aa+$bb
    • expr可以只有等号右边的计算,加号二边的空格不能少
    • let必须是完整的算术表达式, 即有等号二边, 其变量可以不用$.
  3. 方法三: $((运算式)) 或 $[运算式]

    • cc=$(($aa+$bb))
    • cc=$[$aa+$bb]
    • 中间可以有空格.

运算符:

8.5.2 变量测试与内容替换

8.6 环境变量配置文件简介

8.6.1 环境变量配置文件简介

source命令:

  • source 命令用于使配置文件生效, 无需重启.
  • source [配置文件] 或 . [配置文件]
  • 以上二种方式是一样的, 需要注意.后面有空格.

有关环境变量的配置文件路径:

  • /etc/profile
  • /etc/profile.d/*.sh
  • /etc/bashrc
  • ~/.basg_profile
  • ~/.bashrc
  • /etc 下的配置文件对所有用户都生效, 其他的只对相对用户生效.

8.6.2 环境变量配置文件作用

用户登陆流程:

  • 用户登陆有二种方式,一是帐号密码登陆, 而是子shell输入bash登陆.
  • /etc/bashrc 同样也会定义path等, 在/etc/profile中也会定义, 但是bashrc是用于不用帐号密码登陆使用的.

8.6.3 其他配置文件和登陆信息

  1. ~/.bash_logout : 注销时生效的环境变量配置文件

  2. ~/.bash_history : 历史命令的保存文件

  3. Shell登陆信息

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

可以使用转移字符表示.

远程终端欢迎信息: /etc/issue.net

  • 转义符在此文件中无法使用
  • 是否显示此欢迎信息, 由ssh的配置文件/etc/ssh/sshd_config决定, 将/etc/issue.net加入Banner下才能显示, 记得重启ssh服务.

登陆后的欢迎信息: /etc/motd

  • 无论是本地还是远程都会显示.

9. Shell编程

9.1 基础正则表达式

正则表达式与通配符:

  • 正则表达式是用来在文件中匹配符合条件的字符串的, 正则是包含匹配. grep, awk, sed 等命令可以支持正则表达式.
  • 通配符是用来匹配符合条件的文件名, 通配符是完全匹配. ls, find, cp这些命令不支持正则表达式, 支持通配符.
元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首, 匹配的是它的后一个字符
$ 匹配行尾, 匹配的是它的前一个字符
[] 匹配符合[]中一个字符
[^] 匹配不符合[]中的一个字符
\ 转义符, 用于匹配一些特殊符号
{n} 匹配前一个字符出现n次
{n,} 匹配前一个字符出现最少n次
{n,m} 匹配前一个字符出现次数在n-m次数之间

9.2 字符截取命令

9.2.1 cut字段提取命令

命令 语法 含义
cut -f cut -f [列] 按照tab分割, 输出指定列
cut -d cut -d [字符] -f [列] 按照指定字符分割, 输出指定列

9.2.2 printf命令

printf是根据空格分割字符串, 将其重新格式化输出的命令, 和c语言中的printf完全不同.

例子:
Linux : printf %s 1 2 3 4
其指的是将后面的四个参数按照%s的格式一个个输出.
C : printf("%s%s%s%s", “1”, “2”, “3”, “4”)
C语言要这么写才能达到和它的含义和输出一样, 而且非常麻烦.

printf:

printf ‘输出类型输出格式’ 输出内容
输出类型:

  • %ns : 输出字符串. n是数字指代输出几个字符, 类似于限制最小位数输出, 例如printf %2s 1, 其会输出空格和1.
  • %ni : 输出整数. n是数字指代输出几个数字.
  • %m.nf : 输出浮点数. m和n是数字, 指代输出的总共位数和小数位数.
  • 同时支持\a, \n 等.

9.2.3 awk命令

awk的运行逻辑:
是先读取文件的一行, 然后将相对应的数据放入$中,
$0 代表一整行, $1代表分割后的第一列数据.

awk语法结构:

  • awk ‘条件1{逻辑1}条件2{逻辑2}…’ 文件名

注意点:

  • awk ‘{逻辑}’ 表示没有条件, 就执行.
  • BEGIN 作为条件可以使之在读取文件前就执行逻辑.
    例: awk ‘BEGIN{FS=":"}{printf $2}’ testfile
  • END 作为条件可以使之最后执行.
  • 注意最外面的括号只能是单引号, 里面的才能用双引号.

9.2.4 sed命令

sed是一种几乎包括在所有unix平台的轻量级编辑器. sed 主要是用来将数据进行选取, 替换, 删除, 新增的命令.

  • sed 和 vi 命令类似, 但是sed主要用于管道符的操作, vi主要用于文档的操作.

sed基本格式:
sed [选项] ‘[操作]’ [文件]

选项 操作 语法 含义
p sed ‘p’ [文件] 打印文本, 可以在p前加数字, 表示要打印的行, 需注意的是sed命令执行完默认会将文本输出一遍, 所以再使用p的话, 就相当于打印了二遍
-n p sed -n ‘p’ [文件名] sed默认会打印一遍全部内容, -n用于只打印受到影响的行.
d sed ‘d’ [文件名] d用于删除指定的内容, 如’1,3d’ 为删除1-3行
i sed ‘i [文本]’ [文件名] i用于在指定的行前插入新的文本的行
a sed ‘a [文本]’ [文件名] a用于在指定的行后插入新的文本的行
c sed ‘c [文本]’ [文件名] c用于在指定的行上修改为新的文本的行
s sed ‘s/旧字符/新字符/g’ [文件名] 将指定文本替换成指定文本
-i a sed -i ‘a [文本]’ [文件名] -i用于将修改的内容应用到文件中, 如果不加的话, 只会输出, 但不会影响文件
-e sed -e ‘p;p’ [文件名] -e允许对输入数据应用多天sed命令编辑

9.3 字符处理命令

9.3.1 排序命令 —— sort

命令 语法 含义
sort sort [文件名] 按字典序排序, 默认是制表符为一个单位
sort -r sort -r [文件名] 以字典序的反向排序
sort -f sort -f [文件名] 忽略大小写排序, 指的是同字母的大小写, A和a永远排在B和b之前, 默认a在A之前.
sort -n sort -n [文件名] 以数值类型排序
sort -t -k sort -t “分隔符” -k [数字, 数字] [文件名] 将每一列按照分割符分割, 再取指定第几个到第几个参数作为表条件进行比较
  • 貌似sort只会排序数字和字符不会排序特殊符号.
  • 特殊的分割符如制表符等, 例: $’\t’.

9.4 条件判断

按照文件配型进行判断:

测试选项 作用
-d 文件 判断文件是否存在, 并且是否为目录文件
-f 文件 判断文件是否存在, 并且是否为二进制文件
-e 文件 判断文件是否存在

其他选项:

按照文件权限进行判读:

测试选项 作用
-r 判断文件是否存在, 并且是否有读权限
-w 判读文件是否存在, 并且是都有写权限
-x 判断文件是否存在, 并且有执行权限
  • 以上的权限指的是所属者, 所属组, 其他的人一起的权限.

其他选项:

二个文件之间进行比较:

测试选项 作用
文件1 -nt 文件2 判读文件1的修改时间是都比文件2的新
文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧
文件1 -ef 文件2 判断文件1和文件2的inode号是否一致, 看是否是同一个文件

二个整数之间的比较:

测试选项 作用
整数1 -eq 整数2 判断是否相等
整数1 -gt 整数2 判断是否大于
整数1 -lt 整数2 判读是否小于
整数1 -ne 整数2 判断是否不相等
整数1 -ge 整数2 判断是否大于等于
整数1 -le 整数2 判断是都小于等于

字符串的判断:

测试条件 作用
-z 字符串 判断字符串是否为空, 参数没有定义和参数是“”都算空
-n 字符串 判断字符串是否为非空
字串1==字串2 判断是否相等
字串1!=字串2 判断是都不相等

多重条件判断:

测试条件 作用
-a and, 且, 连接多个条件
-o or, 或

9.5 流程控制

9.5.1 if语句

单分支if条件语句:

if [ 测试语句 ];thenfi
或
if [ 测试语句 ]then[逻辑语句]
fi

多分枝if语句:

if [ 测试语句 ]then[逻辑语句]
elif [测试语句]then[逻辑语句]
.....
....
....
else[逻辑语句]
fi
  • 需要注意空值和字符串比较会是对的, 需要加入判断是非空的比较.

9.5.2 case语句

case $变量名 in"值1")如果变量的值等于1, 则执行程序1;;"值2")如果变量的值等于2, 则执行程序2;;......*)如果以上都不是, 则执行此;;esac

9.5.3 for循环

语法一:

for 变量 in 值1 值2 值3....do程序done

语法二:

for((初始值;循环控制条件;变量变化))do程序done

例子添加用户:

#!/bin/bashread -t 30 -p "please input a name:" name
read -t 30 -p "please input a num:" num
read -t 30 -p "please input a passwd:" passwdif [ -n "$name" -a -n "$num" -a -n "passwd" ]theny=$(echo $num | sed 's/[0-9]//g')if [ -z "$y"]thenfor((i=1;i<=$num;i=i+1))douseradd $name$i echo "$passwd" | passwd --stdin "$name$i"                     donefi
fi

9.5.4 while循环与until循环

while语句:

while [测试条件]do程序done

until语句:

until [测试条件]do程序done

10. Linux服务管理

10.1 服务简介与分类

服务的分类:
Linux分为: RPM包默认安装的服务, 源码包安装的服务.
RPM包默认安装的服务分为: 独立的服务, 基于xinetd服务.

  • 独立的服务存在于内存中, 响应速度快, 但占用内存多.
  • 基于xinetd的服务由xinetd管理, 服务本身不在内存中, 响应靠xinetd间接的实现, 响应速度慢.

启动与自启动:

RPM包安装的服务:
chkconfig --list: 查看服务的自启动状态, 可以看到所有RPM包安装的服务. 会显示系统的7个系统运行级别下, 服务是否会自启动的列表, 但是并不代表其已经启动了, 使用ps aux命令进行查看服务是否启动.

源码包安装的服务:
查看源码包服务只能看安装位置有没有此服务.(一般安装在/usr/local)

  • RPM服务启动可以使用systemctl启动, 源码包不能使用此命令, 其根据/etc/rc.d/init.d中有没有相应的服务查看是否能使用systemctl启动.

10.2 RPM包安装服务的管理

10.2.1 独立服务的管理

RPM包安装后通用的一些文件安装位置:
/etc/init.d/ : 启动脚本位置(与/etc/rc.d/init.d一样)
/etc/sysconfig/ : 初始化环境配置文件位置
/etc/ : 配置文件位置
/etc/xinted.conf : xinetd配置文件
/etc/xinted.d/ : 基于xinted服务的启动脚本
/var/lib/ : 服务产生的数据放在这里
/var/log/ : 日志

  • 除了以上文件之外, 不同服务有不同的文件.
  • 以上是centos6的安装路径.

独立服务的启动:

systemctl start 服务

  • CentOS7 和6不同, 不能使用/etc/init.d 下的启动了.

独立服务的自启动:

方法1:
systemctl list-unit-files #查看服务的开机启动状态.
systemctl disable|enable 服务 #设置服务自启动状态.
(使用此命令之后会将/usr/lib/systemd/system/下的相对应服务做一个软链接到/etc/systemd/system/multi-user.target.wants/下, 这样开机就会启动了, 相反disable 就会把此链接删除)

方法2:
修改/etc/rc.d/rc.local, 加入启动命令, centos7 还需要将其权限进行修改, 不然不会启动, chmod +x /etc/rc.d/rc.local.(/etc/rc.local是其软链接).

方法3:
使用ntsysv命令管理启动.
但是其只能管理RPM包的服务, 目前centos7中RPM包的一些服务貌似也不能管理了.

10.2.2 基于xinetd服务的管理

xinetd: 超级守护进程

使用yum下载xinetd服务——yum -y install xinetd.
再使用chkconfig --list就可以查看到基于xinetd的服务信息.

  • 选学

10.3 源码包服务的管理

源码包的启动:
不同的源码包的启动过脚本不同.可以查看源码包的安装说明, 查看启动脚本.

源码包的自启动:
修改/etc/rc.d/rc.local, 加入启动命令(绝对路径启动), centos7 还需要将其权限进行修改, 不然不会启动, chmod +x /etc/rc.d/rc.local.(/etc/rc.local是其软链接).

让源码包能被chkconfig启动:

  • centos7变换了

总结:

11. Linux系统管理

11.1 进程管理

11.1.1 进程查看

查看所有进程:

命令 语法 含义
ps a ps a 显示前台进程
ps x ps x 显示后台进程
ps u ps u 显示进程是由那个用户产生的
ps aux ps aux 详细显示所有进程
ps -l ps -l 显示详细信息
ps -e ps -e 显示所有进程
ps -le ps -le 详细显示所有进程

ps aux 命令输出详解:

title 作用
USER 该进程是由哪个用户产生的
PID 进程的ID号
%CPU 该进程占用CUP资源的百分比
%MEM 该进程占用无力内存的百分比
VSZ 该进程占用虚拟内存的大小
RSS 该进程占用实际无力内存的大小
TTY 该进程是在哪个终端中运行的, tty1- tty7代表本地控制台终端, tty1-tty6是本地的字符界面终端, tty7是图形终端. pts/0-255代表虚拟终端
STAT 进程的状态. R: 运行 S: 睡眠 T: 停止状态 s: 包含子进程 +: 位于后台
START 系统运行时间
TIME 系统占用CPU运算时间
COMMAND 产生此进程的命令名
  • tty 大多显示的是?, 表示此进程是由内核直接调用, 不是终端产生的.

查看系统健康状况:

命令 操作(交互界面) 语法 含义
top top 查看系统健康状态, 默认三秒更新一次
top -d top -d 指定更新时间
top ?/h top 显示交互模式的帮助
top P top 以CPU使用率排序, 默认就是此项
top M top 以内存的使用率排序
top N top 以PID排序
top q top 退出top

top(前五行)输出详解:

top - 05:51:07 up  6:42,  2 users,  load average: 0.01, 0.03, 0.05
Tasks: 351 total,   2 running, 349 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:   1003432 total,   423184 used,   580248 free,    38616 buffers
KiB Swap:  2097148 total,        0 used,  2097148 free.   132704 cached Mem
  • 第一行和uptime输出一致.
    05:51:07:系统时间;
    up 6:42:系统运行时间;
    2 users:几个用户登陆;
    load average: 0.01, 0.03, 0.05:系统1分钟, 五分钟, 十分钟的负载.

  • 第二行
    Tasks: 351 total:一共多少个进程
    2 running:多少进程在运行中
    349 sleeping:多少进程睡眠中
    0 stopped:多少个正在停止
    0 zombie:僵尸进程. 如果不是0, 需要手动干预.

  • 第三行
    %Cpu(s): 0.1 us:CPU被用户占用了多少
    0.2 sy: CPU被系统占用了多少
    0.0 ni: CPU被改变过优先级的用户占用了多少
    99.7 id: CPU的空闲率
    0.0 wa: 等待输入输出的进程占用百分比
    0.0 hi: 硬中断请求服务占用的百分比
    0.1 si: 软中断请求服务占用的百分比
    0.0 st: 虚拟时间百分比.当有虚拟机时, 虚拟CPU等待实际CPU的时间百分比.

  • 第四行
    Mem: 1003432 total:物理内存的总量, 单位kb
    423184 used: 已经使用的物理内存数量
    580248 free: 空闲的物理内存数量
    38616 buffers: 作为缓存的内存数量

  • 第五行
    Swap: 2097148 total: 交换分区(虚拟内存) 的总大小
    0 used: 已经使用的大小
    2097148 free: 空闲的大小
    132704 cached: 作为缓存的交换分区的大小

查看进程树:

命令 语法 含义
pstree pstree 以树的形式显示进程
pstree -p pstree -p 显示进程的PID
pstree -u pstree -u 显示进程的所属用户
  • 此命令需要额外安装.

11.1.2 终止进程

常用的信号:

kill:

命令 语法 含义
kill -l kill -l 显示可以结束的信号
kill -1 kill -1 [PID] 使进程立即关闭, 然后重新读取配置文件后重启
kill -9 kill -9 强制终止
kill -15 kill -15 正常结束进程, kill 命令的默认信号

killall:
killall [选项][信号] 进程名

命令 语法 含义
killall -1 killall -1 [进程名] 使进程立即关闭, 然后重新读取配置文件后重启
killall -9 killall -9 [进程名] 强制终止
killall -15 killall -15 [进程名] 正常结束进程, kill 命令的默认信号
killall -i killall -i [信号] [进程名] 交互式, 询问是否要杀死某个进程
killall -I killall -I [信号] [进程名] 忽略进程名的大小写

pkill:
按照终端号踢出用户.

命令 语法 含义
pkill pkill -t -9 [tty名] 强制杀死从虚拟终端登陆的进程

11.2 工作管理

将进程放入后台:

  • [命令] & : 可以将命令放入后台, 并同时在运行
  • 使用ctrl + z 可以将进程放入后台, 但是会暂停执行.

查看后台的工作:

命令 语法 含义
jobs jobs 查看后台的进程
-l jobs -l 查看后台的进程, 同时显示PID
  • 输出的格式: +: 代表最近一个放入后台的工作, 也是恢复工作时默认恢复的工作. -: 代表倒数第二个放入后台的工作. 其他不显示符号.

将后台的工作恢复到前台:

命令 语法 含义
fg fg 默认恢复最后一个放入后台的进程.(foreground)
fg % fg %[工作号] 恢复指定的工作, 可以忽略%

将后台暂停的工作恢复到后台执行:

命令 语法 含义
bg bg 默认恢复最后一个进程
bg % bg %[工作号] 恢复指定的工作
  • 只能恢复那种没有交互界面的job, 例如top,vim就不可以恢复.

11.3 系统信息查看

vmstat命令监控系统资源:
vmstat [刷新延时 刷新次数]: 监控系统资源, 刷新指定的次数, 每次间隔指定时间.

  • 此命令和top输出的格式类似.

dmesg命令查看开机时内核检测信息:

dmesg: 查看开机时内核检测信息

free命令查看内存使用状况:

命令 语法 含义
free free 查看内存使用状况
-b free -b 以字节为单位显示
-k free -k 以kb为单位显示, 默认就是以kb为单位的
-m free -m 以MB为单位显示
-g free -g 以GB为单位显示
-h free -h 按照人类的习惯显示
  • 内存中使用的内存:
    使用的内存 = Linux进程实际使用的 + 缓冲 + 缓存
    缓冲和缓存只能为Linux内核使用.
  • 内存比硬盘运算快的多.

查看CPU信息:
dmesg可以查看, 还可以查看文件.
/proc/cpuinfo 中存放着关于电脑CPU的信息.

  • 此文件存在内存中, 一旦断电就会消失, 它根据每次开机读取的信息写入进去, 以保证可能更换了新的硬件.

uptime命令:
uptime: 显示系统的启动时间和平均负载, 也就是top命令的第一行. w 命令也可以看到这个数据.

查看系统和内核相关信息:

命令 语法 含义
uname -a uname -a 查看系统所有相关信息
uname -r uname -r 查看内核版本
uname -s uname -s 查看内核名称

判断当前系统的位数:
可以使用file /bin/ls 间接的查看系统的位数

查询当前Linux系统的发行版本:
可以查看文件: /etc/redhat-release
或者安装redhat-lsb, 再使用lsb_release -a 查看.

列出进程调用的文件:

命令 语法 含义
lsof -c lsof -c [进程名] 只列出一字符串开头的进程打开的文件
lsof -u lsof -u [用户名] 只列出某个用户的进程打开的文件
lsof -p lsof -p [PID] 列出某个PID进程打开的文件

11.4 系统定时任务

命令 语法 含义
crontab -e crontab -e 编辑定时任务
crontab -l crontab -l 显示定时任务

设置定时任务的语法:


  • 最后一条要注意.

12. 日志管理

12.1 日志管理简介

rsyslogd是用于管理日志.
首先确定此服务是否已经启动.

常见的日志:

  • 有些日志是二进制显示的, 不能直接查看, 需要使用命令查看.

12.2 rsyslogd服务

基本日志格式如下:

  • 事件产生时间
  • 发生事件的服务器的主机名
  • 产生时间的服务名或程序名
  • 事件的具体信息

配置文件:
rsyslogd配置文件: /etc/rsyslog.conf

文件的格式:
authpriv.* /var/log/secure
authpriv: 服务名称
.: 连接符号
*: 日志等级
/var/log/secure : 日志记录位置
含义 : 将认证相关的服务所有日志等级的记录在/var/log/secure中.

服务名称:

连接符号:
. : 代表后面的等级, 只要高于或等于它的日志都记录.
.= : 代表只记录等于此等级的日志
.! : 代表除了此等级的日志外都记录.

日志等级:

  • 多个服务的日志记录, 用;分割.

12.3 日志的轮替

日志文件的命名规则:

  • 如果配置文件中拥有dateext参数, 那么日志会用日期作为日志文件的后缀, 例如: sercure-20190908.
  • 如果配置文件中没有dateext参数, 当轮替的时候, sercure就会自动改名为sercure.1, 以此类推.

logrotate配置文件
配置文件用于配置日志的轮替时间, 保存个数, 是否压缩, 权限等选项.
路径: /etc/logrotate.conf

  • 还可以在logrotate.conf中加入另外的配置文件地址, 以单独管理配置文件.

配置文件格式:

  • 配置文件分为全局的配置和单独日志的配置, 单独的日志的配置优先级更高.

配置文件的参数:

参数 参数说明
daily 日志的轮替周期是每天
weekly 每周
mounthly 每月
rotate [数字] 保存的日志的个数, 0指没有备份
compress 日志轮替时, 旧的日志进行压缩
create mode owner group 创建新日志, 同时指定新日志的权限与所有者和所属组. 如create 0600 root rootgroup
mail address 当日志轮替时, 输出内容通过邮件发送到指定的邮件地址. 如mail cxw@qq.com
missingok 如果日志不存在, 则忽略该日志的警告信息
notifempty 如果日志为空文件, 则不进行日志轮替
minsize [大小] 日志轮替的最小值, 也就是说日志一定要到达最小值才会轮替, 否则就算时间达到也不轮替
size [大小] 日志只有大于指定大小才进行日志轮替, 而不是按照时间轮替, 如size 100k
dateext 使用日期作为日志轮替文件的后缀

RPM安装的服务等, 其会自动的进行备份, 但是我们源码包就不会备份, 需要我们将安装目录下的备份文件加入到/etc/logroatete.conf中.
如:

/usr/local/apache/logs/access_log {dailycreaterotate 30
}
# 其会将此路径下的此文件每天进行轮替, 保留三十个旧版本.

logrotate 命令:

命令 语法 含义
logrotate -v logrotate -v 配置文件名
显示日志轮替的过程
logrotate -f logrotate -f 配置文件名
强制轮替, 无论是否达到轮替要求
  • 轮替的过程不是马上进行的, 即使达到了轮替的要求.

13. 启动管理

13.1 CentOS 启动管理

13.1.1 系统运行级别

系统运行级别 含义
0 关机
1 单用户 (类似于windows的安全模式), 启动最小的核心程序, root用户登陆
2 不完全多用户, 不含NFS服务(用于文件共享)
3 完全多用户
4 未分配
5 图形界面
6 重启

查看系统当前运行级别:
runlevel : 例N 3 表示开机就进入了3.
或者使用systemctl get-default 查看.

修改当前系统的启动方式:

  • CentOS6 使用的是修改/etc/inittab的配置.
  • 在CentOS7中我们使用命令:
    systemctl set-default [multi-user.target] 来设定到使用多用户启动.

13.1.2 启动过程

CentOS 6 启动过程.

13.2 Grub引导程序

13.2.1 Grub配置文件

CentOS7: 待更新

13.2.2 Grub加密

Linux忘记密码了,可以进入单用户模式然后修改密码, 我们给Grub加密以防止用户破解密码.

  1. 打开文件 /etc/grub.d/00_header
  2. 在文件的末尾加上
cat <<EOF
set superusers=[账户] # 任意账户名
passwd [账户] [密码]
  1. 重新编译生成grub.cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg

  2. 完成

13.2.3 Grub修复

单用户模式下进入修改root密码:

  1. 重启后进入选择界面, 按任意键停止倒计时, 再按e键进入edit修改模式.

  2. 接着在UTF-8 后加入 init=/bin/sh.

  3. 修改完后按ctrl + x 进入.

  4. 使用passwd命令修改root的密码.

  5. 最后使用exec /sbin/init 再度进入多用户模式.

使用光盘模式修复:

  1. 首先先将光盘插入
  2. 重启虚拟机, 并快速按F2
  3. 进入BIOS模式, 选择到Boot栏目, 将CD运行级别移到最高, 保存重启.
  4. 选择进入rescue 模式
  5. 接着就进入了sh的界面, 接着输入命令: chroot /mnt/sysimage, 将此目录作为根目录.
  6. 接下来相当于之前的系统了, 可以修改/etc/grub.d/00_header 文件, 就可以将grub的密码删除, 也可以直接修改root的密码. 如果出现的是别的问题, 比如某个配置文件没有了, 也可以挂载光盘, 使用rpm2cpio等命令进行替换.

14. 备份与恢复

14.1 概述

完全备份
增量备份
差异备份

14.2 备份与恢复

备份:
dump [选项] 备份之后的文件名 原文件或目录
选项:
-level: 0-9十个备份等级
-f 文件名: 指定备份之后的文件名
-u: 备份成功后吧备份时间记录在/etc/dumpdates文件
-v:显示备份过程中更多的输出信息
-j:调用bzlib库压缩备份文件, 压缩成.bz2格式
-W:显示允许被dump的分区的备份等级及备份时间

  • /etc/dumpdates记录了备份时间
  • 对于文件夹和文件来说只能使用0等级
  • dumpdates不能用于文件夹和文件, 只能用于分区

恢复:
restore -C -f [备份文件名]: 比较备份文件和源文件的区别
restore -t -f [备份文件名]: 查看备份文件中有什么文件
restore -r -f [备份文件名]: 解压备份文件名
restore -i -f [备份文件名]: 进入交互模式, 手工恢复文件

Linux(CentOS)学习笔记相关推荐

  1. Linux centOS学习笔记(文件处理命令)

    touch: [文件名] 在当前目录创建一个文件(文件名中有空格需要加双引号,不然会创建两个文件) [/路径/文件名] 在指定路径创建一个文件 cat: [/路径/文件名] 查看文件内容(不适合浏览长 ...

  2. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

  3. Linux命令学习笔记

    Linux命令学习笔记 1 前言 1.1 系统版本 1.2 终端切换 1.3 快捷键 1.4 帮助文档 1.5 关机重启 2 目录命令 2.1 当前目录 pwd 2.2 切换目录 cd 2.3 查看目 ...

  4. Centos学习笔记

    CENTOS学习笔记: 一.shell 脚本基础-bash变量和逻辑运行 1. 终端:附着在终端上的接口程序 GUI:KDE ,GNone,Xfce CLI: /etc/shells bash zsh ...

  5. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  6. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

  7. 操作系统进程学习(Linux 内核学习笔记)

    操作系统进程学习(Linux 内核学习笔记) 进程优先级 并非所有进程都具有相同的重要性.除了大多数我们所熟悉的进程优先级之外,进程还有不同的关键度类别,以满足不同需求.首先进程比较粗糙的划分,进程可 ...

  8. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  9. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

最新文章

  1. 马云最新演讲:未来10年,人类将面临AI、IoT和区块链等三大技术巨大挑战!
  2. LeetCode--167--两数之和 II - 输入有序数组
  3. CHM格式的可以全文搜索的Spring3.2官方参考文档
  4. 理解ResNet结构与TensorFlow代码分析
  5. PHP框架的ORM思想:O类的实例化 R数据表 M映射XML
  6. 自定义dialog弹窗html,自定义H5页面dialog弹窗
  7. C++语言基础 —— STL —— 容器与迭代器
  8. 拥有自我意识、自我模拟的粒子机器人来了
  9. Odoo(OpenErp) 收藏夹(私藏)
  10. linux下往外ping不通-出现ping: unknown host www.baidu.com
  11. 电池测试系统连接服务器失败,服务器报电池故障
  12. Oracle Wallet Manager
  13. php中hr标签的用法,HTML: hr 标签
  14. 双纤网速叠加+GS105E实现单线三用+AC86+68组网Aimesh实现无线漫游
  15. 由sizeof 这个“管”,窥一窥C语言这只“豹”
  16. 2022年端午送祝福语小程序源码+可对接流量主
  17. Nginx 配置代理https
  18. 假设检验:一个总体参数的检验、总体方差检验、两个总体参数的检验和两个总体方差的检验
  19. cynic计算机专业英语,计算机专业英语词汇2-英语文章阅读-大耳朵英语 - 免费在线英语学习 口语练习 四级听力资料 在线翻译 网络课堂 英语社区...
  20. windows10系统显示桌面电脑图标

热门文章

  1. Lightly:新一代的 Cloud IDE
  2. 关于0.2%费率的微信支付,你需要了解一下。
  3. 按关键字搜索的步骤教学
  4. vue utils.js公共方法中axios请求返回数据
  5. RCU前传:从同步到RCU的引入
  6. 量化交易python入门书籍推荐_求量化投资入门书籍或课程推介。?
  7. 语义分割标签制作全过程(适合新手)
  8. 用mysqlbinlog命令查看二进制日志文件提示: -bash:mysqlbinlog:command not found
  9. Naive script setup写法上传注意
  10. 10个优秀的AI艺术生成器