Linux命令小记

2023-08-07 21:51:50 浏览数 (1)

# Linux 显示行号设置

第一步,打开 vim

代码语言:javascript复制
vi ~/.vimrc

第二步,在该文件中加入一行,命令如下:

代码语言:javascript复制
set nu                       # 显示行号
set nonu                     # 不显示行号    
# 命令终端字段含义介绍
  • [root@localhost ~]#
  • 解释:
    • root:当前登录系统用户名 (root 超级管理员)
    • localhost :当前主机名
    • :当前用户所在目录( 为家目录) ,root 超级管理员家目录:/root
    • #: 当前用户身份是超级管理员
  • [student@localhost ~]$
    • $:当前用户身份为普通用户,普通用户的家目录:/home/ 用户名同名
# Linux 系统基本概念
  • 多用户的系统:允许同时有很多个用户登录系统,使用系统里的资源
  • 多任务的系统:允许同时执行多个任务
  • 严格区分大小写:命令,选项,参数,文件名,目录名都严格区分大小写
  • 一切皆文件:硬件设备(内存、CPU、网卡、显示器、硬盘等等)都是以文件的形式存在的
  • 不管是文件还是目录都是以倒挂的树形结构,存在于系统的 “/” 根目录下,根目录是 Linux 系统的起点
  • 对于 Linux 系统而言,目录 / 文件没有扩展名一说,扩展名如:.sh(脚本文件) .conf(配置文件) .log(日志文件) .rpm(软件包).tar(压缩包)是易于用户方便识别
  • 没有提示就是最好的提示(成功了)
  • Linux 系统没有回收站
# 命令行编辑技巧

键盘上下键调出历史命令

Ctrl c:废弃当前命令行中的命令,取消当前执行的命令,例如 ping

Ctrl l,clear:清屏

tab 建自动补齐:可补齐命令、参数、文件路径、软件名

esc . :将上一条命令参数变成当前命令的执行对象

Ctrl a:将当前光标移动至行首

Ctrl e:将当前光标移动至行尾

Ctrl u 清空至行首

Ctrl w 删除一个单词

exit,logout:退出系统

# 命令行一般命令格式
  • 命令字 [- 选项…] [参数…]
    • 命令字:命令本身(功能)
    • 选项:调整命令功能的
      • 短选项:-l -a -d -h(单个字符),短选项可以合并使用:-lad -lh
      • 长选项:–help(单词),长选项通常是不能合并使用的
    • 参数:命令的执行对象,文件 / 目录 / 程序等
    • []:可选的
    • …:可以同时有多个选项或参数
# 学习方法
  • 遇到问题:前期不要求你们有排错的能力
  • 思考自己能不能决绝:百度、Google、最后在问老师
  • 主动学习的爱好,不要被动学习
  • 不要死磕一个技术点,低头学习的时候不要忘了抬头看路
# Linux 系统辨别目录与文件的方法

蓝色表示目录(windows 系统里的文件夹)

白色表示文件

浅蓝色表示链接文件(类似于 windows 系统的快捷方式)

绿色表示可执行文件(如脚本,命令程序文件)

红色表示压缩文件

黄色表示设备文件(硬盘、键盘、鼠标、网卡、CPU 硬件设备都是以文件的形式存在的)

红色闪动文件 ——> 表示链接文件不可用

# ls 查看目录 / 文件命令
  • ls 命令(英文全拼:list):用于查看目录下内容及目录和文件详细属性信息
  • 命令格式:ls [- 选项…] [参数…]
  • 常用选项:
    • -a 显示目录下所有内容,包含隐藏的内容
    • -l 以长格式显示目录下的内容及详细属性
    • -h 人性化显示目录下内容大小(kB、MB、GB)
    • -d 仅显示目录本身而不显示目录下的内容
    • -i 查看 inode 号(系统任何的文件或目录都有一个唯一的编号)
    • -R:递归查看目录下所有内容(从头到尾)
  • 注意(附加):递归是指将所有的目录从头到尾全部呈现出来。
# Linux 系统文件类型

- 文件:

d 目录:

l 链接文件

b 跨设备文件

c 字符设备文件

p 管道设备文件

s 套接字

# Linux 系统下的归属关系
  • 在 Linux 系统下,文件给用户分成了三类
    • 所有者:文件或目录的拥有者,拥有者的权限通常是最大的
    • 所属组:文件或目录属于哪一个组,所属组的权限略微比所有者小
    • 其他人:既不是文件或目录的所有者,也不属于文件或目录组内的成员,其他人的权限通常最小的权限
  • ls 命令示例:
代码语言:javascript复制
#显示当前所在目录下的所有内容
[root@localhost ~]# ls		

#查看根目录下所有内容
[root@localhost ~]# ls   /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#查看/etc目录下所有内容
[root@localhost ~]# ls /etc

#查看/bin目录下所有内容
[root@localhost ~]# ls /bin

#查看/dev目录下所有内容
[root@localhost ~]# ls /dev

#查看目录下所有目录和文件,包括隐藏的内容
[root@localhost ~]# ls -a

#以长格式显示目录下所有内容,包括详细的属性信息
[root@localhost ~]# ls -l
-rw-r--r--. 1 root root 0 10月 24 15:16 hello

#解释
-:文件类型
1:代表文件的引用次数
root:文件的所有者
root:文件的所属组
0:文件的大小,默认以字节为单位显示大小
10月 24 15:16:文件最近一次的修改时间
hello:文件名

#以长格式显示目录所有内容,以人性化的方式显示详细的属性信息
[root@localhost ~]# ls -l -h

#短选项合并使用
[root@localhost ~]# ls -lh

#以长格式显示目录所有内容,以人性化的方式显示详细的属性信息,包括隐藏的内容
[root@localhost ~]# ls -lha


#以长格式显示根目录下所有内容,包括详细的属性信息
[root@localhost ~]# ls -l /
lrwxrwxrwx.   1 root root    7 3月  13 17:15 bin -> usr/bin

#创建hello.txt文件
[root@localhost ~]# touch hello.txt

#查看文件的元数据信息
[root@localhost ~]# stat hello.txt
  文件:"hello.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:33575020    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-03-14 16:38:14.349861770  0800
最近更改:2021-03-14 16:38:14.349861770  0800
最近改动:2021-03-14 16:38:14.349861770  0800
创建时间:-
# Linux 基本权限的类别
  • r 读取 w 写入 x 执行 - 没有权限
  • 权限顺序:rwx rwx rwx
代码语言:javascript复制
[root@localhost ~]# ls -l
-rw-r--r--. 1 root root 1831 3月  13 17:45 initial-setup-ks.cfg
#解释
-:文件类型
rw- r-- r--:所有者u、所属组g、其他人o的权限
u   g   o

r 读取权限,w写入权限,x执行权限,-没有任何权限

1:代表文件的引用次数,只针对与做了硬连接的文件才有效
root:文件的所有者
root:文件的所属组
1831:文件的大小,默认以字节为单位显示大小
3月  13 17:45:文件最近一次的修改时间
initial-setup-ks.cfg:文件名

#查看/root目录本身详细属性信息
[root@localhost ~]# ls -ld /root
dr-xr-x---. 14 root root 4096 3月  14 16:38 /root

#查看当前目录下所有内容的inode号
[root@localhost ~]# ls -i
33574979 anaconda-ks.cfg  33574984 initial-setup-ks.cfg  33575035 模板  33575036 图片  17470701 下载            17470702 音乐
33575020 hello.txt        51909391 公共                  51909392 视频   3204374 文档  33575017 新建文件夹.zip   3204373 桌面

#查看hello.txt文件的inode号
[root@localhost ~]# ls -i hello.txt
33575020 hello.txt

#查看/etc/目录本身的inode号
[root@localhost ~]# ls -id /etc
16777281 /etc
# 课后练习

1. 命令行以 $ 作为结尾代表什么含义?

普通用户

2. 请写出 Linux 系统一般的命令格式?

命令字 [- 选项…] [参数…]

3. 在 Linux 系统下,如何辨别目录与文件及其他的文件?

白色:文件

蓝色:目录

浅蓝色:链接文件

绿色:可执行文件

红色:压缩文件

红色带闪动的文件:链接文件不可用

黄色:设备文件(硬盘,网卡,CPU,鼠标,键盘)

4. 如何查看一个文件的详细属性?

ls -l 文件名

5. 如何查看一个目录本身的详细属性?

ls -dl 目录名字

6. 查看文件详细属性,并以 KB、MB、GB 的方式显示文件的大小?

ls -lh 文件名

7. 如何查看一个文件的 inode 号?

ls -i 文件名

8. 请写出 Linux 下文件和目录的三个归属关系?

u 所有者

g 所属组

o 其他人

9. 请写出 Linux 下基本权限的表示方式?

r:读取,w 写入,x 执行

10. 命令行以 #作为结尾代表什么含义?

超级管理员

# mkdir 创建目录命令
  • mkdir(英文全拼:make directory)用于创建新目录
  • 命令格式:mkdir [- 选项] 目录名
  • 常用选项:
    • -p 递归创建多个目录
  • 注意事项:
    • 目录还是文件的名字,除了以 “/” 以外的任意名称,“/” 根目录,路径分隔符
    • 文件或目录的名字长度不能超过 255 个字符
  • mkdir 命令示例
代码语言:javascript复制
#在当前所在目录创建test目录
[root@localhost ~]# mkdir test
[root@localhost ~]# ls

#在当前所在目录同时创建多个目录
[root@localhost ~]# mkdir test1 test2 test3
[root@localhost ~]# ls

#指定在/tmp目录下创建abc目录
[root@localhost ~]# mkdir /tmp/abc
[root@localhost ~]# ls /tmp
abc

#在指定目录下同时创建多个目录
[root@localhost ~]# mkdir /tmp/abc1 /tmp/abc2 /tmp/abc3
[root@localhost ~]# ls /tmp

#在/opt目录下创建student,在当前目录创建student1..3
[root@localhost ~]# mkdir /opt/student student1  student2 student3
[root@localhost ~]# ls /opt
rh  student

#mkdir默认无法在一个不存在的目录下创建目录,需要通过-p选项
[root@localhost ~]# mkdir /opt/xx/oo
mkdir: 无法创建目录"/opt/xx/oo": 没有那个文件或目录

[root@localhost ~]# mkdir /opt/a/b/c/d
mkdir: 无法创建目录"/opt/a/b/c/d": 没有那个文件或目录

#在/opt目录下递归创建目录
[root@localhost ~]# mkdir -p /opt/xx/oo
[root@localhost ~]# ls /opt
rh  student  xx

[root@localhost ~]# mkdir -p /opt/a/b/c/d
[root@localhost ~]# ls /opt
a  rh  student  xx

#ls -R选项可以递归目录下所有内容
[root@localhost ~]# ls -R /opt/a
/opt/a:
b

/opt/a/b:
c

/opt/a/b/c:
d
# cd 切换工作目录命令
  • cd(英文全拼:change directory)切换目录

命令格式:cd [- 选项] [目录名]

  • 提示:目录名称可以是绝对路径或相对路径,如果不指定目录名称,则切换到当前用户的家目录~
# 绝对路径与相对路径
  • 绝对路径:以 /(根)为起点,到达你想去的目标目录称为绝对路径
  • 相对路径:以当前路径为起点,到达你想去的目标目录
  • 常用快捷操作:
    • ~ 表示为家目录
    • . 表示为当前目录
    • … 表示上一级目录
  • - 可在两路径之间来回切换
# pwd 打印当前所在目录
  • pwd(英文全拼:print work directory)打印当前所在的工作目录,执行 pwd 命令后,可显示当前所在的工作目录的绝对路径名称
  • 命令格式:pwd [- 选项]
代码语言:javascript复制
[root@localhost ~]# cd /opt/a/b/c/d

#打印当前所在目录绝对路径
[root@localhost d]# pwd
/opt/a/b/c/d

#切换到用户家目录
[root@localhost d]# cd ~
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /opt/a/b/c/d
[root@localhost d]# pwd
/opt/a/b/c/d
[root@localhost d]# cd
[root@localhost ~]# pwd
/root

[root@localhost ~]# cd /bin
[root@localhost bin]# pwd
/bin

[root@localhost bin]# cd /boot
[root@localhost boot]# pwd
/boot
[root@localhost boot]# ls

[root@localhost boot]# cd /dev
[root@localhost dev]# pwd
/dev
[root@localhost dev]# ls

[root@localhost dev]# cd /etc
[root@localhost etc]# pwd
/etc
[root@localhost etc]# ls

[root@localhost etc]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#“.”表示当前所在目录,对于cd命令而言作用不大
[root@localhost etc]# cd .

[root@localhost etc]# cd /opt/a/b/c/d
[root@localhost d]# pwd
/opt/a/b/c/d

#“..”切换到当前目录的上一级目录
[root@localhost d]# cd ..
[root@localhost c]# pwd
/opt/a/b/c

[root@localhost c]# cd ..
[root@localhost b]# pwd
/opt/a/b

[root@localhost b]# cd ..
[root@localhost a]# cd ..
[root@localhost opt]# pwd
/opt

[root@localhost opt]# cd ..
[root@localhost /]# cd ..
[root@localhost /]# cd
[root@localhost ~]# ls

[root@localhost ~]# cd /opt/a/b/c/d
[root@localhost d]# pwd
/opt/a/b/c/d

#"-"可在两个路径之间来回切换
[root@localhost d]# cd /etc/yum
[root@localhost yum]# cd -
/opt/a/b/c/d

[root@localhost d]# pwd
/opt/a/b/c/d

[root@localhost d]# cd -
/etc/ym

[root@localhost yum]# cd -
/opt/a/b/c/d

[root@localhost d]# cd -
/etc/yum
# rmdir 删除空目录命令
  • rmdir(英文全拼:remove directory)删除空目录
  • 命令格式:rmdir [- 选项] 目录名
代码语言:javascript复制
#rmdir只能删除空目录,如果目录下存在数据无法删除
[root@localhost ~]# rmdir /opt/a
rmdir: 删除 "/opt/a" 失败: 目录非空
[root@localhost ~]# ls -R /opt/a
/opt/a:
b

/opt/a/b:
c

/opt/a/b/c:
d

/opt/a/b/c/d:

[root@localhost ~]# rmdir /opt/a/b/c/d
[root@localhost ~]# ls -R /opt/a
/opt/a:
b

/opt/a/b:
c

/opt/a/b/c:

[root@localhost ~]# rmdir /opt/a/b/c
[root@localhost ~]# ls -R /opt/a/b
/opt/a/b:

[root@localhost ~]# rmdir /opt/a/b
[root@localhost ~]# ls -R /opt/a
/opt/a:

[root@localhost ~]# rmdir /opt/a
[root@localhost ~]# ls /opt
rh  student  xx

[root@localhost ~]# rmdir /opt/
rmdir: 删除 "/opt/" 失败: 目录非空
# touch 创建文件命令
  • touch 命令用于创建新的空白文件
  • 命令格式:touch [- 选项] 文件名
代码语言:javascript复制
#在当前路径创建空文件
[root@localhost ~]# touch hello
[root@localhost ~]# ls

#在当前路径同时创建多个文件
[root@localhost ~]# touch t1 t2 t3 t4
[root@localhost ~]# ls

#在指定路径同时创建多个文件
[root@localhost ~]# touch /opt/test1 /opt/test2 /opt/test3
[root@localhost ~]# ls /opt
rh  student  test1  test2  test3  xx

#如果存在同名目录时,无法创建
[root@localhost ~]# mkdir test
mkdir: 无法创建目录"test": 文件已存在

#如果存在同名文件时,touch命令没有提示,但原有文件不会被覆盖
[root@localhost ~]# touch t1

#对于目录而言,只有单个目录的时候,“/”可有可无
[root@localhost ~]# ls /opt/
rh  student  test1  test2  test3  xx
[root@localhost ~]# ls /opt
rh  student  test1  test2  test3  xx

#对于目录而言,查看目录下的内容时,必须要有“/”
[root@localhost ~]# ls /opt/xx
oo

#对于文件而言,后边绝对不能有“/”
[root@localhost ~]# ls /opt/test1
/opt/test1
[root@localhost ~]# ls /opt/test1/
ls: 无法访问/opt/test1/: 不是目录
# cp 复制命令
  • cp(英文全拼:copy file)用于复制文件或目录,cp 命令在复制时也可修改目录或文件名字
  • 命令格式:cp [- 选项] 源文件或目录 目标目录
  • 常用选项:
    • -p 保留源文件属性不变(如:修改时间、归属关系、权限)
    • -r 复制目录(包含该目录下所有的子目录和文件)
代码语言:javascript复制
#复制当前目录文件到/opt目录(相对路径方式复制)
[root@localhost ~]# cp t1 /opt/
[root@localhost ~]# ls /opt
rh  student  t1  test1  test2  test3  xx

#复制文件到/opt目录(绝对路径方式复制)
[root@localhost ~]# cp /root/t2 /opt
[root@localhost ~]# ls /opt
rh  student  t1  t2  test1  test2  test3  xx

#同时复制多个文件
[root@localhost ~]# cp t3 t4 /opt/
[root@localhost ~]# ls /opt

#创建目录
[root@localhost ~]# mkdir abc

#使用-r对目录执行复制
[root@localhost ~]# cp -r abc /opt
[root@localhost ~]# ls /opt

#同时复制多个目录
[root@localhost ~]# mkdir abc1 abc2 abc3
[root@localhost ~]# cp -r abc1 abc2 abc3 /opt
[root@localhost ~]# ls /opt

#复制hello文件到/opt并改名为hello.txt
[root@localhost ~]# cp hello /opt/hello.txt
[root@localhost ~]# ls /opt

#复制xxxx目录到/opt并改名xxoo
[root@localhost ~]# mkdir xxxx
[root@localhost ~]# cp -r xxxx /opt/xxoo
[root@localhost ~]# ls /opt

#使用“.”配合cp命令执行复制
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# pwd
/etc/sysconfig/network-scripts

[root@localhost network-scripts]# cp /root/t1 .
[root@localhost network-scripts]# ls

#操持属性不变复制文件
[root@localhost ~]# cp -p anaconda-ks.cfg /opt
cp:是否覆盖"/opt/anaconda-ks.cfg"? y                         
[root@localhost ~]# ls -l /opt/anaconda-ks.cfg 
-rw-------. 1 root root 1800 3月  13 17:34 /opt/anaconda-ks.cfg

#对比以上两个文件的详细属性信息(最后一次修改时间)
[root@localhost ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 1800 3月  13 17:34 anaconda-ks.cfg

#这两个操作代表什么意思?
[root@localhost ~]# cp -r xxxx /mnt/oooo  #拷贝并改名
[root@localhost ~]# cp -r xxxx /mnt/oooo  #拷贝
# mv 移动命令
  • mv(英文全拼:move file)用于移动文件或目录到其他位置,也可用于修改目录或文件名
  • 命令格式:mv [- 选项] 源文件… 目标路径
代码语言:javascript复制
#移动当前路径hello文件到/mnt目录
[root@localhost ~]# mv hello /mnt
[root@localhost ~]# ls /mnt
hello  home  oooo  test

#同时移动多个文件
[root@localhost ~]# mv t1 t2 t3 t4 /mnt
[root@localhost ~]# ls /mnt
hello  home  oooo  student1  t1  t2  t3  t4  test

#移动/opt目录下文件到/mnt
root@localhost ~]# mv /opt/test1 /opt/test2 /opt/test3 /mnt/
[root@localhost ~]# ls /mnt
hello  home  oooo  student1  t1  t2  t3  t4  test  test1  test2  test3

#移动目录
[root@localhost ~]# mv student1 /mnt
[root@localhost ~]# ls /mnt
hello  home  oooo  student1  test

#移动文件并改名
[root@localhost ~]# mv hello.txt /media/hello
[root@localhost ~]# ls /media/
hello

#移动目录并改名
[root@localhost ~]# mv test /media/testxx
[root@localhost ~]# ls /media/
hello  testxx
# cat 查看文件内容命令
  • cat (英文全拼:concatenate)命令用于查看文本文件内容
  • 命令格式:cat [选项] 文件名
  • 常用选项
    • -n #查看文件时以行号的形式显示文件内容
代码语言:javascript复制
#查看文件内容
[root@localhost ~]# cat anaconda-ks.cfg 
[root@localhost ~]# cat initial-setup-ks.cfg 
[root@localhost ~]# cat /etc/hosts

#查看网卡文件内容,网卡配置文件
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32 
...
NAME="ens32"   //网卡名
UUID="16085f4c-f690-4058-b29e-d55c73387026"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.0.50"     //网卡IP地址
PREFIX="24"			      //子网掩码
GATEWAY="192.168.0.254"   //网关
DNS1="114.114.114.114"    //DNS

#查看当前系统用户基本信息文件内容
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

#查看当前系统主机名配置文件内容
[root@localhost ~]# cat /etc/hostname
localhost.localdomain

#查看当前系统版本信息文件内容
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 

#查看当前系统开机自动挂载配置文件内容
[root@localhost ~]# cat /etc/fstab

#查看系统组基本信息文件内容
[root@localhost ~]# cat /etc/group

#使用“-n”以行号形式显示文件内容
[root@localhost ~]# cat -n /etc/passwd
[root@localhost ~]# cat -n /etc/hostname
[root@localhost ~]# cat -n /etc/fstab
[root@localhost ~]# cat -n /etc/group
[root@localhost ~]# cat -n /etc/services 
# less 命令
  • less 工具是对文件的输出进行分页显示的工具,常用于查看内容量较大的文件
  • 命令格式:less [- 选项] 文件
  • 常用选项:
    • -N #以行号形式显示文件内容
  • 使用技巧:
    • 键盘上下键逐行查看
    • pgdn :向下翻一页(Fn 下键)
    • pgup :向上翻一页(Fn 上键)
  • / 字符串 :搜索指定字符串(n 从上向下搜索,N 从下向上搜索)
    • G:直接跳转到文件最后一行
    • gg:直接跳转到文件行首
    • :1000 #精准的定位到某一行
    • q :退出
代码语言:javascript复制
[root@localhost ~]# less -N /etc/services
# head 与 tail 命令
  • head 命令:用来显示文件开头部分内容,默认显示文件开头 10 行内容
  • 命令格式:head [选项] 参数
  • 常用选项:
    • -n <行数> 指定显示的行数
代码语言:javascript复制
[root@localhost ~]# head /etc/passwd
[root@localhost ~]# head /etc/fstab
[root@localhost ~]# head /etc/group
[root@localhost ~]# head /etc/hostname
[root@localhost ~]# head /etc/hosts
[root@localhost ~]# head /etc/sysconfig/network-scripts/ifcfg-ens32 

#查看存放DNS配置文件信息
[root@localhost ~]# head /etc/resolv.conf 

#使用-n指定显示文件前多少行内容
[root@localhost ~]# head -n 5 /etc/passwd
[root@localhost ~]# head -n 6 /etc/passwd
[root@localhost ~]# head -n 15 /etc/passwd
[root@localhost ~]# head -n 20 /etc/passwd
  • tail 命令:用来显示文件末尾部分内容,默认显示文件末尾 10 行内容
  • 命令格式:tail [选项] 参数
  • 常用选项:-n <行数> 指定显示的行数 -f 动态显示
代码语言:javascript复制
[root@localhost ~]# tail /etc/passwd

#使用“-n”指定显示文件末尾多少行内容
[root@localhost ~]# tail -n 5 /etc/passwd
[root@localhost ~]# tail -n 5 /etc/sysconfig/network-scripts/ifcfg-ens32 
IPADDR="192.168.0.50"
PREFIX="24"
GATEWAY="192.168.0.254"
DNS1="114.114.114.114"
IPV6_PRIVACY="no"

#动态查看文件内容
[root@localhost ~]# touch t1
root@localhost ~]# tail -f t1

#另开一个终端向文件写入内容
[root@localhost ~]# echo 123 > t1
# rm 删除命令
  • rm(英文全拼:remove)命令用于删除文件或者目录。
  • 命令格式:rm [- 选项…] 目录或文件…
  • 常用选项
    • -f 强制删除
    • -r 删除目录
    • “*” 特殊字符:系统常用符号,用来代表任意所有字符
代码语言:javascript复制
[root@localhost ~]# ls /opt
abc  abc1  abc2  abc3  anaconda-ks.cfg  hello.txt  home  rh  student  t1  t2  t3  t4  xx  xxoo

[root@localhost ~]# ls /mnt
hello  home  oooo  student1  t1  t2  t3  t4  test  test1  test2  test3

#删除指定目录下文件
[root@localhost ~]# rm /opt/anaconda-ks.cfg 
rm:是否删除普通文件 "/opt/anaconda-ks.cfg"?y  #默认需要确认(y|n)

#查看文件是否被成功删除
[root@localhost ~]# ls /opt
abc  abc1  abc2  abc3  hello.txt  home  rh  student  t1  t2  t3  t4  xx  xxoo

[root@localhost ~]# rm /opt/hello.txt 
rm:是否删除普通空文件 "/opt/hello.txt"?y

#同时删除目录下指定文件
[root@localhost ~]# rm /opt/t1 /opt/t2 /opt/t3 /opt/t4
rm:是否删除普通空文件 "/opt/t1"?y
rm:是否删除普通空文件 "/opt/t2"?y
rm:是否删除普通空文件 "/opt/t3"?y
rm:是否删除普通空文件 "/opt/t4"?y

#查看文件是否被成功删除
[root@localhost ~]# ls /opt
abc  abc1  abc2  abc3  home  rh  student  xx  xxoo

#使用“-f”强制删除文件(无需确认,直接删除)
[root@localhost ~]# rm -f /mnt/hello
[root@localhost ~]# ls /mnt
home  oooo  student1  t1  t2  t3  t4  test  test1  test2  test3

#同时强制删除多个文件
[root@localhost ~]# rm -f /mnt/t1 /mnt/t2 /mnt/t3 /mnt/t4
[root@localhost ~]# ls /mnt

#删除目录
[root@localhost ~]# rm  -r /opt/abc
rm:是否删除目录 "/opt/abc"?y

[root@localhost ~]# ls /opt
abc1  abc2  abc3  home  rh  student  xx  xxoo

#同时删除多个目录
[root@localhost ~]# rm -r /opt/abc1 /opt/abc2 /opt/abc3
rm:是否删除目录 "/opt/abc1"?y
rm:是否删除目录 "/opt/abc2"?y
rm:是否删除目录 "/opt/abc3"?y

[root@localhost ~]# ls /opt
home  rh  student  xx  xxoo

#同时强制删除多个目录
[root@localhost ~]# rm -rf /opt/home /opt/student /opt/xx /opt/xxoo
[root@localhost ~]# ls /opt
rh

#创建目录与文件
[root@localhost ~]# touch /opt/t1
[root@localhost ~]# mkdir /opt/test
[root@localhost ~]# ls /opt
rh  t1  test

#rm命令在删除目录时,包含改目录及目录下所有数据全部删除
[root@localhost ~]# rm -rf /opt/
[root@localhost ~]# ls /

[root@localhost ~]# ls /mnt
home  oooo  student1  test  test1  test2  test3

#使用“*”通配任意所有字符,删除/mnt目录下所有数据
[root@localhost ~]# rm -rf /mnt/*
[root@localhost ~]# ls /mnt
# 软连接与硬连接
  • Linux 中的链接文件类似于 windows 中的快捷方式
  • 软连接特点:软连接可以跨分区,可以对目录进行链接,源文件删除后,链接文件不可用
  • 软连接命令格式:ln -s 源文件路径 目标路径
  • 注意:创建链接时一定要写目录或文件的绝对路径,哪怕是在当前路径下,也要写绝对路径・
代码语言:javascript复制
[root@localhost ~]# touch hello.soft
[root@localhost ~]# ls

#创建软连接(必须要绝对路径创建)
[root@localhost ~]# ln -s /root/hello.soft /opt
[root@localhost ~]# ls /opt

#查看连接文件详细属性
[root@localhost ~]# ls -l /opt/hello.soft 
lrwxrwxrwx. 1 root root 16 3月  21 14:28 /opt/hello.soft -> /root/hello.soft
#提示:链接文件的权限最终取决于源文件的权限

#普通用户验证
[lisi@localhost ~]$ ls /opt
hello.soft
[lisi@localhost ~]$ ls -l /opt/hello.soft 
lrwxrwxrwx. 1 root root 16 3月  21 14:28 /opt/hello.soft -> /root/hello.soft
[lisi@localhost ~]$ cat /opt/hello.soft 
cat: /opt/hello.soft: 权限不够
#提示:由于源文件存放于/root目录下,而普通用户对/root目录没有任何权限,所以普通用户无法查看

#删除源文件
[root@localhost ~]# rm -f /root/hello.soft 
[root@localhost ~]# ls

#删除源文件后,软链接文件不可用
[root@localhost ~]# ls -l /opt/hello.soft 
lrwxrwxrwx. 1 root root 16 3月  21 14:28 /opt/hello.soft -> /root/hello.soft

#创建文件并创建软连接
[root@localhost ~]# touch hello.soft
[root@localhost ~]# ln -s /root/hello.soft /opt

[root@localhost ~]# ls -l /opt/hello.soft 
lrwxrwxrwx. 1 root root 16 3月  21 14:39 /opt/hello.soft -> /root/hello.soft

#删除链接文件后,源文件仍然可用
[root@localhost ~]# rm -f /opt/hello.soft 
[root@localhost ~]# ls
[root@localhost ~]# cat hello.soft 

#对目录创建软连接
[root@localhost ~]# ln -s /root/test1 /opt/

[root@localhost ~]# ls -ld /opt/test1
lrwxrwxrwx. 1 root root 11 3月  21 14:44 /opt/test1 -> /root/test1

3创建链接时一定要写目录或文件的绝对路径,哪怕是在当前路径下,也要写绝对路径
[root@localhost ~]# ln -s hello.soft /opt
[root@localhost ~]# ls /opt
hello.soft  test1
[root@localhost ~]# ls -l /opt/hello.soft 
lrwxrwxrwx. 1 root root 10 3月  21 14:47 /opt/hello.soft -> hello.soft
  • 硬链接特点:硬连接不可以跨分区,不可以对目录进行链接,源文件删除后,链接文件仍然可用
  • 硬连接命令格式:ln 源文件路径 目标路径
代码语言:javascript复制
#创建文件,并创建硬连接
[root@localhost ~]# touch hello.hard
[root@localhost ~]# ln /root/hello.hard /opt/
[root@localhost ~]# ls /opt
hello.hard  hello.soft  test1

#向硬连接的源文件写入内容
root@localhost ~]# echo 123 > /root/hello.hard 

#查看源文件内容
[root@localhost ~]# cat /root/hello.hard 
123

#查看链接文件内容,以同步更新
[root@localhost ~]# cat /opt/hello.hard 
123

#向链接文件写入内容,查看源文件以同步更新
[root@localhost ~]# echo xx >> /opt/hello.hard 

#擦看源文件,以同步更新
[root@localhost ~]# cat /root/hello.hard 
123
xx

#硬连接文件的特点可以保持文件属性不发生改变
[root@localhost ~]# ls -l /root/hello.hard 
-rw-r--r--. 2 root root 7 3月  21 14:55 /root/hello.hard
[root@localhost ~]# ls -l /opt/hello.hard 
-rw-r--r--. 2 root root 7 3月  21 14:55 /opt/hello.hard

#并且硬连接文件的i节点号相同
[root@localhost ~]# ls -i /root/hello.hard 
33711090 /root/hello.hard
[root@localhost ~]# ls -i /opt/hello.hard 
33711090 /opt/hello.hard

#硬连接不允许对目录进行连接
root@localhost ~]# ln /root/test1 /opt
ln: "/root/test1": 不允许将硬链接指向目录

#硬连接源文件删除后,链接文件仍然可用
[root@localhost ~]# rm -f /root/hello.hard 
[root@localhost ~]# cat /opt/hello.hard 
123
xx

#向硬连接文件写入内容
[root@localhost ~]# echo  abc >> /opt/hello.hard 
[root@localhost ~]# cat /opt/hello.hard 
123
xx
abc

#硬连接不允许跨分区
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom  
[root@localhost ~]# ln /root/hello.soft /boot
ln: 无法创建硬链接"/boot/hello.soft" => "/root/hello.soft": 无效的跨设备连接
# Linux 命令的分类
  • 内部命令:bash 程序自带的基本管理命令
  • 外部命令:有独立的外部可执行程序文件命令
  • type 用于区别内部命令与外部命令
  • which 用于查找可以执行程序文件位置
代码语言:javascript复制
[root@localhost opt]# type ls

[root@localhost opt]# type cat

[root@localhost opt]# type hash

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

[root@localhost ~]# hash
命中	命令
   1	/usr/bin/cat
   1	/usr/bin/ls


[root@localhost opt]# hash -r
[root@localhost opt]# 
[root@localhost opt]# hash
hash: 哈希表为空

[root@localhost opt]# ls
hello.hard  hello.soft  t1  test1  test.txt
[root@localhost opt]# hash
命中	命令
   1	/usr/sbin/ls
  • 总结:
    • shell 程序是用户和系统之间的接口,用于解释用户的命令
    • 查找命令对应的程序文件所在位置:which 命令
    • shell 程序大多数存放在 /etc/shells 文件中
    • 系统默认使用的 shell 为 /bin/bash
    • 查看当前使用的 shell:echo $SHELL
    • 区别内部命令与外部命令的方式:typt 命令
    • shell 程序查找可执行程序文件路径定义在 $PATH 环境变量中
    • shell 查找的外部命令路径结果会记录到缓存的 hash 表中
# help 命令帮助手册
  • help 命令用于查看 shell 内部命令的帮助信息,包括使用方法、选项等…
  • 命令格式:help [选项] 命令
代码语言:javascript复制
#获取内部命令帮助信息
[root@localhost etc]# help cd

#help无法获取外部命令的帮助信息
root@localhost etc]# help ls
bash: help: 没有与 `ls' 匹配的帮助主题。尝试 `help help' 或者 `man -k ls' 或者 `info ls'。

[root@localhost etc]# type help
help 是 shell 内嵌

#获取help命令本身的帮助信息
[root@localhost etc]# help help

[root@localhost etc]# type cat
cat 是 /usr/bin/cat

[root@localhost etc]# help cat
bash: help: 没有与 `cat' 匹配的帮助主题。尝试 `help help' 或者 `man -k cat' 或者 `info cat'。

#查看命令帮助手册(命令自带)
[root@localhost etc]# cat --help
[root@localhost etc]# ls --help
# man 获取命令帮助手册
  • man 命令用于查看系统命令的帮助信息,包括使用方法、选项、使用例子等…,对比–help ,man 输出的信息更加详细
  • 命令格式:man [- 选项] 命令
  • 常用快捷操作
    • 向下键向下移一行
    • 向上键向上移一行
    • [Page Down] 向下翻一页
    • [Page Up] 向上翻一页
    • / 关键字 #搜索关键字,配合 n(向下查询)、N(向上查询)
    • q 退出
代码语言:javascript复制
[root@localhost etc]# man ls
[root@localhost etc]# man cat
[root@localhost etc]# man touch
[root@localhost etc]# man mkdir
代码语言:javascript复制
[root@localhost etc]# info ls
# Linux 系统的运行级别

Linux 系统运行级别:linux 系统有 7 个运行级别,不同的运行级别运行的程序和功能都不一样,而 Linux 系统默认是运行在一个标准的级别上,系统运行级别文件 /etc/inittab 文件

运行级别 0:所有进程被终止,机器将有序的停止,关机时系统处于这个运行级别(关机)

运行级别 1:单用户模式,(root 用户进行系统维护),系统里运行的所有服务也都不会启动

运行级别 2:多用户模式(网络文件系统 NFS 服务没有被启动)

运行级别 3:完全多用户模式,(有 NFS 网络文件系统)标准的运行级别,命令行模式

运行级别 4:系统未使用

运行级别 5:登录后,进入带 GUI 的图形化界面,标准的运行级别

运行级别 6:系统正常关闭并重启

代码语言:javascript复制
#查看当前系统运行级别
[root@localhost etc]# runlevel
N 5
#解释;当前系统处于的运行级别
#解释:N代表没有从任何级别跳转过来

#切换系统运行级别
[root@localhost ~]# init N

#查看运行级别文件内容
[root@localhost ~]# cat /etc/inittab 
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3   #运行级别3
# graphical.target: analogous to runlevel 5    #运行级别5
#
# To view current default target, run:
# systemctl get-default    				 #查看当前系统默认的运行级别
#
# To set a default target, run:
# systemctl set-default TARGET.target    #修改当前系统默认运行级别  

#查看默认运行级别
[root@localhost ~]# systemctl get-default
graphical.target  #默认运行级别为5

 #修改默认运行级别为3
[root@localhost ~]# systemctl set-default multi-user.target 
[root@localhost ~]# systemctl get-default
multi-user.target

#修改默认运行级别为5
[root@localhost ~]# systemctl set-default graphical.target
[root@localhost ~]# systemctl get-default
graphical.target
# 关机与重启
  • linux 下常用的关机命令有:shutdown、halt、poweroff、init
    • init 0 关机
    • halt #立刻关机
  • shutdown –h now #立刻关机
    • shutdown -h 10 #10 分钟后自动关机
    • poweroff #立刻关机 (记这个)
代码语言:javascript复制
[root@localhost ~]# poweroff
  • 重启命令:reboot shutdown
    • reboot #立刻重启 (记这个)
    • shutdown -r now #立刻重启
    • shutdown -r 10 #过十分钟后重启
代码语言:javascript复制
[root@localhost ~]# reboot
# 课后练习

1. 请在 /tmp 目录下创建 student 目录,并在 student 目录下同时创建 t1、t2、t3 文件

mkdir /tmp/student

cd /tmp/student/

touch t1 t2 t3

touch /tmp/student/t1 /tmp/student/t2 /tmp/student/t3

2. 请在 /tmp 目录下递归创建 test1/test2/test3 目录

mkdir -p /tmp/test1/test2/test3

3. 切换到 /tmp/test1/test2/test3 目录下,并打印 (查看) 当前所在目录

cd /tmp/test1/test2/test3

pwd

4. 请同时在 /opt、/media 目录下创建 upload 文件

touch /opt/upload /media/upload

5. 请将 /opt 目录下的 upload 文件移动至 /tmp/test1/test2/test3 目录下,并改名为 upload.bak

mv /opt/upload /tmp/test/1/test/2/test3/upload.bak

6. 请将 /etc/passwd 文件拷贝至 /opt 目录下,改名为 passwd.bak,并保持属性不变

cp -p /etc/passwd /opt/passwd.bak

7. 请将 /etc/fstab 文件拷贝至 /opt 目录下,并改名为 fstab.bak

cp -p /etc/fstab /opt/fstab.bak

8. 请将 /etc/sysconfig/network-scripts/ifcfg-ens32 文件拷贝至 /opt 目录下,并改名为 ens32.bak

cp /etc/sysconfig/network-scripts/ifcfg-ens32 /opt/ens32.bak

9. 请删除 /etc/yum.repos.d/ 目录下所有内容

rm -rf /etc/yum.repos.d/*

10. 请在 /etc/yum.repos.d/ 目录下创建 local.repo 文件

touch /etc/yum.repos.d/local.repo

11. 请查看 /etc/sysconfig/network-scripts/ifcfg-ens32 文件末尾 5 行内容

tail -5 /etc/sysconfig/network-scripts/ifcfg-ens32

tail -n 5 /etc/sysconfig/network-scripts/ifcfg-ens32

12. 请查看 /etc/passwd 文件第 1 行内容

head -n 1 /etc/passwd

head -1 /etc/passwd

13. 请查看 /etc/hostname 文件内容

cat /etc/hostname

14. 请查看 /etc/hosts 文件内容

cat /etc/hosts

15. 请说出软连接与硬连接的特点

软连接:可以跨分区,可以对目录链接,源文件删除后链接文件不可用

硬连接:不可以跨分区,不可以对目录进行连接,源文件删除后,链接文件以然可用

16. 请在 /opt 目录下创建 hello.soft 文件,并创建软连接到 /tmp 目录下

touch /opt/hello.soft

ln -s /opt/hello.soft /tmp

17. 请在 /opt 目录下创建 hello.hard 文件,并创建硬连接到 /tmp 目录下,并查看连接文件详细属性

touch /opt/hello.hard

ln /opt/hello.hard /tmp

18. 如何获取 ls 命令的帮助信息?

man ls

ls --help

19. 请说出 Linux 系统的运行级别

0:关机

1:单用户模式

2:多用户模式(没有 NFS)

3:完全多用户模式,标准运行级别

4:保留

5:带 GUI 图形化界面,标准的运行级别

6:系统关闭并重启

20. 如何重启 Linux 系统?

reboot

init 6

# 计算机硬件组成部分
  • 输入设备:键盘、鼠标、触控屏等
  • 主机设备:主板、中央处理器(CPU)、主存储器(内存)、网卡、声卡、显示卡等
  • 输出设备:屏幕、耳机、打印机、投影仪等
  • 外部存储设备:硬盘、软盘、光盘、U 盘等、蓝光光驱
  • CPU 缓存
  • CPU 比较主流的厂商
    • AMD 公司
    • Interl 公司
  • CPU 架构
    • x86 架构,8086 架构,80286,80386,x86 称号
    • 8 位、16 位、32 位、64 位,CPU 一次可以处理的数据量,
    • 32 位 CPU 一次可以从内存中读取大约 3.25G 左右的数据量
    • 64 位 CPU 一次可以从内存中读取大约 128G 左右的数据量
  • CPU 核心
    • 单核心,一颗 CPU 只能有一个运算单元
    • 多核心,一颗 CPU 里边有两个以上的运算单
# Linux 系统目录介绍
  • /(根): 系统所有数据都存放在根目录下
  • /bin:存放用户和管理员必备的可执行的二进制程序文件
  • /boot:存放 Linux 系统内核及引导系统程序所需要的文件目录
  • /dev:存放硬件设备的目录,如键盘、鼠标、硬盘、光盘等等 (记住)
  • /etc:存放服务的配置文件,用户信息文件 (记住)
  • /root:超级管理员的家目录
  • /home:系统普通用户的家目录(记住)
  • /lib:存放系统中的程序运行所需要的共享库及内核模块
  • /opt:额外安装的可选应用程序包所放置的位置
  • /srv:服务启动之后需要访问的数据目录
  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
  • /var:存放系统执行过程中经常变化的文件,如随时都在变化的日志文件就存放 /var/log/ 下 (记住)
  • /mnt、/media :光盘和镜像等预设的挂载点(记住)
  • /proc:Linux 伪文件系统,该目录下的数据存在于内存当中,不占用磁盘空间
  • /lib64 :存放函式库
  • /run :程序或服务启动后,存放 PID 的目录
  • /sys:存放被建立在内存中的虚拟文件系统
  • /usr:操作系统软件资源所放置的目录
    • /usr/bin:与 /bin 目录相同,存放用户可以使用的命令程序
    • /usr/lib:与 /lib 目录相同,存放系统中的程序运行所需要的共享库及内核模块
    • /usr/etc:用于存放安装软件时使用的配置文件
    • /usr/games:与游戏比较相关的数据放置处
    • /usr/include:c/c 等程序语言的档头 (header) 与包含档 (include) 放置处
    • /usr/lib64:与 /lib64 目录相同,存放函式库
    • /usr/libexec:不经常被使用的执行程序或脚本会放置在此目录中
    • /usr/local: 额外安装的软件存放目录 (记住)
    • /usr/sbin:该目录与 /sbin 目录相同,存放用户可执行的二进制程序文件
    • /usr/share: 放置只读架构的杂项数据文件
    • /usr/src:一般软件源代码建议存放该目录下
# 查看内核信息
  • uname 命令用于显示系统内核信息
  • 命令格式:uname [- 选项…]
  • 常用选项:
    • -s :显示内核名称
    • -r :显示内核版本
代码语言:javascript复制
[root@localhost ~]# uname
Linux

[root@localhost ~]# uname -rs
Linux 3.10.0-957.el7.x86_64
#解释:
Linux 	#内核名称
3		#主版本
10		#次版本
0		#修改版本
957		#补丁次数
el7		#Enterprise Linux(企业版Linux)
x86_64	#CPU架构

#Linux内核官网
https://www.kernel.org/
# 查看 CPU 信息
  • /proc/cpuinfo 文件用于存放系统 CPU 信息
  • lscpu 用于显示 CPU 架构信息
  • 命令格式:lscpu [- 选项]
代码语言:javascript复制
#查看/proc/cpuinfo文件内容
[root@localhost ~]# cat /proc/cpuinfo 
processor :#系统中逻辑处理核的编号。对于单核处理器,则可认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
vendor_id :   #CPU制造商     
cpu family :  #CPU产品系列代号
model   :    #CPU属于其系列中的哪一代的代号
model name:    #CPU属于的名字及其编号、标称主频
stepping   :   #CPU属于制作更新版本
cpu MHz   :    #CPU的实际使用主频
cache size   :  #CPU二级缓存大小
physical id   : #单个CPU的标号
siblings       :#单个CPU逻辑物理核数
core id        :#当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores    :  #该逻辑核所处CPU的物理核数
apicid          :#用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu             : #是否具有浮点运算单元(Floating Point Unit)
fpu_exception  :  #是否支持浮点计算异常
cpuid level   :   #执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp             :  #表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags          :   #当前CPU支持的功能
bogomips   :       #在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
clflush size  :    #每次刷新缓存的大小单位
cache_alignment :  #缓存地址对齐单位
address sizes     :#可访问地址空间位数
power management : #对能源管理的支持,有以下几个可选支持功能:
代码语言:javascript复制
#使用lscpu查看cpu信息
[root@localhost ~]# lscpu
 Architecture: #架构 
  CPU(s): #逻辑cpu颗数 
  Thread(s) per core: #每个核心线程 
  Core(s) per socket: #每个cpu插槽核数/每颗物理cpu核数 
  CPU socket(s): #cpu插槽数 
  Vendor ID: #cpu厂商ID 
  CPU family: #cpu系列 
  Model: #型号 
  Stepping: #步进 
  CPU MHz: #cpu主频 
  Virtualization: #cpu支持的虚拟化技术 
  L1d cache: #一级缓存(google了下,这具体表示表示cpu的L1数据缓存) 
  L1i cache: #一级缓存(具体为L1指令缓存) 
  L2 cache: #二级缓存
# 查看系统内存信息
  • /proc/meminfo 文件用于存放系统内存信息
  • free 用于查看内存使用情况
  • 命令格式:free [- 选项]
  • 常用选项:-h #以人类易读方式显示大小(KB,MB,GB)
代码语言:javascript复制
#查看/proc/meminfo文件内容
[root@localhost ~]# cat /proc/meminfo 
MemTotal:          995896 kB    #所有可用的内存大小,物理内存减去预留位和内核使用。系统从加电开始到引导完成,firmware/BIOS要预留一些内存,内核本身要占用一些内存,最后剩下可供内核支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的,重启会改变。
MemFree:            244196 kB   #表示系统尚未使用的内存。
MemAvailable:       435080 kB   #真正的系统可用内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存
Buffers:             2132 kB   #用来给块设备做缓存的内存,(文件系统的 metadata、pages)
Cached:             314632 kB  #分配给文件缓冲区的内存,例如vi一个文件,就会将未保存的内容写到该缓冲区
SwapCached:            0 kB    #被高速缓冲存储用的交换空间(硬盘的swap)的大小
Active:            295908 kB    #经常使用的高速缓冲存储器页面文件大小
Inactive:          271552 kB    #不经常使用的高速缓冲存储器文件大小
Active(anon):      251528 kB    #活跃的匿名内存
Inactive(anon):     13044 kB    #不活跃的匿名内存
Active(file):       44380 kB    #活跃的文件使用内存
Inactive(file):    258508 kB   #不活跃的文件使用内存
Unevictable:           0 kB    #不能被释放的内存页
Mlocked:               0 kB    #系统调用 mlock 家族允许程序在物理内存上锁住它的部分或全部地址空间。这将阻止Linux 将这个内存页调度到交换空间(swap space),即使该程序已有一段时间没有访问这段空间
SwapTotal:             0 kB    #交换空间总内存
SwapFree:              0 kB    #交换空间空闲内存
Dirty:                 4 kB    #等待被写回到磁盘的
Writeback:             0 kB    #正在被写回的
AnonPages:         15100 kB    #未映射页的内存/映射到用户空间的非文件页表大小
Mapped:             7160 kB    #映射文件内存
Shmem:               100 kB    #已经被分配的共享内存
Slab:               9236 kB    #内核数据结构缓存
SReclaimable:       2316 kB    #可收回slab内存
SUnreclaim:         6920 kB    #不可收回slab内存
KernelStack:        2408 kB    #内核消耗的内存
PageTables:         1268 kB    #管理内存分页的索引表的大小
NFS_Unstable:          0 kB    #不稳定页表的大小
Bounce:                0 kB    #在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
WritebackTmp:          0 kB    #FUSE用于临时写回缓冲区的内存
CommitLimit:       22980 kB    #系统实际可分配内存
Committed_AS:     536244 kB    #系统当前已分配的内存
VmallocTotal:     892928 kB    #预留的虚拟内存总量
VmallocUsed:       29064 kB    #已经被使用的虚拟内存
VmallocChunk:     860156 kB    #可分配的最大的逻辑连续的虚拟内存
代码语言:javascript复制
#使用free命令查看内存使用情况
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        344M        238M         13M        389M        424M
Swap:          2.0G          0B        2.0G
#解释:Mem 物理内存统计信息
total:		#物理内存总量
used:		#以使用的内存总量
free:		#空闲内存总量
shared:		#共享内存总量
buff/cache:	#块设备与普通文件占用的缓存数量
available:	#还可以被应用程序使用的物理内存大小

#解释:Swap 内存交换空间,当物理内存不足时,可以使用硬盘空间充当内存使用
total:		#交换分区内存总量
used:		#正在使用的交换分区内存
free:		#空闲交换分区内存
# 查看网卡信息
  • 网卡配置文件地址: /etc/sysconfig/network-scripts/ 网卡名
  • ifconfig 用于显示和设置网卡的参数
  • 命令格式: ifconfig [网卡名]
代码语言:javascript复制
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
TYPE=“Ethernet“			#网卡类型=以太 ※
PROXY_METHOD=“none“		#代理方式=关闭
BROWSER_ONLY="no“		#只是浏览器=否
BOOTPROTO=“none“		#获取IP地址的方式=固定IP ※
DEFROUTE=“yes“			#是否设置默认路由=是
IPV4_FAILURE_FATAL=“no“	#是否开启ipv4致命检测=否(如果ipv4配置失败禁用设备)
NAME=“ens32“			#物理网卡设备名字 ※
UUID=“3ef0d258-f9a4-49e5-a9da-7b47bc98daa0	“#网卡UUID
DEVICE=“ens32“			#网卡名字 ※
ONBOOT=“yes“			#开机或重启时是否启动网卡  ※
IPADDR=“192.168.0.210“	#IP地址  ※
PREFIX=“24“				#子网掩码 ※
GATEWAY=“192.168.0.254“	#网关	※
DNS1=“8.8.8.8“			#dns服务器IP地址 ※
DNS2=8.8.4.4			#备用dns服务器IP地址 ※
代码语言:javascript复制
#使用ifconfig命令查看网卡信息
[root@localhost ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.29  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::8d50:c4d5:97b0:9d64  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b0:cf:c8  txqueuelen 1000  (Ethernet)
        RX packets 3948  bytes 1811465 (1.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2538  bytes 459113 (448.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#解释:
ens32:		 #网卡名称  ※
flags=4163:	#标志
UP:			#网卡处于活跃状态  ※
BROADCAST:	#支持广播
RUNNING:	#网线已接入
MULTICAST:	#支持组播
mtu 1500:	#最大传输单元(字节),表示此网卡一次能传输的最大数据包 ※
inet 192.168.0.29		#IPV4地址 ※
netmask 255.255.255.0	#子网掩码 ※
broadcast 192.168.0.255	#广播地址 ※
inet6 fe80::8d50:c4d5:97b0:9d64		#IPV6地址
prefixlen 64  scopeid 0x20<link>	#前缀 64 作用域 0x20
ether 00:0c:29:b0:cf:c8	#网卡MAC地址 ※
xqueuelen 1000			#网卡设置的传送队列长度
(Ethernet)				#网卡连接类型
RX packets 3948			#接收正确的数据包 ※
bytes 1811465 (1.7 MiB)	#接收的数据量与字节 ※
RX errors 0  dropped 0  overruns 0  frame 0 #接收到的错误包、丢弃的数据包数、由于速度过快而丢失的数据包、发生frame错误而丢失的数据包数 ※
TX packets 100 		#发送的正确的数据包数 ※
bytes 8116 (7.9 KiB)#发送的数据量、字节  ※
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 #发送时产生错误的数据包数、丢弃的数据包数、由于速度过快而丢失的数据包数、发生carrier错误而丢失的数据包数、冲突信息包的数目 ※

#只查看指定的网卡
[root@localhost ~]# ifconfig ens32


lo: 本地回环网卡,不是物理网卡,通过软件虚拟出来的一个网卡,127.0.0.1,用于测试本机的联通性
[root@localhost ~]# ping 127.0.0.1

virbr0: 虚拟化的网络接口,通过软件技术虚拟出来的一个网卡,192.168.122.1,KVM虚拟化技术的时候
# 查看主机名及修改主机名
  • /etc/hostname 文件用于存放主机名
  • hostname 命令用于显示和设置主机名
  • 命令格式:hostname [新名称]
代码语言:javascript复制
#查看主机名
[root@localhost ~]# hostname
localhost.localdomain

#查看主机名配置文件
[root@localhost ~]# cat /etc/hostname 
localhost.localdomain

#临时修改主机名(立刻生效,服务器重启以后失效)
[root@localhost ~]# hostname test
[root@localhost ~]# hostname
test

#exit/loguot登出系统
[root@localhost ~]# exit
[c:~]$ ssh 192.168.0.50
[root@test ~]# 

[root@test ~]# hostname fhsd.jhglshdjkghjkdfhgkjhgdsahgjklhdsfjghsdhgjlhsd
[root@test ~]# logout

[root@fhsd ~]# hostname sdhjghsdfjkhgkjdfshkgljhsdjfhgjksdhgjkhsdjgjkl
[root@fhsd ~]# exit

#命令行永久修改主机名(立刻生效,不需要重启系统)
[root@localhost ~]# hostnamectl set-hostname test
[root@localhost ~]# exit
# vi/vim 文本编辑器
  • Vim 是从 vi 发展出来的一个文本编辑器,vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性
  • vi/vim 共分为三种模式:命令模式、输入模式、底线命令模式(末行模式)
    • 命令模式:刚刚启动 vi/vim,便进入了命令模式
    • 输入模式:在命令模式下按 a/i/o 就进入了输入模式
    • ESC,退出输入模式,切换到命令模式
    • 底线命令模式:在命令模式下按下:(英文冒号)就进入了底线命令模式
  • 命令格式:vim 文件名
    • 若目标文件不存在,则新创建文件并编辑
    • 若目标文件以存在,则打开文件并编辑
  • 命令模式:刚刚启动 vi/vim,便进入了命令模式
    • i 切换到输入模式,在当前光标所在字符前插入
    • a 切换到输入模式,在当前光标所在字符后插入
    • o 切换到输入模式,在当前光标所在行下插入新行
    • : 切换到底线命令模式,以在最底一行输入命令
    • x 在命令模式下删除当前光标所在的单字符
    • dd 删除一整行内容,配合数字可删除指定范围内的行
    • C 删除当前光标及光标后所有内容并进入输入模式
    • u 恢复上一次修改内容,一次恢复一个操作,可多次恢复,直到恢复本次操作初始状态为止
    • $ 将光标移动至行尾
    • 0(零) 将光标移动至行首
    • gg 跳转至文件第一行
    • G 跳转至文件最后一行
    • yy 复制当前行,配合数字可以同时复制多行
    • p 粘贴当前光标所在行下
    • / 关键字 搜索文件内关键字,n 从上向下快速定位关键字,N 从下向上快速定位关键字
  • 底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
    • :w 保存
    • :q 退出
    • :wq 保存并退出
    • :x 保存并退出
    • ZZ 保存并退出
    • :q! 强制退出不保存
    • :wq! 强制保存并退出,适用于只读文件(没有写权限)
    • :set nu 以行号形式显示文件内容
    • :set nonu 取消行号显示
    • : 行号 快速跳转到指定行
    • :% s 替换文件内容,g 替换全文,默认只替换每一行匹配到的第一个关键字(数字 s 指定替换的行)
    • :nohl 取消高亮显示
代码语言:javascript复制
[root@test ~]# vim /etc/services 
# 修改网卡 IP 地址
  • 网卡配置文件地址: /etc/sysconfig/network-scripts/ 网卡名
  • ifconfig #用于显示和设置网卡的参数
  • systemctl restart network #重启网络
  • ifup 网卡名 #启动该网卡设备
  • ifdown 网卡名 #禁用该网卡设备
代码语言:javascript复制
#修改IP地址
[root@test ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="16085f4c-f690-4058-b29e-d55c73387026"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.0.60"   #修改IP地址
PREFIX="24"
GATEWAY="192.168.0.254"
DNS1="114.114.114.114"
IPV6_PRIVACY="no"
~                    
#重启网络(IP地址发生改变,当前终端会断开)
[root@test ~]# systemctl restart network
[c:~]$ ssh 192.168.0.60

#关闭网卡并激活网卡
[root@localhost ~]# ifdown ens32;ifup ens32

#查看所有网卡信息
[root@test ~]# ip a 
  • 使用命令修改网卡 IP 地址

nmcli connection modify 网卡名 ipv4.method manual ipv4.addresses Ip 地址 / 掩码 connection.autoconnect yes

解释:2

nmcli connection modify(修改)

网卡名 ipv4.method(配置 ipv4 地址方法)

manual (手动配置)

ipv4.addresses(ipv4 地址)

Ip 地址 / 掩码 connection.autoconnect yes(开机自动连接)

  • 激活网卡:nmcli connection up 网卡名
  • 关闭网卡:nmcli connection down 网卡名
  • 重启网卡:nmcli connection reload 网卡名
代码语言:javascript复制
#使用命令修改网卡IPV地址
[root@test ~]# nmcli connection modify ens32 ipv4.method manual ipv4.addresses 192.168.0.50/24 connection.autoconnect yes

#激活网卡
[root@test ~]# nmcli connection up ens32
[c:~]$ ssh 192.168.0.50
# host 命令
  • host 用于将一个域名解析到一个 IP 地址
代码语言:javascript复制
[root@test ~]# host www.baidu.com
www.baidu.com has address 110.242.68.3
www.baidu.com has address 110.242.68.4
www.baidu.com is an alias for www.a.shifen.com.
www.baidu.com is an alias for www.a.shifen.com.
# nslookup 命令
  • nslookup 用于查询域名解析是否正常,在网络故障时用来诊断网络问题
代码语言:javascript复制
[root@test ~]# nslookup www.baidu.com
Server:		114.114.114.114
Address:	114.114.114.114#53

Non-authoritative answer:
Name:	www.baidu.com
Address: 110.242.68.4
Name:	www.baidu.com
Address: 110.242.68.3
# alias 别名管理
  • alias 命令用于设置命令别名,用户可以使用 alias 自定义命令别名来简化命令的复杂度
  • .bashrc 文件存放命令别名
  • 命令格式:aliasi [别名]=[命令] #注意事项:等号(=)前后不能有空格
  • unalias 别名 #取消别名
代码语言:javascript复制
#定义别名
[root@test ~]# alias lsnet='ls /etc/sysconfig/network-scripts/'
[root@test ~]# lsnet
[root@test ~]# alias myls='ls -ldh'
[root@test ~]# myls /opt

#查看当前系统可用命令别名
[root@test ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias lsnet='ls /etc/sysconfig/network-scripts/'
alias mv='mv -i'
alias myls='ls -ldh'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

#两条命令效果相同
[root@test ~]# ls -l hello
-rw-r--r--. 1 root root 426 3月  28 15:00 hello
[root@test ~]# ll hello
-rw-r--r--. 1 root root 426 3月  28 15:00 hello

[root@test ~]# which ls
alias ls='ls --color=auto'
	/usr/sbin/ls
[root@test ~]# /usr/sbin/ls
[root@test ~]# ls

#取消本次命令的别名功能“”
[root@test ~]# ls

#取消命令别名
[root@test ~]# unalias myls
[root@test ~]# myls
bash: myls: 未找到命令...

#定义别名不要跟系统命令发生冲突
[root@test ~]# alias ls=hostname
[root@test ~]# ls
test

#取消命令别名
[root@test ~]# unalias ls
[root@test ~]# alias

#重新定义别名
[root@test ~]# alias ls='ls --color=auto'
[root@test ~]# ls
# history 管理历史
  • history 命令用于显示历史记录和执行过的命令,登录 shell 时会读取~./bash_history 历史文件中记录下的命令,当退出或登出 shell 时,会自动保存到历史命令文件,该命令单独使用时,仅显示历史命令
  • 历史命令默认只能存储 1000 条,可以通过 /etc/profile 文件修改
  • 命令格式:history [- 选项] [参数]
  • 常用选项:
    • -a 追加本次新执行的命令至历史命令文件中
    • -d 删除历史命令中指定的命令
    • -c 清空历史命令列表
  • 快捷操作:
    • !# 调用命令历史中第 N 条命令
    • !string 调用命令历史中以 strind 开头的命令
    • !! 重复执行上一条命令
代码语言:javascript复制
#获取命令帮助
[root@test ~]# help history 

#查看历史命令
[root@test ~]# history

#查看记录历史命令文件
[root@test ~]# cat .bash_history 

#将历史命令同步至历史命令配置文件中
[root@test ~]# history -a
[root@test ~]# cat .bash_history 

#删除历史命令中655条命令历史
[root@test ~]# history -d 655
[root@test ~]# history -d 637

#清空缓存中所有历史命令
[root@test ~]# history -c
[root@test ~]# history
    1  history

#删除历史命令配置文件(该文件删除后系统会再次自动创建)
[root@test ~]# rm -rf .bash_history 

#快速调用历史命令中第1条
[root@test ~]# !1
[root@test ~]# !3

#调用历史命令中以cat开头的命令(只调用最近使用的cat历史命令)
[root@test ~]# !cat

#重复执行上一条命令
[root@test ~]# !!

#历史命令默认只能记录1000条,可以通过/etc/profile文件修改
[root@test ~]# vim /etc/profile
...
46 HISTSIZE=100
# date 日期时间管理
  • date 命令用于显示或设置系统日期与时间
  • 命令格式:date [- 选项] [ 格式符] #查看系统日期时间
  • 命令格式:date [- 选项] #设置日期时间
  • 常用选项:-s 设置日期时间
  • 格式符:
    • % Y 年份
    • % B 月份
    • % d 日
    • % H 时
    • % M 分
    • % S 秒
    • % F 年 - 月 - 日
    • % X 时:分:秒
代码语言:javascript复制
#显示系统日期与时间
[root@test ~]# date
2021年 03月 28日 星期日 17:08:34 CST

#只显示年分
[root@test ~]# date  %Y
2021

#只显示月份
[root@test ~]# date  %B
三月

#只显示几号
[root@test ~]# date  %d
28

#只显示小时
[root@test ~]# date  %H
17

#只显示分钟
[root@test ~]# date  %M
10

#只显示秒
[root@test ~]# date  %S
24

#显示年月日
[root@test ~]# date  %F
2021-03-28

#显示时分秒
[root@test ~]# date  %X
17时12分10秒

#显示年月日时分秒
[root@test ~]# date  %F%X
2021-03-2817时12分39秒

#可以自定义分隔符“-”
[root@test ~]# date  %F-%X
2021-03-28-17时13分38秒

[root@test ~]# date  %F:%X
2021-03-28:17时13分55秒

#修改系统年月日
[root@test ~]# date -s 2020-03-28
2020年 03月 28日 星期六 00:00:00 CST

#修改系统时分秒
[root@test ~]# date -s 17:16:00
2020年 03月 28日 星期六 17:16:00 CST

#修改年月日时分秒
[root@test ~]# date -s '2021-03-28 17:17:00'
2021年 03月 28日 星期日 17:17:00 CST
#解释:
''单引号:引用整体,屏蔽特殊符号的功能
""双引号:引用整体,不会屏蔽特殊符号的功能

#Linux的两种时钟
系统时钟:内核通过CPU的工作频率去计算的时间
硬件时钟:

#显示硬件时间
[root@test ~]# clock
2021年03月28日 星期日 17时23分42秒  -0.945549 秒

#显示并同步系统与硬件时钟
[root@test ~]# man hwclock
-s:把系统时间设置成与硬件时间相同
-w:把硬件时间设置成与系统时间相同
[root@test ~]# hwclock -w
[root@test ~]# date
2021年 03月 28日 星期日 17:27:18 CST

#cal显示日历
[root@test ~]# cal
      三月 2021     
日 一 二 三 四 五 六
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

#显示指定的全年月份
[root@test ~]# cal 2021
# wc 统计命令
  • wc 用于统计文件的字节数、行数,并将统计的结果输出到屏幕
  • 命令格式:wc [- 选项] 文件名
  • 常用选项:
    • -c #统计字节数
    • -l #统计行数
代码语言:javascript复制
[root@test ~]# wc /etc/passwd
43   87 2259 /etc/passwd
行数 单词 字节  文件名

#统计文件字节数
[root@test ~]# wc -c /etc/passwd
2259 /etc/passwd

#统计文件行数
[root@test ~]# wc -l /etc/passwd
43 /etc/passwd

[root@test ~]# wc -l /etc/fstab
11 /etc/fstab
# 管道符
  • 管道符 “|”:将命令的输出结果交给另外一条命令作为参数继续处理
代码语言:javascript复制
[root@test ~]# head -10 /etc/passwd |tail -5

[root@test ~]# head -10 /etc/passwd |tail -5 |wc -l
5

root@test ~]# cat -n /etc/passwd |head -10|tail -5
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin

[root@test ~]# ifconfig ens32 |head -2
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.50  netmask 255.255.255.0  broadcast 192.168.0.255
# 重定向操作
  • 重定向操作:将前面命令的输出结果,写入到其他的文本文件中
  • 重定向的表示符号
    • > #重定向输出(覆盖)
    • >> #重定向输出(追加)
    • < #输入重定向(覆盖)
    • << #输入重定向(追加)
    • > 只收集正确的输出结果
    • 2> 只收集错误的输出结果(覆盖)
    • 2>> 只收集错误的输出结果(追加)
    • &> 正确错误都收集(覆盖)
    • &>> 正确错误都收集(追加)
代码语言:javascript复制
#将命令的输出结果以覆盖的方式重定向到文件中,(>附带创建文件功能)
[root@test ~]# ifconfig ens32 |head -2 > /opt/ens32.bak
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.50  netmask 255.255.255.0  broadcast 192.168.0.255

[root@test ~]# cat /etc/hostname > /opt/ens32.bak 
[root@test ~]# cat /opt/ens32.bak 
test

[root@test ~]# free -h > /opt/free.bak
[root@test ~]# cat /opt/free.bak 
              total        used        free      shared  buff/cache   available
Mem:           972M        414M        123M         15M        435M        336M
Swap:          2.0G          0B        2.0G

#将命令的输出结果以追加的方式重定向到文件中
[root@test ~]# cat /etc/hostname >> /opt/free.bak 
[root@test ~]# cat /opt/free.bak 

#“>”只收集正确的输出结果,不收集错误的输出结果
[root@test ~]# ls xxooooxx > /opt/xx.txt
ls: 无法访问xxooooxx: 没有那个文件或目录

#“2>”只收集错误的输出结果,不收集正确的输出结果
[root@test ~]# ls xxooooxx 2> /opt/xx.txt
[root@test ~]# cat /opt/xx.txt 
ls: 无法访问xxooooxx: 没有那个文件或目录

#“2>”以覆盖的方式将输出结果重定向到文件中
[root@test ~]# cat /etc/abc 2> /opt/ens32.bak 
[root@test ~]# cat /opt/ens32.bak 
cat: /etc/abc: 没有那个文件或目录

#“2>>”以追加的方式将输出结果重定向到文件中
[root@test ~]# ls /etc/abcd 2>> /opt/ens32.bak 
[root@test ~]# cat /opt/ens32.bak 
cat: /etc/abc: 没有那个文件或目录
ls: 无法访问/etc/abcd: 没有那个文件或目录

#“&>”以覆盖的方式将正确输出与错误输出重定向到文件中
[root@test ~]# lscat &> /opt/abc.txt
[root@test ~]# cat /opt/abc.txt 

[root@test ~]# ls /etc/passwd &> /opt/pass.bak
[root@test ~]# cat /opt/pass.bak 

[root@test ~]# free -h &> /opt/pass.bak 
[root@test ~]# cat /opt/pass.bak 

#“&>”以追加的方式将正确输出与错误输出重定向到文件中
[root@test ~]# ifconfig ens32 | head -2 &>> /opt/pass.bak 
[root@test ~]# cat /opt/pass.bak 

#以覆盖方式将正确输出与错误输出重定向到不同文件中
[root@test ~]# ll -d /root/  bcd >a.txt 2>b.txt
[root@test ~]# cat a.txt 
dr-xr-x---. 24 root root 4096 3月  28 18:07 /root/
[root@test ~]# cat b.txt 
ls: 无法访问bcd: 没有那个文件或目录
# echo 命令与 sleep 命令
  • echo 命令用于输出指定的字符串和变量
  • 命令格式:echo [- 选项] [参数]
代码语言:javascript复制
[root@test ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@test ~]# echo xxoo
xxoo

[root@test ~]# echo abc
abc

[root@test ~]# echo 男人好难
男人好难

[root@test ~]# echo 123
123

[root@test ~]# cat /etc/hostname 
test

[root@test ~]# echo localhost > /etc/hostname
[root@test ~]# cat /etc/hostname 
localhost
  • sleep 命令可以用来将目前动作延迟一段时间
  • 命令格式:sleep 时间
  • 常用选项: s 秒 m 分钟 h 小时 d 日
代码语言:javascript复制
[root@test ~]# sleep 3
# 课后练习

1. 查看当前系统内核名称及版本信息

uname -sr

2. 请写系统存放 cpu 配置文件

/proc/cpuinfo

3. 请写出查看 cpu 信息命令

cat /proc/cpuinfo

lscpu

4. 请写出系统存放内存配置文件

/proc/meminfo

5. 请写出查看内存命令(以人类易读方式显示)

free -h

6. 请写出系统存放网卡配置文件路径

/etc/sysconfig/network-scripts/

7. 请写出查看网卡配置信息命令

ifconfig(如果系统最小化安装,需要安装 net-tools)

ip a (ip address)

8. 请写出系统存放主机名配置文件

/etc/hostname

9. 请写出查看主机名命令

cat /etc/hostname

hostname

10. 将主机名修改为 student(永久修改)

hostnamectl set-hostname student

vim /etc/hostname

echo student > /etc/hostname

11. 请写出 vim 的三种模式

命令模式

输入模式

底线命令模式(末行模式)

12. 将 /etc/passwd 文件复制到 /opt 目录,使用 vim 打开文件并显示行号

cp /etc/passwd /opt

vim /opt/passwd

:set nu

13. 使用 vim 在 /opt/passwd 文件中搜索包含 root 关键字的行

/root

14. 使用 vim 在 /opt/passwd 文件中将光标快速跳转到第 10 行,并将光标跳转到行尾

:10 $

15. 使用 vim 在 /opt/passwd 文件中快速跳转到文件最后一行并删除,在将光标跳转到文件第一行,将刚刚删除的行复制到文件第二行

G dd p

16. 使用 vim 将 /etc/hostname 文件内容读入到 /opt/passwd 文件最后一行下

:r /etc/hostname

17. 使用 vim 在 /opt/passwd 文件中复制前 5 行内容并粘贴到文件最后一行下

5yy p

18. 将本次 vim 的修改恢复至初始状态,并保存退出

u

:wq

19. 将本机 IP 地址修改为 192.168.0.100,并重启动网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens32

systemctl restart network

20. 如何获取一个域名所对应的 IP 地址

host www.baidu.com

21. 如何检测本机使用的 DNS 是否可用

nslookup www.jd.com

22. 请将 hostname 命令设置别名为 hn(临时设置)

alias hn=hostname

23. 取消 hostname 命令别名

unalias hn

24. 如何查看本机历史命令

history

25. 执行命令历史中第 20 条命令

!20

26. 删除命令历史中第 5 条命令

history -d 5

27. 清空所有历史命令

history -c

rm -rf .bash_history

28. 查看本机当前系统日期与时间

date

29. 将本机日期时间设置与你当前时间一致

date -s ‘2021-04-10 14:32:00’

30. 统计 /etc/passwd 文件行数,并将命令输出结果重定向至 /opt/pass.bak 文件中

wc -l /etc/passwd > /opt/pass.bak

31. 显示 /etc/passwd 文件末尾 10 行的前 5 行内容,并将输出结果追加至 /opt/pass.bak 文件中

tail -10 /etc/passwd | head -5 > /opt/pass.bak

cat -n /etc/passwd | tail -10 | head -5 >> /opt/pass.bak

# 用户账号管理
  • 用户账号的作用:用户账号可用来登录系统,可以实现访问控制
  • 用户模板目录:/etc/skel/
代码语言:javascript复制
[root@localhost ~]# ls -a /etc/skel/
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

[root@localhost ~]# cd /etc/skel/
[root@localhost skel]# vim prompt
# useradd 创建用户
  • useradd 命令用于创建新的用户
  • 命令格式:useradd [- 选项] 用户名
  • 常用选项:
    • -u 指定用户 UID
    • -d 指定用户家目录(了解)
    • -c 用户描述信息
    • -g 指定用户基本组(了解)
    • -G 指定用户附加组
    • -s 指定用户的解释器程序
代码语言:javascript复制
[root@localhost ~]# useradd user1

#创建用户并指定用户的UID
[root@localhost ~]# useradd -u 1100 user2

#创建用户并指定用户的家目录
root@localhost ~]# useradd -d /opt/user3 user3

#创建用户并指定UID与用户描述信息
[root@localhost ~]# useradd -u 1400  -c yunwei user4

#创建test组
[root@localhost ~]# groupadd test

#创建用户指定用户UID、描述信息、基本组
[root@localhost ~]# useradd -u 1500 -c xxoo@163.com -g test user5
[root@localhost ~]# id user5

#创建用户指定用户UID、描述信息、附加组
[root@localhost ~]# useradd -u 1600 -c yunwei -G test xiaozhang
[root@localhost ~]# id xiaozhang
uid=1600(xiaozhang) gid=1600(xiaozhang) 组=1600(xiaozhang),1401(test)

#/sbin/nologin :禁止用户登录系统
[root@localhost ~]# useradd -u 1800 -c test -s /sbin/nologin user8
user8:x:1800:1800:test:/home/user8:/sbin/nologin
# id 命令
  • id 命令用于查看系统用户和用户所在组的信息
  • 命令格式:id [- 选项] [用户名]
代码语言:javascript复制
[root@localhost ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1)
# /etc/passwd 用户信息文件

用户的基本信息存放在 /etc/passwd 文件

代码语言:javascript复制
[root@localhost ~]# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
#每个字段含义解释:用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序
UID:0 超级用户
UID:1-999 系统伪用户,不能登录系统
UID:1000-65535 普通用户,管理员创建的用户

组:

基本组(初始组):一个用户只允许有一个基本组

附加组(在基本组之外组):一个用户可以允许有多个附加组

用户 —>shell 程序 —> 内核 —> 硬件

# /etc/default/useradd 文件

/etc/default/useradd 存放用户默认值信息

代码语言:javascript复制
[root@localhost ~]# vim /etc/default/useradd
# useradd defaults file
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(/etc/shadow文件第7个字段)
EXPIRE= #密码失效时间(/etc/shadow文件第8个字段)
SHELL=/bin/bash #默认使用的
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
# /var/spool/mail/ 用户邮件目录
代码语言:javascript复制
[root@localhost ~]# ls /var/spool/mail/
laowang  lisi  rpc  user1  user2  user3  user4  user5  user8  xiaozhang

#查看邮件
[root@localhost ~]# mail
# passwd 设置用户密码
  • passwd 命令用于设置用户密码
  • 命令格式:passwd [- 选项] [用户名]
  • 密码规范:长度不能少于 8 个字符,复杂度(数字、字母区分大小写,特殊字符)
  • 密码规范:本次修改的密码不能和上次修改的密码太相近
  • 常用选项
    • -S 查看密码信息
    • -l 锁定用户密码
    • -u 解锁用户密码
    • -d 删除密码
    • –stdin 通过管道方式设置用户密码
  • 非交互设置用户密码
  • 命令格式:echo ‘密码’ | passwd --stdin 用户名
代码语言:javascript复制
#设置用户密码
[root@localhost ~]# passwd user1
更改用户 user1 的密码 。
新的 密码:1
无效的密码: 密码是一个回文
重新输入新的 密码:1
passwd:所有的身份验证令牌已经成功更新。

#使用user1用户登录系统
[user1@localhost ~]$ ls
prompt
[user1@localhost ~]$ cat prompt 
不允许随便修改系统xx文件!
有问题可联系管理员邮箱:xxoo@163.com

#查看用户密码信息
[root@localhost ~]# passwd -S user1

#锁定用户当密码
[root@localhost ~]# passwd -l user2
锁定用户 user2 的密码 。
passwd: 操作成功

[root@localhost ~]# passwd -S user2
user2 LK 2021-04-10 0 99999 7 -1 (密码已被锁定。)

#解锁用户密码
[root@localhost ~]# passwd -u user2
解锁用户 user2 的密码。
passwd: 操作成功

#删除用户密码
[root@localhost ~]# passwd -d user2
清除用户的密码 user2。
passwd: 操作成功

#非交互设置用户密码
[root@localhost ~]# echo 1 | passwd --stdin laowang
更改用户 laowang 的密码 。
passwd:所有的身份验证令牌已经成功更新。
# /etc/shadow 用户密码文件
  • 用户的密码信息存放在 /etc/shadow 文件中,该文件默认任何人都没有任何权限(不包括 root)
代码语言:javascript复制
[root@localhost ~]# vim /etc/shadow
root:$6$1ji5e8yglrZWAcI6$FONKr3qebZufQ.u0Mf/MbipzGw/MVvxS.vgXcy/duc4b/GU0U7tfe37wPQ4XJEXstqBuwvaJqq2/kY/g/783u/::0:99999:7:::
#每个字段含义解释:
第一字段:用户名
第二字段:密码加密字符串,加密算法为SHA512散列加密算法,如果密码位是“*”或者“!!”表示密码已过期
第三个字段:密码最后一次修改日期,日期从1970年1月1日起,每过一天时间戳加1
第四个字段:密码修改的期限,如果该字段为0表示随时可以修改密码,例如:该字段为10,代表10天之内不可以修改密
第五个字段:密码有效期
第六个字段:密码到期前警告时间(和第五个字段相比)
第七个字段:密码过期后的宽限天数(和第五个字段相比)
第八个字段:账号失效时间,日期从1970年1月1日起
第九个字段:保留

#chage命令用于修改/etc/shadow文件信息,修改文件内容第三个字段(密码最后一次修改时间)
[root@localhost ~]# chage -d 0 user8
# su 命令
  • su 命令用于切换当前用户身份到其他用户身份
  • 命令格式:su [- 选项] [用户名]
代码语言:javascript复制
#只切换用户身份,环境没有改变
[root@localhost ~]# su user1
[user1@localhost root]$ ls
ls: 无法打开目录.: 权限不够
[user1@localhost root]$ cd
[user1@localhost ~]$ exit
exit

#切换用户身份,连同环境一起切换
[root@localhost ~]# su - user1
上一次登录:六 4月 10 16:54:40 CST 2021pts/1 上
[user1@localhost ~]$ pwd
/home/user1

#普通用户切换为root(需要输入root用户的密码)
[user1@localhost ~]$ su - root
密码:
上一次登录:六 4月 10 16:05:17 CST 2021从 192.168.0.1pts/2 上
# usermod 修改用户属性
  • usermod 命令用于修改已存在用户的基本信息
  • 命令格式:usermod [- 选项] 用户名
  • 常用选项:
    • -u 修改用户 UID
    • -d 修改用户家目录
    • -g 修改用户基本组
    • -c 修改用户描述信息
    • -G 添加用户附加组
    • -s 修改用户 shell
代码语言:javascript复制
#修改用户UID(用户如果以登录系统,不允许修改)
[root@localhost ~]# usermod -u 1111 user1
[root@localhost ~]# id user1
uid=1111(user1) gid=1001(user1) 组=1001(user1)

#修改用户描述信息
[root@localhost ~]# usermod -c xxoo@163.com user8

#修改用户的附加组
[root@localhost ~]# usermod -G test user8
[root@localhost ~]# id user8
uid=1800(user8) gid=1800(user8) 组=1800(user8),1401(test)

#修改用户的解释器
[root@localhost ~]# usermod -s /bin/bash user8
# userdel 删除用户
  • userdel 用于删除给定的用户以及与用户相关的文件,该命令若不加选项仅删除用户账号,不删除用户的家目录
  • 命令格式:userdel [- 选项] 用户名
  • 常用选项:
    • -r 删除用户同时,并删除用户的家目录
代码语言:javascript复制
#删除用户,仅删除账号,不删除家目录
[root@localhost ~]# userdel user8
[root@localhost ~]# ls /home
laowang  lisi  user1  user2  user4  user5  user8  xiaozhang
[root@localhost ~]# id user8
id: user8: no such user

#删除用户,连同用户家目录一并删掉
[root@localhost ~]# userdel -r user4
[root@localhost ~]# ls /home
laowang  lisi  user1  user2  user5  user8  xiaozhang
[root@localhost ~]# id user4
id: user4: no such user
# groupadd 添加新组
  • groupadd 用于创建一个新的工作组,新组的信息将被添加到 /etc/group 文件中
  • 命令格式:groupadd [- 选项] 组名
  • 常用选项:
    • -g GID #指定组的 GID
代码语言:javascript复制
#创建组
[root@localhost ~]# groupadd -g 1555 student
[root@localhost ~]# cat /etc/group
# /etc/group 组信息文件
  • 组信息存放在 /etc/group 文件中
代码语言:javascript复制
[root@localhost ~]# vim /etc/group
root:x:0:
#每个字段含义解释:组名:组密码占位符:GID:组中附加用户
# /etc/gshadow 组密码文件
  • 组密码信息存放在 /etc/gshadow 文件中
代码语言:javascript复制
[root@localhost ~]# vim /etc/gshadow
root:::
#每个字段含义解释:组名:组密码:组内管理员:组中附加用户
# groupmod 修改组属性
  • groupmod 用于修改指定工作组属性
  • 命令格式:groupmod [- 选项] 组名
  • 常用选项:
    • -g GID #修改组的 GID
    • -n 新组名 #修改组名
代码语言:javascript复制
#修改组名
[root@localhost ~]# groupmod -n stugrp student

#修改组GID
root@localhost ~]# groupmod -g 1666 stugrp
# gpasswd 组管理命令
  • gpasswd 是 Linux 工作组文件 /etc/group 和 /etc/gshadow 管理工具,用于将用户添加到组或从组中删除
  • 命令格式:gpasswd [- 选项] 用户名 组名
  • 常用选项:
    • -a #将用户添加到工作组
    • -d #将用户从工作组中删除
代码语言:javascript复制
#创建用户
[root@localhost ~]# useradd hary
[root@localhost ~]# useradd tom
[root@localhost ~]# useradd natasha
[root@localhost ~]# useradd kenji
[root@localhost ~]# useradd jack

#讲用户加入到组
[root@localhost ~]# gpasswd -a hary stugrp
正在将用户“hary”加入到“stugrp”组中
[root@localhost ~]# gpasswd -a tom stugrp
正在将用户“tom”加入到“stugrp”组中
[root@localhost ~]# gpasswd -a kenji stugrp
正在将用户“kenji”加入到“stugrp”组中
[root@localhost ~]# gpasswd -a natasha stugrp
正在将用户“natasha”加入到“stugrp”组中
[root@localhost ~]# gpasswd -a jack stugrp
正在将用户“jack”加入到“stugrp”组中
[root@localhost ~]# 

#查看组文件信息
[root@localhost ~]# cat /etc/group
stugrp:x:1666:hary,tom,kenji,natasha,jack

#将用户从组中删除
root@localhost ~]# gpasswd -d tom stugrp
[root@localhost ~]# gpasswd -d hary stugrp
正在将用户“hary”从“stugrp”组中删除
[root@localhost ~]# gpasswd -d jack stugrp
正在将用户“jack”从“stugrp”组中删除
[root@localhost ~]# gpasswd -d kenji stugrp
正在将用户“kenji”从“stugrp”组中删除
[root@localhost ~]# cat /etc/group
# groupdel 删除组
  • groupdel 用于删除指定工作组
  • 命令格式:groupdel 组名
代码语言:javascript复制
[root@localhost ~]# groupdel stugrp
# chmod 权限管理
  • chmod(英文全拼:change mode)设置用户对文件的权限
  • 命令格式:chmod [- 选项] 归属关系 ±= 权限类别 文件…
  • 常用选项:
    • -R 递归修改目录下所有的子文件与子目录的权限与父目录相同
  • 归属关系:u 所有者 g 所属组 o 其他人
  • 权限类别: r 读取 w 写入 x 执行 - 没有权限
  • 操作: 添加权限 - 去除权限 = 重新定义权限
  • 权限数字表示:r ---- 4 w ---- 2 x ---- 1 0 没有权限
代码语言:javascript复制
#查看文件详细属性
[root@localhost ~]# ll hello
-rw-r--r--. 1 root root 426 3月  28 15:00 hello

#为文件所有者添加执行权限
[root@localhost ~]# chmod u x hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月  28 15:00 hello

#为文件所属组添加写权限
[root@localhost ~]# chmod g w hello
[root@localhost ~]# ll hello
-rwxrw-r--. 1 root root 426 3月  28 15:00 hello

#为文件其他人添加写权限
[root@localhost ~]# chmod o w hello
[root@localhost ~]# ll hello
-rwxrw-rw-. 1 root root 426 3月  28 15:00 hello

#使用(逗号)可以同时为多个用户授权
[root@localhost ~]# chmod g x,o x hello
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月  28 15:00 hello

#去除所有者执行权限
[root@localhost ~]# chmod u-x hello
[root@localhost ~]# ll hello
-rw-rwxrwx. 1 root root 426 3月  28 15:00 hello

#去除所属组执行权限
[root@localhost ~]# chmod g-x hello
[root@localhost ~]# ll hello
-rw-rw-rwx. 1 root root 426 3月  28 15:00 hello

#去除其他人执行权限
[root@localhost ~]# chmod o-x hello
[root@localhost ~]# ll hello
-rw-rw-rw-. 1 root root 426 3月  28 15:00 hello

#同时去除ugo写权限
[root@localhost ~]# chmod u-w,g-w,o-w hello
[root@localhost ~]# ll hello
-r--r--r--. 1 root root 426 3月  28 15:00 hello

#重新定义所有者权限
[root@localhost ~]# chmod u=rwx hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月  28 15:00 hello

#重新定义所属组权限
[root@localhost ~]# chmod g=rwx hello
[root@localhost ~]# ll hello
-rwxrwxr--. 1 root root 426 3月  28 15:00 hello

#重新定义其他人权限
[root@localhost ~]# chmod o=rwx hello
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月  28 15:00 hello

#创建目录并设置目录权限
[root@localhost ~]# mkdir /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root root 6 4月  11 14:30 /test

#为目录所属组添加写权限
[root@localhost ~]# chmod g w /test
[root@localhost ~]# ll -d /test
drwxrwxr-x. 2 root root 6 4月  11 14:30 /test

#为目录其他人添加写权限
[root@localhost ~]# chmod o w /test
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 6 4月  11 14:30 /test
[root@localhost ~]# 

#重新定义所有用户权限
[root@localhost ~]# chmod u=rwx,g=rx,o=rx /test
[root@localhost ~]# ll -d /test
drwxr-xr-x. 2 root root 6 4月  11 14:30 /test

#同时为所有用户定义相同权限
[root@localhost ~]# chmod ugo=rwx /test
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 21 4月  11 14:37 /test

#权限数字定义方式
[root@localhost ~]# ll hello
-rwxrwxrwx. 1 root root 426 3月  28 15:00 hello
所有者:rwx   4 2 1=7
所属组:r     4
其他人:r     4
[root@localhost ~]# chmod 744 hello
[root@localhost ~]# ll hello
-rwxr--r--. 1 root root 426 3月  28 15:00 hello

所有者:rw 4 2=6
所属组:rw 4 2=6
其他人:--- 0
[root@localhost ~]# chmod 660 hello
[root@localhost ~]# ll hello
-rw-rw----. 1 root root 426 3月  28 15:00 hello

所有者:rwx 4 2 1=7
所属组:wx  2 1=3
其他人:--- 0
[root@localhost ~]# touch /hello.txt
[root@localhost ~]# ll /hello.txt 
-rw-r--r--. 1 root root 0 4月  11 14:45 /hello.txt
[root@localhost ~]# chmod 730 /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwx-wx---. 1 root root 0 4月  11 14:45 /hello.txt

#去除所有用户权限
[root@localhost ~]# chmod 000 /hello.txt 
[root@localhost ~]# ll /hello.txt 
----------. 1 root student 0 4月  11 14:45 /hello.txt

#递归修改目录下所有子文件与子目录权限
[root@localhost ~]# ll -d /test
drwxrwxrwx. 2 root root 21 4月  11 14:37 /test

[root@localhost ~]# mkdir /test/xxoo
[root@localhost ~]# ll -d /test/xxoo/
drwxr-xr-x. 2 root root 6 4月  11 14:54 /test/xxoo/

[root@localhost ~]# ll /test/abc.txt 
-rw-r--r--. 1 root root 0 4月  11 14:37 /test/abc.txt
#默认用户在该目录下创建文件权限与父目录不一致

#递归修改目录下所有子文件与子目录权限
[root@localhost ~]# chmod -R 777 /test
[root@localhost ~]# ll /test/abc.txt 
-rwxrwxrwx. 1 root root 0 4月  11 14:37 /test/abc.txt
[root@localhost ~]# ll -d /test/xxoo
drwxrwxrwx. 2 root root 6 4月  11 14:54 /test/xxoo

#深入理解权限,
[root@localhost ~]# mkdir /test1
[root@localhost ~]# chmod 777 /test1
[root@localhost ~]# ll -d /test1
drwxrwxrwx. 2 root root 6 4月  11 14:57 /test1

#在该目录下创建文件与目录
[root@localhost ~]# touch /test1/root.txt
[root@localhost ~]# mkdir /test1/rootbak
[root@localhost ~]# chmod o=rx /test1
[root@localhost ~]# ll -d /test1
drwxrwxr-x. 2 root root 6 4月  11 14:59 /test1
[root@localhost ~]# touch /test1/root.txt

#普通用户对该目录如果拥有rwx权限是可以删除该目录下任何用户创建的文件(包括root)
[user1@localhost ~]$ cd /test1
[user1@localhost test1]$ ls
root.txt
[user1@localhost test1]$ ll root.txt 
-rw-r--r--. 1 root root 0 4月  11 14:57 root.txt
[user1@localhost test1]$ rm -rf root.txt 
[user1@localhost test1]$ ls
rootbak
[user1@localhost test1]$ rm -rf rootbak/
[user1@localhost test1]$ ls
[user1@localhost test1]$ ll -d /test1
drwxrwxrwx. 2 root root 6 4月  11 14:59 /test1

总结:
1.用户对文件拥有rwx权限
r:查看文件内容
w:对文件内容拥有增删改权限,并不能删除文件,删除文件取决于对文件的父目录有没有rwx权限
x:执行文件写权限可以增加/修改/删除文件里内容

2.用户对目录拥有rwx权限
r:查看目录下内容
w:在该目录创建文件,修改文件属性,删除任何用户的文件(包括root)
x:可以切换到该目录
# umask 预设权限
  • umask 用于显示或设置创建文件的权限掩码
  • 命令格式:umask [-p] [-S] [mode]
代码语言:javascript复制
root@localhost ~]# mkdir /test2
[root@localhost ~]# ll -d /test2
drwxr-xr-x. 2 root root 6 4月  11 15:05 /test2
[root@localhost ~]# umask --help
umask: 用法:umask [-p] [-S] [模式]

#查看目录默认权限掩码,以数字形式显示
[root@localhost ~]# umask -p
umask 0022

#查看目录默认权限掩码,以字母形式显示
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx

#设置目录默认权限掩码,为所属组添加写权限
[root@localhost ~]# umask g w 
[root@localhost ~]# mkdir /test3
[root@localhost ~]# ll -d /test3
drwxrwxr-x. 2 root root 6 4月  11 15:09 /test3

#去除目录默认权限掩码
[root@localhost ~]# umask g-w 
[root@localhost ~]# mkdir /test4
[root@localhost ~]# ll -d /test4
drwxr-xr-x. 2 root root 6 4月  11 15:10 /test4
# chown 归属关系管理
  • chown(英文全拼:change owner)用于设置文件的所有者和所属组关系
  • 命令格式:
    • chown [- 选项] 所有者:所属组 文档 #同时修改所有者和所属组身份
    • chown [- 选项] 所有者 文档 #只修改所有者身份
    • chown [- 选项] : 所属组 文档 #只修改所属组身份
  • 常用选项:
    • -R 递归修改
代码语言:javascript复制
#创建文件
[root@localhost ~]# chmod 744 /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwxr--r--. 1 root student 0 4月  11 14:45 /hello.txt

#修改文件所有者为user1用户
[root@localhost ~]# chown user1 /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwxr--r--. 1 user1 student 0 4月  11 14:45 /hello.txt

#修改文件所有者与所属组为lisi
[root@localhost ~]# chown lisi:lisi /hello.txt 
[root@localhost ~]# ll /hello.txt 
-rwxr--r--. 1 lisi lisi 4 4月  11 15:26 /hello.txt

#创建目录
[root@localhost ~]# mkdir /test5
[root@localhost ~]# ll -d /test5
drwxr-xr-x. 2 root root 6 4月  11 15:30 /test5

#修改目录所有者与所属组为lisi
[root@localhost ~]# chown lisi:lisi /test5
[root@localhost ~]# ll -d /test5
drwxr-xr-x. 2 lisi lisi 6 4月  11 15:30 /test5

[root@localhost ~]# touch /test5/root.txt
[root@localhost ~]# ll /test5/root.txt 
-rw-r--r--. 1 root root 0 4月  11 15:31 /test5/root.txt

#递归修目录下所有子文件与子目录归属关系
[root@localhost ~]# chown -R lisi:lisi /test5
[root@localhost ~]# ll /test5/root.txt 
-rw-r--r--. 1 lisi lisi 0 4月  11 15:31 /test5/root.txt
# SetUID 特殊权限
  • SetUID(SUID):对于一个可执行的文件用了 SUID 权限后,普通用户在执行该文件后,临时拥有文件所有者的身份,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有身份
  • SetUID 权限会附加在所有者的 x 权限位上,所有者的 x 权限标识会变成 s
  • 设置 SetUID 命令格式:chmod u s 文件名
代码语言:javascript复制
#搜索命令绝对路径
[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

[root@localhost ~]# which cat
/usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

#普通用户使用cat命令是默认无法查看/etc/shadow文件内容
[lisi@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够

#设置SUID权限
[root@localhost ~]# chmod u s /usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

#普通用户再次使用cat命令时临时获取文件所有者身份
[lisi@localhost ~]$ cat /etc/shadow

#去除SUID权限
[root@localhost ~]# chmod u-s /usr/bin/cat
[root@localhost ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat

[root@localhost ~]# which vim
/usr/bin/vim

[root@localhost ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2294208 10月 31 2018 /usr/bin/vim

#为vim设置SUID权限
[root@localhost ~]# chmod u s /usr/bin/vim
[root@localhost ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2294208 10月 31 2018 /usr/bin/vim

[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2737 4月  10 17:26 /etc/passwd

[root@localhost ~]# chmod u-s /usr/bin/vim
[root@localhost ~]# vim /etc/passwd
# SetGID 特殊权限
  • SetGID(SGID):当对一个可执行的程序文件设置了 SGID 后,普通用户在执行该文件时临时拥有其所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份
  • 当对一个目录作设置了 SGID 权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所属组相同
  • SetGID 权限会附加在所属组的 x 权限位上,所属组的 x 权限标识会变成 s
  • 设置 SetGID 命令格式:chmod g s 文件名
代码语言:javascript复制
[root@localhost ~]# mkdir /test6
[root@localhost ~]# chmod 777 /test6
[root@localhost ~]# ll -d /test6
drwxrwxrwx. 2 root root 6 4月  11 15:59 /test6

#为目录设置SGID权限
[root@localhost ~]# chmod g s /test6
[root@localhost ~]# ll -d /test6
drwxrwsrwx. 2 root root 6 4月  11 15:59 /test6
#SGID权限会附加在所属组执行权限位,所属组执行权限变为s

[root@localhost ~]# touch /test6/1.txt
[root@localhost ~]# ll /test6/1.txt 
-rw-r--r--. 1 root root 0 4月  11 16:00 /test6/1.txt

#修改目录所属组为lisi组
[root@localhost ~]# chown :lisi /test6
[root@localhost ~]# ll -d /test6
drwxrwsrwx. 2 root lisi 19 4月  11 16:00 /test6

#SGID对目录设置后,在该目录下创建的任何文件都会继承父目录的所属组
[root@localhost ~]# touch /test6/2.txt
[root@localhost ~]# ll /test6/2.txt 
-rw-r--r--. 1 root lisi 0 4月  11 16:01 /test6/2.txt
# Sticky BIT 特殊权限
  • Sticky BIT(SBIT):该权限只针对于目录有效,当普通用户对一个目录拥有 rwx 权限时,普通用户可以在此目录下拥有增删改的权限,应为普通用户对目录拥有 rwx 权限时,是可以删除此目录下的所有文件
  • 如果对一个目录设置了 SBIT 权限,除了 root 可以删除所有文件以外,普通用户就算对该目录拥有 rwx 权限,也只能删除自己建立的文件,不能删除其他用户建立的文件
  • SBIT 权限会附加在其他人的 x 权限位上,其他人的 x 权限标识会变成 t
  • 设置 SBIT 命令格式:chmod o t 目录名
代码语言:javascript复制
#为目录设置SBIT
[root@localhost ~]# chmod o t /test
[root@localhost ~]# ll -d /test
drwxrwxrwt. 2 root root 6 4月  11 16:07 /test

[lisi@localhost test]$ ls
kenji.txt  laowang.txt  lisi.txt

[lisi@localhost test]$ rm -rf *
rm: 无法删除"kenji.txt": 不允许的操作
rm: 无法删除"laowang.txt": 不允许的操作
# FACL 访问控制列表
  • FACL(Filesystemctl Access Control List)文件系统访问控制列表:利用文件扩展属性保存额外的访问控制权限,单独为每一个用户量身定制一个权限
  • 命令格式:setfacl 选项 归属关系:用户名:权限 文档
  • 常用选项:
    • -m 设置权限
    • -x 删除指定用户权限
    • -b 删除所有用户权限
代码语言:javascript复制
#为natasha用户设置ACL权限
[root@localhost ~]# setfacl -m u:natasha:rx /yunwei/
[root@localhost ~]# ll -d /yunwei/
drwxrwx---  2 root yunwei 54 4月  11 16:43 /yunwei/
[root@localhost ~]# ll -d /test
drwxrwxrwt. 2 root root 42 4月  11 16:11 /test

#查看目录ACL权限
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
user:natasha:r-x
group::rwx
mask::rwx
other::---

#用户测试权限
[natasha@localhost ~]$ ls /yunwei/
hell.sh  kenji.txt  lisi.txt
[natasha@localhost yunwei]$ rm -rf kenji.txt 
rm: 无法删除"kenji.txt": 权限不够
[natasha@localhost yunwei]$ touch natasha.txt
touch: 无法创建"natasha.txt": 权限不够
[natasha@localhost yunwei]$ vim kenji.txt 


[root@localhost ~]# setfacl -m u:tom:rx /yunwei
[root@localhost ~]# setfacl -m u:jack:rx /yunwei
[root@localhost ~]# setfacl -m u:hary:rx /yunwei
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
user:hary:r-x
user:tom:r-x
user:natasha:r-x
user:jack:r-x
group::rwx
mask::rwx
other::---

#删除指定用户ACL权限
[root@localhost ~]# setfacl -x u:tom /yunwei
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
user:hary:r-x
user:natasha:r-x
user:jack:r-x
group::rwx
mask::rwx
other::---

#删除所有用户ACL权限
[root@localhost ~]# setfacl -b /yunwei
[root@localhost ~]# getfacl /yunwei
getfacl: Removing leading '/' from absolute path names
# file: yunwei
# owner: root
# group: yunwei
user::rwx
group::rwx
other::---
# 课后练习

1. 创建 test1 用户,并指定用户 UID 为 6666,指定用户描述信息为 test1@163.com,指定用户解释器为 /sbin/nologin

test1:x:6666:6666:test1@163.com:/home/test1:/sbin/nologin

2. 创建名为 stugrp 组,将 test1 用户加入到 stugrp 组

[root@localhost ~]# groupadd stugrp

[root@localhost ~]# gpasswd -a test1 stugrp

3. 请写出 /etc/passwd 文件中每个字段含义

用户名 密码占位符 UID GID 描述信息 家目录 解释器

4. 创建 test2 用户,并设置密码为 123456

[root@localhost ~]# useradd test2 [root@localhost ~]# passwd test2

5. 修改 root 用户密码为 123456

[root@localhost ~]# passwd

6. 请写出 Linux 系统下存放用户密码信息文件

/etc/shadow

7. 设置 test2 用户首次登录系统需要修改密码

[root@localhost ~]# chage -d 0 test2

8. 使用 root 切换为 test1 用户身份

su - 用户名

9. 将 test2 用户添加至 stugrp 组,并锁定用户密码

[root@localhost ~]# gpasswd -a test2 stugrp

[root@localhost ~]# passwd -l test2

10. 删除 test1 用户,连同用户家目录一并删除

root@localhost ~]# userdel -r test1

11. 请写出 Linux 系统存放组信息文件,与组密码信息文件

[root@localhost ~]# ls /etc/group

[root@localhost ~]# ls /etc/gshadow

12. 将 test2 用户从 stugrp 组中删除

[root@localhost ~]# gpasswd -d test2 stugrp

13. 在根下创建 upload 目录,并修改目录所有者为 test2 用户,所属组为 stugrp 组,并将 lisi 用户加入到 stugrp 组,修改所有者权限 rwx,修改所属组权限为 rwx,设置其他人没有任何权限

[root@localhost ~]# mkdir /upload

[root@localhost ~]# chown test2:stugrp /upload/

[root@localhost ~]# gpasswd -a lisi stugrp

[root@localhost ~]# chmod 770 /upload/

14. 创建 test3 用户,非交互式设置用户密码为 123456,并设置 test3 用户可以对 upload 目录拥有 rx 权限

[root@localhost ~]# useradd test3 [root@localhost ~]# echo 123456 | passwd --stdin test3

[root@localhost ~]# setfacl -m u:test3:rx /upload/ [root@localhost ~]# getfacl /upload/

15. 在根下创建 shared 目录,并同时设置所有人都有完全权限(至少两种方法设置),要求所有普通用户在该目录下只能修改自己创建的文件

[root@localhost ~]# mkdir /shared [root@localhost ~]# chmod ugo=rwx /shared/ [root@localhost ~]# chmod 777 /shared/ [root@localhost ~]# ll -d /shared/

[root@localhost ~]# chmod o t /shared/

# 常用特殊符号的使用

Linux 系统下特殊符号起到了很大的作用,特殊符号可以完成一些特殊的功

* 常用的特殊符号,在文件名上,用来代表任意多个任意字符

? 常用的特殊符号,在文件名上,用来代表任意单个任意字符

[0-9] #在文件名上,用来代表多个字符或连续范围中的一个,若无则忽略

{a,b,cd,abcd} #在文件名上,用来代表多组不同的字符串,全匹配

  • 范例
代码语言:javascript复制
#查找以tab结尾的文件
[root@localhost ~]# ls /etc/*tab
[root@localhost ~]# ls /etc/*wd
[root@localhost ~]# ls /etc/*.conf
[root@localhost ~]# ls /etc/redhat*
[root@localhost ~]# ls /etc/*ss*

#查找以tty开头的文件,结尾以一个任意字符结尾
[root@localhost ~]# ls /dev/tty?
[root@localhost ~]# ls /etc/host?
[root@localhost ~]# ls /etc/pass??

#查找tty开头结尾以1-5连续字符结尾
[root@localhost ~]# ls /dev/tty[1-5]
[root@localhost ~]# ls /dev/tty[4-9]
[root@localhost ~]# ls /dev/tty[1,3,5,7,9,15,20,30]

#查找tty开头结尾为不连续字符结尾
[root@localhost ~]# ls /dev/tty{1,3,5,7,9,15,20,30}
[root@localhost ~]# ls /dev/tty{1..9}
[root@localhost ~]# ls /dev/tty{1..10}
[root@localhost ~]# ls /dev/tty[1-10]
# grep 文件内容过滤
  • grep 用于查找文件中符合条件的字符串,它能利用正则表达式搜索文件中的字符串,并把匹配到的字符串的行打印出来
  • 命令格式:grep [- 选项] “查找条件” 目标文件
  • 常用选项:
    • -n #以行号形式输出
    • -i #忽略字符串大小写
    • -v #显示不包含匹配的行(排除)
  • 常用正则表达式符号
    • ^ 字符串 #显示以该字符串开头的行 (匹配以什么什么开头的行)
    • 字符串 $ #显示以该字符串结尾的行 (匹配以什么什么结尾的行)
    • ^$ #显示空行
  • grep 命令示例
代码语言:javascript复制
#过滤包含root关键字的行
[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

#以行号形式过滤包含root关键字的行
[root@localhost ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# grep -n bash /etc/passwd
[root@localhost ~]# grep -n : /etc/passwd

#忽略大小写过滤
[root@localhost ~]# grep -i -n ssh /etc/passwd
38:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

#排除包含#号的行
[root@localhost ~]# grep -n -v '^#' /etc/fstab

#过滤以root开头的行
[root@localhost ~]# grep ^root /etc/passwd

#过滤以root结尾的行
[root@localhost ~]# grep -n 'root$' /etc/passwd
[root@localhost ~]# grep -n 'bash$' /etc/passwd

#语法错误示范
[root@localhost ~]# grep -n -v '^#' ^$  /etc/fstab
grep: ^$: 没有那个文件或目录
/etc/fstab:1:
/etc/fstab:9:/dev/mapper/centos-root /                       xfs     defaults        0 0
/etc/fstab:10:UUID=ae55ec6b-973b-498e-a366-f35e14b3d153 /boot                   xfs     defaults        0 0
/etc/fstab:11:/dev/mapper/centos-swap swap    

#语法错误示范
[root@localhost ~]# grep -n -v '^#' /etc/fstab | grep -v ^$
1:
9:/dev/mapper/centos-root /                       xfs     defaults        0 0
10:UUID=ae55ec6b-973b-498e-a366-f35e14b3d153 /boot                   xfs     defaults        0 0
11:/dev/mapper/centos-swap swap                    swap    defaults        0 0

#正确语法
[root@localhost ~]# grep  -v '^#' /etc/fstab | grep -v ^$ -n
2:/dev/mapper/centos-root /                       xfs     defaults        0 0
3:UUID=ae55ec6b-973b-498e-a366-f35e14b3d153 /boot                   xfs     defaults        0 0
4:/dev/mapper/centos-swap swap                    swap    defaults        0 0

#显示该文件内有效配置的行
[root@localhost ~]# grep -v '^#' /etc/login.defs | grep -v ^$ -n | wc -l
# find 文件 / 目录查找命令
  • find 命令根据预设的条件递归查找文件或目录所在位置
  • 命令格式:find 查找路径 查找条件 1 查找条件 2 … [-exec 处理命令 {} ; ]
    • –exec 可接额外的命令来处理查找到结果
    • {} 代表 find 查找到的内容被放置 {} 中
    • ; 代表额外处理命令结束
  • 常用查找条件
    • -type 类型(f 文件 d 目录 l 链接文件)
    • -name “文件名”
    • -iname 按文件名查找忽略大小写
    • -size 文件大小(k、M、G 大于 - 小于)
    • -a (and 并且)两个条件同时满足
    • -o (or 或者)两个条件满足任意一个即可
    • -user 用户名
    • -mtime 按日期查找( 代表多少天之前 - 代表多少天之内,0 代表 24 小时之内)
  • find 命令范例
代码语言:javascript复制
[root@localhost ~]# ls /var/log

#按照类型查找,类型为文件
[root@localhost ~]# find /var/log -type f
[root@localhost ~]# ll boot.log-20210417
[root@localhost ~]# ll /var/log/boot.log-20210417
[root@localhost ~]# ll /var/log/vmware-network.2.log

#按照类型查找,类型为目录
[root@localhost ~]# find /var/log -type d
[root@localhost ~]# ll -d /var/log/tuned
[root@localhost ~]# ll -d /var/log/qemu-ga

#按照类型查找,类型为链接文件
[root@localhost ~]# find /var/log -type l
[root@localhost ~]# fin /etc/ -type l
[root@localhost ~]# find /etc/ -type l
[root@localhost ~]# ll /etc/scl/conf

#按照名字查找
[root@localhost ~]# find /etc/ -name passwd
/etc/passwd
/etc/pam.d/passwd

#按照名字查找,类型为文件
[root@localhost ~]# find /etc/ -name passwd -type f

#按照名字查找,以tab结尾,类型为文件
[root@localhost ~]# find /etc/ -name '*tab' -type f

#按照名字查找,以pass开头,类型为文件
[root@localhost ~]# find /etc/ -name 'pass*' -type f
[root@localhost etc]# find . -name '*.conf' -type f

[root@localhost ~]# find /etc/ -name '*tab*' -type f

#按照名字忽略大小写查找,类型为文件
[root@localhost ~]# find /etc/ -iname FSTAB -type f
/etc/fstab
[root@localhost ~]# find /etc/ -name FSTAB -type f

#查找大于10k的文件
[root@localhost ~]# find /var/log -size  10k -type f
[root@localhost ~]# du -h /var/log/boot.log-20210417
16K	/var/log/boot.log-20210417

#查找大于1M的文件
[root@localhost ~]# find /var/log -size  1M -type f
[root@localhost ~]# du -h /var/log/audit/audit.log
2.4M	/var/log/audit/audit.log

[root@localhost ~]# find /home -size  1M -type f

#查找小于1M的文件
[root@localhost ~]# find /var/log -size -1M -type f
[root@localhost ~]# du -h /var/log/spooler
0	/var/log/spooler

#查找大于10k并且小于20k,类型为文件
[root@localhost ~]# find /var/log -size  10k -a -size -20k -type f

#-o或者,当有多个条件时,满足任意其中一个即可
[root@thinkmo ~]# find /var/log -name "*.log" -o -size -10k -type f


#查找属于lisi用户的文件/目录
[root@localhost ~]# find /home -user lisi

#查找30天之前被修改过,类型为文件
[root@localhost ~]# find /var/log -mtime  30 -type f
[root@localhost ~]# find /var/log -mtime  10 -type f

#查找10天之内被修改过,类型为文件
[root@localhost ~]# find /var/log -mtime -10 -type f
root@localhost ~]# find /var/log -mtime -30 -type f

#查找30之前被修改过,类型为文件,拷贝到/opt目录下
[root@localhost ~]# find /var/log -mtime -30 -type f -exec cp {} /opt ;

题型:

  • 查找 /etc/ 目录下以.conf 结尾的文件(只能在 /etc 这一层目录去查找) [root@localhost ~]# ls /etc/*.conf
  • 查找 /etc/ 目录下以.conf 结尾的文件(包含所有的子目录) [root@localhost ~]# find /etc/ -name ‘*.conf’ -type f

百度:多查–多查–多查

查找 /var/log/messages 文件,清空文件内容,使用 find 实现

[root@localhost ~]# find /var/log/ -name messages -type f -exec cp /dev/null {} ;

查找 /var/log 以.log 结尾的文件,清空文件内容,使用 find 实现

[root@localhost ~]# find /var/log -name *.log -type f -a -mtime 10 -exec cp /dev/null {} ;

# 压缩与解压缩
  • Linux 独有压缩格式及命令工具:
    • gzip—> .gz
    • bzip2—> .bz2
    • xz—> .xz
  • 压缩命令格式
    • gzip [选项…] 文件名
      • 常用选项:-d 解压缩
    • bzip2 [选项…] 文件名
      • 常用选项:-d 解压缩
    • xz [选项…] 文件名
      • 常用选项:-d 解压缩
  • 查看压缩文件内容
    • zcat [选项…] 文件名 #查看 gzip 格式压缩文件
    • bzcat [选项…] 文件名
    • xzcat [选项…] 文件名
代码语言:javascript复制
[root@localhost ~]# cp /etc/services /opt
[root@localhost ~]# cd /opt
[root@localhost opt]# ll services 
-rw-r--r--. 1 root root 670293 4月  17 17:06 services
[root@localhost opt]# ll -h services 
-rw-r--r--. 1 root root 655K 4月  17 17:06 services

#使用gzip格式对文件进行压缩
[root@localhost opt]# gzip services 
[root@localhost opt]# ls
services.gz
[root@localhost opt]# ll -h services.gz 
-rw-r--r--. 1 root root 133K 4月  17 17:06 services.gz

#不解压查看压缩文件内容
[root@localhost opt]# zcat services.gz 

#解压文件
[root@localhost opt]# gzip -d services.gz 

#使用bzip2格式对文件进行压缩
[root@localhost opt]# bzip2 services 
[root@localhost opt]# ls
services.bz2
[root@localhost opt]# ll -h services.bz2 
-rw-r--r--. 1 root root 122K 4月  17 17:06 services.bz2

#不解压查看文件内容
[root@localhost opt]# bzcat services.bz2 

#解压文件
[root@localhost opt]# bzip2 -d services.bz2 

#使用xz格式对文件进行压缩
[root@localhost opt]# xz services 
[root@localhost opt]# ls
services.xz
[root@localhost opt]# ll -h services.xz 
-rw-r--r--. 1 root root 98K 4月  17 17:06 services.xz

#解压文件
[root@localhost opt]# xz -d services.xz 
# tar 打包工具
  • tar 命令用在 linux 下用于对文件 / 目录打包,使用 tar 程序打出来的包常称为 tar 包,tar 包文件通常都是以 .tar 结尾
  • tar 命令格式:tar 选项 打包后名字 被打包文件
  • 常用选项:
    • -c 创建打包文件
    • -f 指定打包后的文件名称
    • -z 调用 gzip 压缩工具 -J 调用 xz 压缩工具 -j 调用 bzip2 压缩工具
    • -t 列出打包文档内容
    • -x 解压打包文件
    • -C 指定解压路径
    • -v 显示详细信息
  • tar 命令范例
代码语言:javascript复制
#同时打包多个文件/目录并使用gzip格式压缩
[root@localhost opt]# tar -czf xxx.tar.gz /etc/passwd /etc/fstab /home

#将压缩包数据解压到/media目录
[root@localhost opt]# tar -xf xxx.tar.gz -C /media/
[root@localhost opt]# ls /media/etc
[root@localhost opt]# rm -rf xxx.tar.gz 

#同时打包多个文件/目录并使用xz格式压缩
[root@localhost opt]# tar -cJf xx.tar.xz /etc/hostname /etc/services /home

#错误语法,f选项要放到所有选项右边
[root@localhost opt]# tar -ft xx.tar.xz 
tar: 您必须从"-Acdtrux"或是"--test-label"选项中指定一个
请用“tar --help”或“tar --usage”获得更多信息。

#不解压查看压缩包数据
[root@localhost opt]# tar -tf xx.tar.xz 
etc/hostname

#将压缩包数据解压到/tmp目录
[root@localhost opt]# tar -vxf xx.tar.xz -C /tmp
[root@localhost opt]# ls /tmp

#同时打包多个文件/目录并使用bzip2格式压缩
[root@localhost opt]# tar -cjf abc.tar.bz2 /etc/hostname /etc/group /home

#解压缩
[root@localhost opt]# tar -xf abc.tar.bz2 -C /media/
# 分区过程

添加新硬盘–分区–格式化文件系统–挂载使用

扇区是磁盘存储数据的最小单元,默认一个扇区可以存储 512 字节的数据

# 磁盘类型介绍
  • IDE 接口类型:主要用于个人家用计算机领域,优点价格便宜,缺点数据传输速度慢
  • SCSI 接口类型:早期主要用于服务器理领域,数据传输速度快
  • SAS 接口类型:目前在服务器领域比较流行
  • SATA 接口类型:串口磁盘,主要用于个人家用计算机领域,偶尔也应用在服务器领域
  • SSD 接口类型:固态硬盘接口,价格昂贵,数据传输速度快,利用内存的机制读写数据,主要应用在个人电脑
  • NVMe 接口类型:固态硬盘接口,价格昂贵,数据传输速度快,利用内存的机制读写数据
# Linux 常用分区格式
  • MBR 分区格式:比较古老的分区格式,最初只能划分 4 个主分区,后来新增加扩展分区(容器)功能,可在扩展分区内划分更多逻辑分区,最大支持 2.2T 磁盘容量
    • IDE 接口硬盘逻辑分区最多可以划分 59 个
    • SCSI 接口硬盘逻辑分区最多可以划分 11 个
    • 最大支持 2.2T 以内磁盘容量
  • GPT 分区格式:可划分 128 个主分区,最大支持 18EB 磁盘容量(1EB=1024PB,1PB=1024TB,1TB=1024GB)
# 文件系统类型详解
  • 文件管理系统,赋予分区文件系统,分区才可以正常的使用,根文件系统,多少个多少个文件系统
  • CentOS5:分区默认使用文件系统类型 ext3
  • CentOS6:分区默认使用文件系统类型 ext4
    • ext4 日志记录功能,意外宕机,通过日志记录把没有保存的数据,在系统再次重启时快速恢复回来
    • 单个文件系统最大支持 1EB 的分区容量,单个文件最大可以存储 16TB 数据
  • CentOS7:分区默认使用文件系统类型 xfs
    • xfs 开启了日志记录的功能,意外宕机,通过日志记录把没有保存的数据,在系统再次重启时快速恢复回来,数据恢复的速度比 ext4 文件系统快
    • 单个文件系统最大支持 8EB 分区容量,单个文件最大可以存储 500TB 的数据
    • 单个文件每秒读写数据的速度可以达到 4G
  • swap 文件系统:交换分区,硬盘空间去充当内存去使用
# 挂载
  • 在 Linux 系统中用户无法直接使用硬件设备的,硬件设备在系统中都是以只读的方式存在的,必须挂载
  • 挂载就是给我们用户提供一个可以使用设备的一个接口
  • 挂载注意事项:
    • 挂载点必须是一个目录,理论上还得是一个空目录
    • 一个文件系统不允许重复挂载到多个目录下
    • 一个目录不允许重复挂载多个文件系统
# lsblk 查看系统所有磁盘信息
  • lsblk(英文全拼:list block)用于列出当前系统所有磁盘与磁盘内的分区信息
  • 命令格式:lsblk [选项…] [设备名]
  • 常用选项:
    • -d #仅显示磁盘本身,不会列出磁盘的分区数据
    • -f #列出磁盘分区使用的文件系统类型
  • lsblk 命令示例
代码语言:javascript复制
#列出当前系统所有磁盘与磁盘内的分区信息
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom  /mnt/centos

#sda1:sd代表SCSI磁盘,a代表第一块磁盘,1代表第一个分区
#sdb:sd代表SCSI磁盘,b代表第二块磁盘,1代表第一个分区
#解释:
NAME		#设备名称
MAJ:MIN		#主设备号:次设备号,内核通过主次设备号识别磁盘
RM			#是否为可卸载设备,1可卸载,0不可卸载
SIZE		#设备的容量大小
RO			#表示设备是否为只读,0非只读设备,1只读设备
TYPE		#表示设备类型(disk为磁盘,part为分区,lvm逻辑卷,rom只读)
MOUNTPOINT	#设备挂载点(SWAP没有挂载点)

#列出指定的磁盘信息
[root@localhost ~]# lsblk -d /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda    8:0    0  20G  0 disk 

#列出所有磁盘分区内使用的文件系统类型
[root@localhost ~]# lsblk -f 
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                                
├─sda1          xfs                         4cb9bb38-c34a-4415-9614-ba38642bb86d   /boot
└─sda2          LVM2_member                 cKn0jP-z8Bq-SNvl-BsNa-7vTg-GBU2-OiHCro 
  ├─centos-root xfs                         55dad88d-a600-42d1-b387-236db62ce396   /
  └─centos-swap swap                        2e91599a-6d72-483d-add8-6dfb84296170   [SWAP]
sr0             iso9660     CentOS 7 x86_64 2018-11-25-23-54-16-00                 /mnt/centos

#列出指定分区的文件系统类型
[root@localhost ~]# lsblk -df /dev/sda1
NAME FSTYPE LABEL UUID                                 MOUNTPOINT
sda1 xfs          4cb9bb38-c34a-4415-9614-ba38642bb86d /boot
# df 查看分区使用情况
  • df 命令用于查看文件系统使用情况
  • 命令格式:df [选项…] [参数…]
  • 常用选项:
    • -h 以人类易读方式显示文件系统容量
    • T 显示文件系统类型
  • df 命令示例
代码语言:javascript复制
[root@localhost ~]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 3746320  14065136  22% /
devtmpfs                   480884       0    480884   0% /dev
tmpfs                      497948       0    497948   0% /dev/shm
tmpfs                      497948    8340    489608   2% /run
tmpfs                      497948       0    497948   0% /sys/fs/cgroup
/dev/sr0                  4480476 4480476         0 100% /mnt
/dev/sda1                 1038336  169448    868888  17% /boot
tmpfs                       99592      12     99580   1% /run/user/42
tmpfs                       99592       0     99592   0% /run/user/0

[root@localhost ~]# df -h /
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  3.6G   14G  22% /
# du 统计文件 / 目录大小
  • du 命令用于统计磁盘下目录或文件大小
  • 命令格式:du [选项…] [参数…]
  • 常用选项:
    • -h #以人类易读方式(Kb,MB,GB)显示文件大小
    • -s #只统计每个参数的总数
  • du 命令示例
代码语言:javascript复制
[root@localhost ~]# du -h /etc/services 

[root@localhost ~]# du -hs /etc
38M	/etc
  • /dev/ 目录下文件详解
代码语言:javascript复制
[root@localhost ~]# ls /dev
hd[a-t]:IDE设备
sd[a-z]:SCSI设备
fd[0-7]:软盘驱动设备
md[0-32]:软RAID设备
loop[0-7]:本地回环设设备
lp[0-3]:打印机设备
mem:内存设备
null:空设备,也称为黑洞,任何写入的数据都将被丢弃
zero:零资源设备,任何写入的数据都将被丢弃
full:满设备,任何写入的数据都将失败
tty[0-63]:虚拟终端设备
random:随机数设备
urandom:随机数设备
port:存取I/O端口
# blkid 查看设备属性
  • blkid 命令显示块设备属性信息(设备名称,设备 UUID,文件系统类型)
  • 命令格式:blkid [选项…] [参数…]
  • blkid 命令示例
代码语言:javascript复制
#显示系统所有块设备属性信息
[root@localhost ~]# blkid
/dev/sda1: UUID="4cb9bb38-c34a-4415-9614-ba38642bb86d" TYPE="xfs" 
/dev/sda2: UUID="cKn0jP-z8Bq-SNvl-BsNa-7vTg-GBU2-OiHCro" TYPE="LVM2_member" 
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/mapper/centos-root: UUID="55dad88d-a600-42d1-b387-236db62ce396" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="2e91599a-6d72-483d-add8-6dfb84296170" TYPE="swap" 

#查看执行分区属性信息
root@localhost ~]# blkid /dev/sda1
/dev/sda1: UUID="4cb9bb38-c34a-4415-9614-ba38642bb86d" TYPE="xfs" 
# MBR 分区格式
  • fdisk 命令用于查看磁盘使用情况和磁盘分区(MBR 分区格式)
  • 命令格式:fdisk [选项…] [设备路径]
  • 常用选项:-l 列出磁盘分区表类型与分区信息
  • 分区
代码语言:javascript复制
[root@localhost ~]# fdisk /dev/sdb
m	#获取命令帮助		※
p	#显示磁盘分区表   ※
n	#新增加一个分区   ※
q	#不保存分区退出   ※
d	#删除一个分区     ※
w	#保存分区退出     ※
a	#设置可引导标记
b	#编辑bsd磁盘标签
c	#设置DOS操作系统兼容标记
l	#显示已知的文件系统类型,82为swap交换分区,83为Linux分区
o	#建立空白DOS分区表
s	#新建空白SUN磁盘标签
t	#改变分区的系统ID
u	#改变显示记录单位
v	#验证分区表
x	#附加功能

命令(输入 m 获取帮助):m
命令(输入 m 获取帮助):p

#划分第一个主分区
命令(输入 m 获取帮助):n
Select (default p):   回车
分区号 (1-4,默认 1):回车
起始 扇区 (2048-209715199,默认为 2048):回车
Last 扇区,  扇区 or  size{K,M,G} (2048-209715199,默认为 209715199): 10G  #指定大小(K,M,G)
分区 1 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):p
磁盘标签类型:dos
磁盘标识符:0xefc65503

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux

#划分第二个主分区
命令(输入 m 获取帮助):n
Select (default p): 
分区号 (2-4,默认 2):
起始 扇区 (20973568-209715199,默认为 20973568):
Last 扇区,  扇区 or  size{K,M,G} (20973568-209715199,默认为 209715199): 10G  #指定分区大小

#划分第三个主分区
命令(输入 m 获取帮助):n
Select (default p): 
分区号 (3,4,默认 3):
起始 扇区 (41945088-209715199,默认为 41945088):
Last 扇区,  扇区 or  size{K,M,G} (41945088-209715199,默认为 209715199): 10G

#查看分区信息
命令(输入 m 获取帮助):p
磁盘标签类型:dos
磁盘标识符:0xefc65503

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41945087    10485760   83  Linux
/dev/sdb3        41945088    62916607    10485760   83  Linux

#划分第四个分区
命令(输入 m 获取帮助):n
Select (default e): p
起始 扇区 (62916608-209715199,默认为 62916608):
Last 扇区,  扇区 or  size{K,M,G} (62916608-209715199,默认为 209715199): 10G

#继续划分分区
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
#提示如果想要创建更多的分区,先将一个主分区替换为扩展分区

#删除分区
命令(输入 m 获取帮助):d4
分区号 (1-4,默认 4):
分区 4 已删除

命令(输入 m 获取帮助):d
分区号 (1-3,默认 3):3
分区 3 已删除

命令(输入 m 获取帮助):p
磁盘标签类型:dos
磁盘标识符:0xefc65503

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41945087    10485760   83  Linux

#创建主分区
命令(输入 m 获取帮助):n
Select (default p): 
分区号 (3,4,默认 3):
起始 扇区 (41945088-209715199,默认为 41945088):
Last 扇区,  扇区 or  size{K,M,G} (41945088-209715199,默认为 209715199): 10G

#创建按扩展分区
命令(输入 m 获取帮助):n
Select (default e): 
Using default response e
已选择分区 4
起始 扇区 (62916608-209715199,默认为 62916608):
Last 扇区,  扇区 or  size{K,M,G} (62916608-209715199,默认为 209715199):
分区 4 已设置为 Extended 类型,大小设为 70 GiB

#创建逻辑分区
命令(输入 m 获取帮助):n
添加逻辑分区 5
起始 扇区 (62918656-209715199,默认为 62918656):
Last 扇区,  扇区 or  size{K,M,G} (62918656-209715199,默认为 209715199): 10G
分区 5 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):p
磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
磁盘标签类型:dos
磁盘标识符:0xefc65503

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    41945087    10485760   83  Linux
/dev/sdb3        41945088    62916607    10485760   83  Linux
/dev/sdb4        62916608   209715199    73399296    5  Extended
/dev/sdb5        62918656    83890175    10485760   83  Linux
命令(输入 m 获取帮助):w
# 格式化文件系统
  • mkfs 命令用于在分区上建立文件系统
  • 常用文件系统类型
    • ext4,xfs
  • 命令格式:
    • mkfs.xfs 分区设备路径 #格式化为 xfs 类型文件系统
    • mkfs.ext4 分区设备路径 #格式化为 ext4 类型文件系统
代码语言:javascript复制
#格式化文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb1

#查看文件系统类型
[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="3bb79b0b-3f17-4ad9-ad47-f00dcb6a5afa" TYPE="xfs" 
# mount 挂载
  • mount 文件系统挂载命令
  • 命令格式:mount 设备路径 挂载点目录
代码语言:javascript复制
#创建挂载点目录
[root@localhost ~]# mkdir /mybak

#挂载文件系统
[root@localhost ~]# mount /dev/sdb1 /mybak

#查看正在使用中的分区信息
[root@localhost ~]# df -Th 

[root@localhost ~]# df -Th /mybak
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/sdb1      xfs    10G   33M   10G    1% /mybak

总结:

  • 添加硬盘 — 查看系统是否识别新硬盘 lsblk
  • 划分分区 —fdisk 设备路径
  • 格式化文件系统 —mkfs.xfs
  • 挂载 — 创建挂载点目录–挂载 mount 设备路径 挂载点目录
  • 查看分区使用情况 df -hT
# umount 卸载
  • umount 命令用于卸载文件系统
  • 命令格式:umount 挂载点目录
代码语言:javascript复制
#卸载文件系统
[root@localhost ~]# umount /mybak
[root@localhost ~]# df -h 
# 开机自动挂载
  • /etc/fstab 用于存放文件系统信息,当系统启动时,系统会自动读取文件内容将指定的文件系统挂载到指定的目录
  • 文件内容详解
代码语言:javascript复制
[root@localhost ~]# vim /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=5d36a8b5-5a58-450f-acf9-81fcddaa62de /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
#解释:该文件内容为6个字段,每个字段详解如下
第一个字段:要挂载的设备路径
第二个字段:挂载点目录
第三个字段:设备文件系统类型
第四个字段:挂载参数,参数如下↓
sync,async:  此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,默认为异步(async) 
atime,noatime:更新访问时间/不更新访问时间,访问分区时,是否更新文件的访问时间,默认为更新
ro,rw:挂载文件为只读(ro)或读写(rw),默认为rw
auto,noauto:自动挂载/手动挂载,执行mount -a时,是否自动挂载/etc/fstab文件内容,默认为自动(auto)
dev,nodev:是否允许此文件系统上,可建立装置文件,默认为允许(dev)
suid,nosuid:是否允许文件系统上含有SUID与SGID特殊权限,默认为允许(SUID)
exec,noexec:是否允许文件系统上拥有可执行文件,默认为允许(exec)
user,nouser:是否允许普通用户执行挂载操作,默认为不允许(nouser),只有root用户可以挂载分区
defaults默认值:代表async,rw,auto,dev,suid,exec,nouser七个选项
第五个字段:是否对文件系统进行备份,0不备份,1为备份
第六个字段:是否检查文件系统顺序,允许的数字是0,1,2,0表示不检查,1的优先权最高

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=ae55ec6b-973b-498e-a366-f35e14b3d153 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1 /mybak xfs defaults 0 0     #手动添加                                                    
  • mount 常用选项:
    • -a:依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
    • -o:该选项后边可跟挂载时额外参数
  • remount 命令:重新挂载文件系统,在文件系统出错时或重新挂载文件系统时非常重要
代码语言:javascript复制
[root@localhost ~]# mount -a
# GPT 分区格式
  • gdisk 命令用于查看磁盘使用情况和磁盘分区(GPT 分区格式)
  • 命令格式:gdisk [选项…] [设备路径]
  • 常用选项:-l 列出磁盘分区表类型与分区信息
代码语言:javascript复制
[root@localhost ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10 #GPT版本

Partition table scan:   #分区表扫描
  MBR: not present		#MBR分区不存在
  BSD: not present		#BSD分区不存在
  APM: not present		#APM分区不存在
  GPT: not present		#GPT分区不存在

Creating new GPT entries.  #创建新的GPT分区

Command (? for help): ?   #输入?号获取命令帮助
p	#显示磁盘分区表   ※
n	#新增加一个分区   ※
q	#不保存分区退出   ※
d	#删除一个分区     ※
w	#保存分区退出     ※

#创建新的分区
Command (? for help): n
Partition number (1-128, default 1): 回车
First sector (34-209715166, default = 2048) or { -}size{KMGTP}: 回车  #输入起始扇区,默认2048开始
Last sector (2048-209715166, default = 209715166) or { -}size{KMGTP}:  20G #输入新增分区的大小,可以通过扇区数来增加,也可以通过 size{KMGTP}方式来增加
Hex code or GUID (L to show codes, Enter = 8300):  #这里要求输入分区的类型,直接回车就行

#查看分区类型
Command (? for help): p  #输入p查看创建的分区
Disk /dev/sdc: 209715200 sectors, 100.0 GiB  #磁盘总容量
...
Total free space is 167772093 sectors (80.0 GiB)  #磁盘剩余容量

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        41945087   20.0 GiB    8300  Linux filesystem
#以创建的分区

Command (? for help): w   #输入w保存配置,如果不想保存可以输入q退出
Do you want to proceed? (Y/N): y  #问你是否相想继续,输入y继续 
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.   #写入成功

#格式化文件系统
[root@localhost ~]# mkfs.xfs /dev/sdc1

#查看文件系统类型
[root@localhost ~]# blkid /dev/sdc1
/dev/sdc1: UUID="c57746eb-8170-4c86-82ad-6aae95de19f3" TYPE="xfs" 

#创建挂载点
[root@localhost ~]# mkdir /webbak
[root@localhost ~]# mount /dev/sdc1 /webbak
[root@localhost ~]# df -hT
/dev/sdc1               xfs        20G   33M   20G    1% /webbak

#开机自动挂载
[root@localhost ~]# vim /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=ae55ec6b-973b-498e-a366-f35e14b3d153 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1              /mybak                   xfs     defaults        0 0 
/dev/sdc1              /webbak                  xfs     defaults        0 0   #手动添加

[root@localhost ~]# mount -a
# LVM 逻辑卷
  • 逻辑卷:LVM(Logical Volume Manager)逻辑卷管理系统
  • 逻辑卷可以实现将底层的物理分区整合成一个大的虚拟硬盘
  • 逻辑卷技术是通过 Linux 系统内核 dm(device mapper)设备映射组
# 创建卷组
  • 创建卷组思路:将创建好的物理卷组成卷组(或者直接创建卷组)
  • 命令格式:vgcreate 卷组名 设备路径 1 设备路径 2…
代码语言:javascript复制
#创建卷组
[root@localhost ~]# vgcreate systemvg  /dev/sdb2 /dev/sdb3

#详细显示卷组信息
[root@localhost ~]# vgdisplay  systemvg
  --- Volume group ---
  VG Name               systemvg  #卷组名字
  System ID             
  Format                lvm2      #卷组格式
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB  #卷组大小
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               KEP7XS-wrkI-rTUY-RqBa-UJA6-YRkK-iKDabR  #卷组UUID

#简要显示卷组信息
[root@localhost ~]# vgs systemvg
  VG       #PV #LV #SN Attr   VSize  VFree 
  systemvg   2   0   0 wz--n- 19.99g 19.99g
# 创建逻辑卷
  • 创建逻辑卷思路:从创建好的卷组中创建逻辑卷
  • 命令格式:lvcreate -L 大小 -n 逻辑卷名 卷组名
代码语言:javascript复制
#创建逻辑卷
[root@localhost ~]# lvcreate -L 10G -n mylv systemvg
  Logical volume "mylv" created.

#简要查看逻辑卷信息
[root@localhost ~]# lvs
  LV   VG       Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos   -wi-ao---- <17.00g                                                    
  swap centos   -wi-ao----   2.00g                                                    
  mylv systemvg -wi-a-----  10.00g     
[root@localhost ~]# lvs /dev/systemvg/mylv 
  LV   VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv systemvg -wi-a----- 10.00g    
  
 #查看卷组信息,卷组信息以变小
 [root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   2   0 wz--n- <19.00g    0 
  systemvg   2   1   0 wz--n-  19.99g 9.99g
# 格式化文件系统
代码语言:javascript复制
#格式化文件系统
[root@localhost ~]# mkfs.xfs /dev/systemvg/mylv

#查看文件系统类型
[root@localhost ~]# blkid /dev/systemvg/mylv
/dev/systemvg/mylv: UUID="7f08daf8-ae3c-40b2-a282-4514a6f37111" TYPE="xfs" 

#挂载使用
[root@localhost ~]# mkdir /dbbak
[root@localhost ~]# mount /dev/systemvg/mylv /dbbak
[root@localhost ~]# df -hT
/dev/mapper/systemvg-mylv xfs        10G   33M   10G    1% /dbbak
# 扩展逻辑卷
  • 逻辑卷支线上扩容,逻辑卷的空间来源于卷组,当卷组有足够的空间时,才可以扩展逻辑卷
  • 扩展命令:lvextend
代码语言:javascript复制
#扩容逻辑卷
[root@localhost ~]# lvextend -L  9G /dev/systemvg/mylv 

#查看逻辑卷信息
[root@localhost ~]# lvs 
  LV   VG       Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos   -wi-ao---- <17.00g                                                    
  swap centos   -wi-ao----   2.00g                                                    
  mylv systemvg -wi-ao----  19.00g    #扩容成功
# 扩展文件系统
  • 当逻辑卷扩大以后,也需要对逻辑卷的文件系统进行扩展
  • 扩展文件系统容量:
    • xfs_growfs #用于扩容 XFS 设备
    • resize2fs #用于扩容 EXT3/EXT4 设备(了解)resize2fs /dev/systemvg/xxoo
代码语言:javascript复制
#扩展文件系统
[root@localhost ~]# xfs_growfs /dbbak

#[root@localhost ~]# df -hT
/dev/mapper/systemvg-mylv xfs        19G   33M   19G    1% /dbbak

#查看卷组信息
[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree   
  centos     1   2   0 wz--n- <19.00g       0 
  systemvg   2   1   0 wz--n-  19.99g 1016.00m
# 扩展卷组
  • 卷组的空间来源于物理分区,当卷组没有足够空间提供给逻辑卷时,须扩容卷组
  • 扩展卷组命令:vgextend
代码语言:javascript复制
[root@localhost ~]# vgextend systemvg /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8

[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree  
  centos     1   2   0 wz--n- <19.00g      0 
  systemvg   6   1   0 wz--n- <59.98g <40.98g

#扩容逻辑卷
[root@localhost ~]# lvextend -L  40G /dev/systemvg/mylv 


[root@localhost ~]# lvs
  LV   VG       Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos   -wi-ao---- <17.00g                                                    
  swap centos   -wi-ao----   2.00g                                                    
  mylv systemvg -wi-ao----  59.00g   
  
#扩展文件系统
[root@localhost ~]# xfs_growfs /dbbak
/dev/mapper/systemvg-mylv   59G   34M   59G    1% /dbbak
# 课后作业

1. 查看 /var/log 目录下以包含 log 的文件

[root@localhost ~]# ls /var/log/log

2. 查看 /var/log 目录下以数字结尾的文件

[root@localhost ~]# ls /var/log/*[0-9]

3. 查看 /var/log 目录下以字母结尾的文件(包括大写)

[root@localhost ~]# ls /var/log/*[a-Z]

4. 过滤 /etc/sudoers 文件以 root 开头的行

root@localhost ~]# grep ^root /etc/sudoers root ALL=(ALL) ALL

5. 看 /etc/sudoers 文件有效的配置

[root@localhost ~]# grep -v ‘^#’ /etc/sudoers | grep -v ‘^$’ -n

6. 查找 /etc/ 目录下 crontab 文件存放位置,并查看文件内容

[root@localhost ~]# find /etc/ -name crontab -type f

[root@localhost ~]# cat /etc/crontab

[root@localhost ~]# find /etc/ -name crontab -type f -exec cat {} ;

7. 查找 10 分钟内被修改的文件

[root@localhost ~]# find / -cmin -10 -type f

8. 查找 /var/log 目录下 30 天之前被修改且大于 1M 的文件,清空文件内容

[root@localhost ~]# find /var/log -mtime 30 -type f -size 10k -exec cp /dev/null {} ;

9.Linux 下你常熟悉的压缩格式有哪些?

gzip bzip2 xz

10. 对 /home 目录打包并压缩,打包后名为 home.tar.gz

[root@localhost ~]# tar -czf home.tar.gz /home

11. 将 home.tar.gz 压缩包内容解压至 /homebak 目录下

[root@localhost ~]# tar -xvf home.tar.gz -C /homebak/

12.MBR 分区格式可以划分多少个主分区?支持多大容量磁盘?

4 个主分区,2.2T

13.GPT 分区格式可以划分多少个主分区?支持多大容量磁盘?

128 主分区,18EB

14.CentOS7 分区默认使用的文件系统类型是什么?

xfs

15. 如何查看一块磁盘的分区格式?及扩展分区大小?

[root@localhost ~]# fdisk -l /dev/sdc

磁盘标签类型:gpt

16 如何查看一块磁盘剩余容量?

[root@localhost ~]# lsblk /dev/sdc

17.linux 下开机自动挂载文件是哪个?

/etc/fstab

18. 如何查看一个分区文件系统类型?及使用情况?

[root@localhost ~]# df -hT

19. 为根分区扩容 40G 空间(添加硬盘、分区)

代码语言:javascript复制
#查看根分区卷组
[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree   
  centos     1   2   0 wz--n- <19.00g       0 

#扩容根分区卷组
[root@localhost ~]# vgextend centos /dev/sdc2 /dev/sdc3

#查看根分区逻辑卷信息
[root@localhost ~]# lvs
  LV   VG       Attr       LSize   
  root centos   -wi-ao---- <17.00g  
  
#扩容逻辑卷
[root@localhost ~]# lvextend -L  39G /dev/centos/root 

#查看逻辑卷信息
[root@localhost ~]# lvs
  root centos   -wi-ao---- <56.00g  
  
#查看正在使用的分区信息
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  4.4G   13G   26% /

#扩容文件系统
[root@localhost ~]# xfs_growfs /

#查看使用情况
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   56G  4.4G   52G    8% /
# 删除逻辑卷
  • 逻辑卷的删除不允许联机操作,需要先卸载,在执行删除
  • 在执行删除操作时,首先删除 LV 逻辑卷,在删除 VG 卷组,最后删除 PV 物理卷
  • 删除命令:lvremove
代码语言:javascript复制
#删除逻辑卷错误示范
[root@localhost ~]# lvremove /dev/systemvg/mylv 
  Logical volume systemvg/mylv contains a filesystem in use.  #提示文件正在使用中

#需要先卸载
[root@localhost ~]# umount /dblod/

#删除逻辑卷
[root@localhost ~]# lvremove /dev/systemvg/mylv 
Do you really want to remove active logical volume systemvg/mylv? [y/n]: y
  Logical volume "mylv" successfully removed

#删除卷组
[root@localhost ~]# vgremove systemvg
  Volume group "systemvg" successfully removed

#删除物理卷后将恢复至普通分区
#查看物理卷
[root@thinkmo ~]# pvs   

#删除物理卷
[root@thinkmo ~]# pvremove /dev/sdb2 /dev/sdb3 /dev/sdb5 /dev/sdb6 /dev/sdb6 /dev/sdb7 /dev/sdb8
# 逻辑卷的缩减
  • 命令 lvreduce
  • 不允许联机缩减
  • 先缩减文件系统的空间,在缩减逻辑卷的空间
# RAID 磁盘阵列
  • RAID 中文全称:独立磁盘冗余阵列 ,简称磁盘阵列
  • RAID 可通过技术(软件 / 硬件)将多个独立的磁盘整合成一个巨大容量大逻辑磁盘使用
  • RAID 可以提高数据 I/O(读写)速度,和冗余数据的功能
# RAID 级别

RAID0:等量存储,至少由 2 块磁盘组成,同一个文档等量存放在不同的磁盘并行写入数据来提高效率,但只是单纯的提高效率,并没有冗余功能,如果其中一块盘故障,数据会丢失,不适合存放重要数据

RAID1:完整备份,至少由两块磁组成,同一个文档复制成多份存储到不同磁盘提高可靠性,读写速度没有提升,适合存储重要的数据

RAID2:至少由 3 块磁盘组成,数据分散存储在不同磁盘,在读写数据时需要对数据时时校验,由于采用的校验算法复杂,数据量比原有数据增大,而且导致硬件开销较大

RAID3:至少由三块磁盘组成,同一份文档分散写入不同的磁盘,校验数据单独存放在另外一块磁盘,由于每次读写操作都会访问校验盘,容易导致校验盘长时间高负荷工作而挂掉,如果校验盘损坏数据将无法恢复

RAID4:与 RAID3 类似,至少由 3 块磁盘组成,同一份文档分散存写入不同磁盘,校验数据单独存放在另外一块磁盘,由于每次读写操作都会访问校验盘,容易导致校验盘长时间高负荷工作而挂掉,如果校验盘损坏数据将无法恢复,与 RAID3 的区别是数据分割方式不一样

RAID5:至少由 3 块磁盘组成,同一份文档分散写入不同磁盘,每个硬盘都有校验数据,其中校验数据会占用磁盘三分之一的空间,三分之二的空间存放原始数据,允许同时坏一块磁盘,当一块磁盘损坏,其他磁盘里的数据配合校验信息可将数据恢复回来

RAID6:至少由 4 块磁盘组成,同一份文档分散写入不同磁盘,每个磁盘都有校验数据,由于采用双校验算法,所以校验数据量是 RAID5 的两倍,需要占用 2 块磁盘空间存放校验数据,两块盘存放原始数据,由于数据校验的算法计算量偏大,所以在速写速度上没有 RAID5 快,允许同时坏 2 块磁盘

RAID7:美国 SCC 公司专利,花钱

RAID10:RAID10=RAID1 RAID0 合二为一,最少需要 4 块磁盘,先将 4 块硬盘组成两组 RAID1,在将两组 RAID1 组成一个 RAID0,既提高数据读写速度,又能保障数据安全性,缺点是可用容量是总容量的一半

# 实现 RAID 方式
  • 实现 RAID 通常有三种方式,通过软件技术实现 RAID 功能(软 RAID),不稳定
  • 外接式磁盘阵列柜,被常用在大型服务器上,不过这类产品价格昂贵
  • RAID 磁盘阵列卡,分为服务器自带和额外安装,硬 RAID 比软 RAID 更安全稳定,RAID 卡带有缓存功能可实现数据自动恢复,RAID 卡有电池
  • 配置硬 RAID 方式
# 进程管理
  • 什么是程序:用计算机语言编写的命令序列集合,用来实现特定的目标或解决特定的问题,程序占用磁盘空间,程序是静态并且是永久的
  • 什么是进程:正在运行中的程序叫进程,占用内存空间,进程是动态的,进程是有生命周期的,进程有自己的独立内存空间,每启动一个进程,系统就会为它分配内存空间并分配一个 PID 号,每个进程都会对应一个父进程,而父进程可以复制多个子进程,每种进程都有两种方式存在,前台与后台,一般进程都是以后台方式运
  • 什么是线程:线程也被称为轻量级进程,被包含在进程中,是进程的一个子集,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务,每个线程都是独立的,线程之间共享进程的内存空间,在多线程的程序中,由于线程很 “轻”,故线程的切换非常迅速且开销小(在同一进程中)
# 查看进程树
  • pstree 以树状结构显示进程信息,包括进程之间的关系
  • 命令格式:pstree [选项…] [参数…]
  • 常用选项:
    • -p #显示进程 PID
    • -a #显示完整的命令行
    • -u #列出每个进程所属账号名称
代码语言:javascript复制
#查看进程树
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
CentOS7版本:天父进程systemd
CentOS6版本:天父进程init,Apstart
CentOS5版本:天赋进程init

#以PID形式显示进程信息
[root@localhost ~]# pstree -p
systemd(1)─┬─ModemManager(6714)─┬─{ModemManager}(6739)

#查看系统用户的进程信息
[root@localhost ~]# pstree -p lisi
sshd(15086)───bash(15089)───vim(15244)
[root@localhost ~]# pstree -pa lisi
sshd,15086    
  └─bash,15089
      └─vim,15244 1.txt

#查看系统所有用户的进程
root@localhost ~]# pstree -up
...
           ├─smartd(6726)
           ├─sshd(7337)─┬─sshd(8880)───bash(8887)───pstree(15395)
           │            └─sshd(15066)───sshd(15086,lisi)───bash(15089)───vim(15244)
  • ps aux:unix 格式静态查看系统进程,查看系统所有进程信息
    • a #显示当前终端所有进程
    • u #以用户格式输出
    • x #当前用户在所有终端下的进程
  • ps -ef:Linux 格式静态查看系统进程,查看系统所有进程信息
    • -e #显示系统所有进程
    • -l #以长格式输出信息
    • -f #显示最完整的进程信息
代码语言:javascript复制
#查看系统所有进程信息
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ   RSS TTY STAT START TIME COMMAND
root  1  2.2  0.3 127992 6576 ?  Ss   09:08 0:01 /usr/lib/systemd/systemd --switched-root
#个字段含义如下:
user:进程属于那个用户
PID :进程PID号
%CPU:进程占用CPU资源百分比
%MEM:进程占用物理内存百分比
VSZ :进程使用掉的虚拟内存量(单位:Kb)
RSS :进程占用固定内存量(单位:Kb)
TTY :进程在那个终端运行,如果内核直接调用则显示“?”,tty1-tty6表示本机终端登录的用户进程,pts/0-255则表示远程终端登录用户的进程
STAT:进程状态:R(Running)运行,S(Sleep)休眠,s包含子进程,T(stop)停止,Z(Zombie)僵尸, 后台进程
START:进程启动时间
TIME :占用CPU运算时间
COMMAND:产生进程的命令

#查看系统所有进程信息
[root@localhost ~]# ps -ef
UID  PID PPID  C STIME TTY    TIME  CMD
root 1      0  0 09:08 ?  00:00:01 /usr/lib/systemd/systemd --switched-root --system --dese
#PPID :该进程的父进程ID号
# top 查看系统健康状态
  • top 命令动态来查看系统运行性能及状态信息
  • 命令格式:top [选项…]
  • 常用选项:-d #指定刷新秒数,默认为 3 秒刷新一次
  • 交互界面显示指令:
    • 键盘上下键翻行
    • h #获取交互模式帮助
    • P (大写) #按照 CPU 使用资源排序
    • M #按照内存使用资源排序
    • q #退出
代码语言:javascript复制
[root@localhost ~]# top
top - 21:22:04 up 12:13,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 115 total,   1 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863224 total,  1502920 free,   107872 used,   252432 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1565576 avail Mem 
   
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME  COMMAND   
   8317 root      20   0  161984   2220   1568 R  0.7  0.1   0:01.62 top   
#第一行top每个字段含义如下:
第二列:21:22:04:当前系统时间
第三列:up 12:13:系统运行时间,该系统以运行12小时13分钟(up 10 day,12:13 代表运行10天12小时13分钟)
第四列:2 users:当前系统登录终端数量
第五列:load average: 0.00, 0.01, 0.05:CPU1分钟,5分钟,15分钟之前平均负载量,根据CPU核数判断系统CPU负载量,1核CPU若高于1代表负载过高,2核CPU若高于2代表负载过高,依次类推。。。

#第二行Tasks每个字段含义如下:
第二列:115 total:当前系统中进程的总数量
第三列:1 running:正在运行的进程数量
第四列:114 sleeping:正在睡眠的进程数量
第五列:0 stopped:正在停止的进程数量
第六列:0 zombie:僵尸进程数量,僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
#查找僵尸进程与其父进程
ps -e -o ppid,stat | grep Z
命令解释:
-o 自定义输出字段,我们设定显示字段为 stat(状态), ppid(父进程id), z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
#杀死进程
kill -9   父进程号

#第三行%Cpu(s)每个字段含义如下
第二列:0.0 us:用户进程占用的CPU百分比
第三列:0.0 sy:系统进程占用的CPU百分比
第四列:0.0 ni:改变过优先级的用户进程占用的CPU百分比
第五列:100.0 id:空闲的CPU百分比(重点关注)
第六列:0.0 wa:等待输入/输出的进程的占用CPU百分比
第七列:0.0 hi:硬中断请求服务占用的CPU百分比
第八列:0.0 si:软中断请求服务占用的CPU百分比
第九列:0.0 st:虚拟时间百分比,当有虚拟机时,虚拟CPU等待实际CPU的时间百分比

#第四行KiB Mem每个字段含义如下:
第二列:1863224 total:物理内存总量,单位KB
第三列:1502516 free: 空闲内存总量,单位KB
第四列:108240 used:  以使用的内存总量,单位KB
第五列:252468 buff/cache:块设备与普通文件占用的缓存数量

#第五行KiB Swap每个字段含义如下:
第二列:2097148 total:交换空间总量,单位KB
第三列:2097148 free:可用空闲交换空间总量,单位KB
第四列:0 used::以使用的交换空间总量,单位KB
第五列:1565180 avail Mem:可用于进程下一次分配的物理内存数量

#第六行每个字段含义如下:
PID:进程PID号
USER:进程所有者的用户名
PR:进程优先级执行顺序,越小越优先被执行
NI:负值表示高优先级,正值表示低优先级,越小越优先被执行
VIRT:进程使用的虚拟内存总量,单位kb   
RES:进程使用的、未被换出的物理内存大小,单位kb
SHR:共享内存大小,单位kb
S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU:进程使用的CPU百分比(重点关注)
%MEM:进程使用的物理内存百分比(重点关注)
TIME :进程使用的CPU时间总计,单位1/100秒
COMMAND:命令名/命令行
# 检索进程
  • pgrep 通过匹配其程序名,找到匹配的进程
  • 命令格式:pgrep [选项…] [参数…]
  • 常用选项:
    • -l #输出进程名与 PID
    • -U #检索指定用户进程
    • -t #检索指定终端进程
    • -x #精确匹配完整进程名
代码语言:javascript复制
#过滤sshd进程
[root@localhost ~]# pgrep sshd
7337
8880
15066
15086
17027

过滤sshd进程,并显示进程名称
[root@localhost ~]# pgrep -l sshd
7337 sshd
8880 sshd
15066 sshd
15086 sshd
17027 sshd

#过滤指定用户的进程
[root@localhost ~]# pgrep -lU lisi
15086 sshd
15089 bash
15244 vim

#按照用户名过滤进程时,选项不要颠倒
[root@localhost ~]# pgrep -Ul lisi
pgrep: invalid user name: l


#查看系统所有终端用户
[root@localhost ~]# who
root     pts/0        2021-04-24 14:06 (192.168.0.1)
lisi     pts/1        2021-04-24 15:57 (192.168.0.1)
root     pts/2        2021-04-24 16:29 (192.168.0.1)

#过滤用户在指定终端开启的进程信息
[root@localhost ~]# pgrep -lU lisi -t pts/1
15089 bash
15244 vim

#过滤用户在指定终端开启的进程信息
[root@localhost ~]# pgrep -lU lisi -t pts/3
19704 bash
19754 top

#精确匹配进程名(没有则不显示)
[root@localhost ~]# pgrep -x ssh

#精确匹配进程名
[root@localhost ~]# pgrep -xl crond
7362 crond
# 进程的前后台调度
  • & #将进程放入后台运行
  • jobs -l #查看后台进程列表
  • fg 进程编号 #将后台进程恢复至前台运行
  • ctrl z 组合键 #挂起当前进程并放入后台
  • bg 进程编号 #激活后台被挂起进程
代码语言:javascript复制
[root@localhost ~]# sleep 5m &
[1] 20130

#查看后台进程信息
[root@localhost ~]# jobs -l
[1]  20130 运行中               sleep 5m &

#将后台进程放入前台运行
[root@localhost ~]# fg 1
sleep 5m

#挂起前台进程放入后台
[root@localhost ~]# jobs
[1]   已停止               sleep 5m

#激活后台的进程
[root@localhost ~]# bg 1
[1]  sleep 5m &
[root@localhost ~]# jobs -l
[1]  20130 运行中               sleep 5m &
# 杀死进程
  • 杀死进程的方式
  • ctrl c 组合键结束当前命令程序
  • kill [选项…] PID
    • 常用选项:-l #列出可用进程信号
    • 常用信号:-1 重启进程,-9 强制杀死进程,-15 正常杀死进程(默认信号无需指定)
  • killall -9 进程名 #强制杀死进程
  • killall -9 -u 用户名 #强制杀死该用户所有进程
  • pkill -9 进程名 #强制杀死进程
    • 常用选项:-t 终端号 #提出指定终端用户
代码语言:javascript复制
#结束前台正在运行的进程
[root@localhost ~]# sleep 5m
^C

#启用进程放入后台
[root@localhost ~]# sleep 5m &
[1] 21150
[root@localhost ~]# sleep 6m &
[2] 21155
[root@localhost ~]# sleep 7m &
[3] 21159
[root@localhost ~]# sleep 8m &
[4] 21162

#查看后台进程
[root@localhost ~]# jobs -l
[1]  21150 运行中               sleep 5m &
[2]  21155 运行中               sleep 6m &
[3]- 21159 运行中               sleep 7m &
[4]  21162 运行中               sleep 8m &

#杀死后台指定的进程(按照PID)
[root@localhost ~]# kill 21150

#查看后台进程
[root@localhost ~]# jobs -l
[1]  21150 已终止               sleep 5m
[2]  21155 运行中               sleep 6m &
[3]- 21159 运行中               sleep 7m &
[4]  21162 运行中               sleep 8m &

[root@localhost ~]# kill 21155
[root@localhost ~]# jobs -l
[2]  21155 已终止               sleep 6m
[3]- 21159 运行中               sleep 7m &
[4]  21162 运行中               sleep 8m &

#强制杀死进程
[root@localhost ~]# kill -9 21159
[root@localhost ~]# jobs -l
[3]- 21159 已杀死               sleep 7m
[4]  21162 运行中               sleep 8m &

#启动进程
[root@localhost ~]# sleep 4m &
[5] 21402
[root@localhost ~]# sleep 5m &
[6] 21406
[root@localhost ~]# sleep 6m &
[7] 21409
[root@localhost ~]# sleep 7m &
[8] 21412

[root@localhost ~]# jobs -l
[4]  21162 运行中               sleep 8m &
[5]  21402 运行中               sleep 4m &
[6]  21406 运行中               sleep 5m &
[7]- 21409 运行中               sleep 6m &
[8]  21412 运行中               sleep 7m &

#按照进程名去杀
[root@localhost ~]# killall sleep
[4]   已终止               sleep 8m
[5]   已终止               sleep 4m
[6]   已终止               sleep 5m
[7]-  已终止               sleep 6m
[8]   已终止               sleep 7m

#启动进程
[root@localhost ~]# sleep 5m &
[1] 21491
[root@localhost ~]# sleep 6m &
[2] 21495
[root@localhost ~]# sleep 7m &
[3] 21498
[root@localhost ~]# jobs -l
[1]  21491 运行中               sleep 5m &
[2]- 21495 运行中               sleep 6m &
[3]  21498 运行中               sleep 7m &

#按照进程名强制杀死进程
[root@localhost ~]# killall -9 sleep
[1]   已杀死               sleep 5m
[2]-  已杀死               sleep 6m
[3]   已杀死               sleep 7m

[root@localhost ~]# who
root     pts/0        2021-04-24 14:06 (192.168.0.1)
lisi     pts/1        2021-04-24 15:57 (192.168.0.1)
root     pts/2        2021-04-24 16:29 (192.168.0.1)
lisi     pts/3        2021-04-24 17:14 (192.168.0.1)

#杀死指定用户的所有进程(讲用户提出系统)
[root@localhost ~]# killall -9 -u lisi
[root@localhost ~]# who
root     pts/0        2021-04-24 14:06 (192.168.0.1)
root     pts/2        2021-04-24 16:29 (192.168.0.1)

#pkill命令演示
[root@localhost ~]# sleep 4m &
[1] 21870
[root@localhost ~]# sleep 5m &
[2] 21873
[root@localhost ~]# sleep 6m &
[3] 21876

[root@localhost ~]# jobs 
[1]   运行中               sleep 4m &
[2]-  运行中               sleep 5m &
[3]   运行中               sleep 6m &

[root@localhost ~]# pkill sleep
[1]   已终止               sleep 4m
[2]-  已终止               sleep 5m
[3]   已终止               sleep 6m

[root@localhost ~]# who
root     pts/0        2021-04-24 14:06 (192.168.0.1)
lisi     pts/1        2021-04-24 17:47 (192.168.0.1)
root     pts/2        2021-04-24 16:29 (192.168.0.1)
lisi     pts/3        2021-04-24 17:48 (192.168.0.1)
[root@localhost ~]# pkill -9 -t pts/3
# 用户登录分析
  • users who w #查看以登录的用户信息(详细度不同)
  • last #显示登录成功的用户信息
  • lastb #显示登录失败的用户信息
代码语言:javascript复制
[root@localhost ~]# users
lisi root root
#root:以登录系统的用户名

[root@localhost ~]# who
root     pts/0        2021-04-24 14:06 (192.168.0.1)
lisi     pts/1        2021-04-24 17:47 (192.168.0.1)
root     pts/2        2021-04-24 16:29 (192.168.0.1)
#第一列:以登录系统的用户名
#第二列:用户登录的终端编号
#第三列:登陆时间
#第四列:远程登录地址

[root@localhost ~]# w
 08:16:10 up 55 min,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.1      07:21    2.00s  0.10s  0.00s w
#第一行为top命令显示的第一行数据
#第二行每列含义如下:
USER:以登录的用户名
TTY:用户登录终端编号
FROM:登录地址
LOGIN@:登录时间
IDLE:用户空闲时间,这是个计时器,一旦用户执行任何操作,该计时器便会被重置
JCPU:该终端所有进程占用CPU处理时间,包括正在运行和后台作业占用时间。
PCPU:进程执行以后消耗的CPU时间
WHAT:当前正在执行的任务

#显示登录成功用户
[root@localhost ~]# last
lisi     pts/1        192.168.0.1      Sat Apr 24 07:56 - 08:03  (00:07) 
#第一列:用户名
#第二列:用户登录终端编号
#第三列:登录地址
#第四列:登录起使时间
#第五列:登录结束时间
#第六列:登录持续时间

#查看最近2次登录系统成功的用户
[root@localhost ~]# last -2
lisi     pts/3        192.168.0.1      Sat Apr 24 17:48 - 17:50  (00:01)    
lisi     pts/3        192.168.0.1      Sat Apr 24 17:47 - 17:48  (00:00)  

#查看登录失败用户
[root@localhost ~]# lastb
lisi     ssh:notty    192.168.0.1      Sat Apr 24 08:52 - 08:52  (00:00) 
# Linux 软件包类型
  • 开源软件:软件源代码开放,供用户免费学习,允许用户二次开发,用户使用放心,后期开发者不维护,有人提我们维护!
  • 闭源软件:软件源代码不公开发布,无法二次开发,后期开发者不维护对公司损失很大!
# 开源软件包类型
  • 源码包
  • 二进制包(RPM 包)
# 源码包特点
  • 源码包优点:可以看到软件源代码,安装灵活,可以自定义安装路径与安装功能,卸载方便
  • 源码包缺点:安装过程麻烦,需要用户手动编译,需要手动解决软件包的依赖关系
# RPM 包特点
  • RPM 包优点:由于已经提前被编译过,所以安装简单,安装速度快
  • RPM 包缺点:所有功能用户无法自定义,安装没有源码包灵活,不可以看到软件源代码
  • RPM 包命名规则,如:vsftpd-3.0.2-25.el7.x86_64.rpm
    • vsftpd #软件包名称
    • 3.0.2 #软件包版本,主版本。次版本。修改版本
    • 25 #补丁次数
    • el7 #适合的系统(el7 表示 RHEL7)
    • x86_64 #适合的 CPU 架构
    • rpm #rpm 包扩展名
# RPM 管理软件包
  • RPM 命令管理软件包需要手动解决软件包之间依赖关系
    • 树形依赖:a–>b–>c–d
    • 环形依赖:a–>b–>c–a
    • 模块依赖:需要模块文件支持,模块查询地址:www.rpmfind.net
  • 命令格式:rpm 选项… 程序名 / 软件包全名
  • 常用选项:
    • -q #仅查询软件是否安装
    • -qa #列出所有已经安装在系统中的所有软件,可配合 grep 过滤指定的软件包
    • -qi #列出软件包详细信息,包含版本与官网地址
    • -qf #后边接文件名,查询配置文件由哪个软件包产生
    • -ql #列出与该软件包相关所有文件与目录的存放位置
    • -ivh #i 安装,v 显示详细信息,h 显示软件安装进度
    • -Uvh #升级安装软件包(升级时要做好相关配置文件的备份)
    • -e #卸载软件包
    • –nodesps #卸载软件包时忽略依赖关系
    • –import #导入红帽签名文件
代码语言:javascript复制
#挂载iso镜像文件
[root@localhost ~]# mkdir /mnt/centos
[root@localhost ~]# mount /dev/cdrom  /mnt/centos/

#实现永久挂载,查看iso镜像文件系统类型
[root@localhost ~]# df -hT
[root@localhost ~]# vim /etc/fstab
...
/dev/cdrom /mnt/centos iso9660 defaults 0 0

#重新加载
[root@localhost ~]# mount -a

#查询软件包是否安装
[root@localhost centos]# rpm -q vsftpd
未安装软件包 vsftpd 

#安装vsftpd软件包
[root@localhost centos]# rpm -i Packages/vsftpd-3.0.2-25.el7.x86_64.rpm 

#查询系统中以安装的所有软件
[root@localhost centos]# rpm -qa
[root@localhost centos]# rpm -qa | grep vsftpd
vsftpd-3.0.2-25.el7.x86_64

#查询软件包详细的信息
[root@localhost centos]# rpm -qi vsftpd
Name        : vsftpd    #软件包名
Version     : 3.0.2     #版本
Release     : 25.el7    #适合安装的系统版本
Architecture: x86_64    #适合安装的CPU架构
Install Date: 2021年05月04日 星期二 14时47分06秒   #安装时间
Group       : System Environment/Daemons        #软件包属于哪个群组
Size        : 361335      #软件包大小
License     : GPLv2 with exceptions
Signature   : RSA/SHA256, 2018年11月12日 星期一 22时48分54秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : vsftpd-3.0.2-25.el7.src.rpm
Build Date  : 2018年10月31日 星期三 03时45分10秒
Build Host  : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : https://security.appspot.com/vsftpd.html   #软件包官网地址
Summary     : Very Secure Ftp Daemon
Description :      #描述信息
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.


[root@localhost centos]# which ls
alias ls='ls --color=auto'
	/usr/sbin/ls
	
#查询文件由哪个软件包产生	
[root@localhost centos]# rpm -qf /usr/bin/ls
coreutils-8.22-23.el7.x86_64

[root@localhost centos]# which vim
/usr/bin/vim

[root@localhost centos]# rpm -qf /usr/bin/vim
vim-enhanced-7.4.160-5.el7.x86_64

[root@localhost centos]# rpm -qi vim-enhanced

#查询软件包自带的文件与目录安装路径
[root@localhost centos]# rpm -ql vsftpd

[root@localhost centos]# rpm -qf /usr/bin/vim
vim-enhanced-7.4.160-5.el7.x86_64

[root@localhost centos]# rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor

[root@localhost centos]# rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64

#卸载软件包
[root@localhost centos]# rpm -e vsftpd

[root@localhost centos]# rpm -q vsftpd
未安装软件包 vsftpd 

#安装vsftpd软件包
[root@localhost centos]# rpm -ivh Packages/vsftpd-3.0.2-25.el7.x86_64.rpm 
警告:Packages/vsftpd-3.0.2-25.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:vsftpd-3.0.2-25.el7              ################################# [100%]

[root@localhost centos]# rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64

#升级安装软件包
[root@localhost centos]# rpm -Uvh Packages/vsftpd-3.0.2-25.el7.x86_64.rpm 
警告:Packages/vsftpd-3.0.2-25.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
	软件包 vsftpd-3.0.2-25.el7.x86_64 已经安装

#导入红帽签名文件
[root@localhost centos]# rpm --import RPM-GPG-KEY-CentOS-7

#安装软件包,查看是否还有警告信息
[root@localhost centos]# rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64
[root@localhost centos]# rpm -e vsftpd
[root@localhost centos]# rpm -ivh Packages/vsftpd-3.0.2-25.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:vsftpd-3.0.2-25.el7              ################################# [100%]

#安装httpd软件包
[root@localhost centos]# rpm -ivh Packages/httpd-(tab键)
httpd-2.4.6-88.el7.centos.x86_64.rpm         httpd-manual-2.4.6-88.el7.centos.noarch.rpm
httpd-devel-2.4.6-88.el7.centos.x86_64.rpm   httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
[root@localhost centos]# rpm -ivh Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 
错误:依赖检测失败:
	/etc/mime.types 被 httpd-2.4.6-88.el7.centos.x86_64 需要
	httpd-tools = 2.4.6-88.el7.centos 被 httpd-2.4.6-88.el7.centos.x86_64 需要
	libapr-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要
	libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-88.el7.centos.x86_64 需要
[root@localhost centos]# ls /etc/mime.types
ls: 无法访问/etc/mime.types: 没有那个文件或目录

#解决依赖关系
[root@localhost centos]# rpm -ivh Packages/mailcap-2.1.41-2.el7.noarch.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:mailcap-2.1.41-2.el7             ################################# [100%]
[root@localhost centos]# ls /etc/mime.types
/etc/mime.types

#解决依赖关系
[root@localhost centos]# rpm -ivh Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm 
错误:依赖检测失败:
	libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-88.el7.centos.x86_64 需要
	libaprutil-1.so.0()(64bit) 被 httpd-tools-2.4.6-88.el7.centos.x86_64 需要

#解决依赖关系(www.rpmfind.net官网查询提供libapr-1.so.0模块文件的软件包)
[root@localhost centos]# rpm -ivh Packages/apr-(tab键)
apr-1.4.8-3.el7_4.1.x86_64.rpm         apr-util-1.5.2-6.el7.x86_64.rpm        
apr-devel-1.4.8-3.el7_4.1.x86_64.rpm   apr-util-devel-1.5.2-6.el7.x86_64.rpm  
[root@localhost centos]# rpm -ivh Packages/apr-1.4.8-3.el7_4.1.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:apr-1.4.8-3.el7_4.1              ################################# [100%]

#解决依赖关系(www.rpmfind.net官网查询提供libaprutil-1.so.0模块文件的软件包)
[root@localhost centos]# rpm -ivh Packages/apr-util-(tab键)
apr-util-1.5.2-6.el7.x86_64.rpm        apr-util-devel-1.5.2-6.el7.x86_64.rpm  
[root@localhost centos]# rpm -ivh Packages/apr-util-
apr-util-1.5.2-6.el7.x86_64.rpm        apr-util-devel-1.5.2-6.el7.x86_64.rpm  
[root@localhost centos]# rpm -ivh Packages/apr-util-1.5.2-6.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:apr-util-1.5.2-6.el7             ################################# [100%]

#安装依赖关系
[root@localhost centos]# rpm -ivh Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:httpd-tools-2.4.6-88.el7.centos  ################################# [100%]

#安装httpd主包
[root@localhost centos]# rpm -ivh Packages/httpd-(tab键)
httpd-2.4.6-88.el7.centos.x86_64.rpm         httpd-manual-2.4.6-88.el7.centos.noarch.rpm
httpd-devel-2.4.6-88.el7.centos.x86_64.rpm   httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
[root@localhost centos]# rpm -ivh Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...
   1:httpd-2.4.6-88.el7.centos        ################################# [100%]
# yum 软件包管理
  • yum(软件仓库):提供众多软件包的仓库,并自动解决软件包之间复杂依赖关系
  • yum 常用命令:
    • yum repolist #列出仓库可用软件包
    • yum list 软件包名 #查看系统中提供的软件包(包含未安装的软件包)
    • yum install 软件包名 #安装软件包,-y 自动回答 yes
    • yum update 软件包名 #升级软件包版本
    • yum remove 软件包名 #卸载软件包
    • yum clean all #清除仓库缓存
    • yum provides 文件名 #查看文件由哪个软件包产生(主要用于查找程序文件)
    • yum makecache #生成缓存
  • 本地 yum 源配置(本地软件仓库)
代码语言:javascript复制
[root@localhost ~]# vim /etc/yum.repos.d/local.repo 
[local]               #仓库名称,名称自定义,但具有唯一性
name=local_centos     #仓库描述,(类似于仓库解释),描述信息自定义,不具备唯一性
baseurl=file:///mnt/centos   #指定软件仓库地址,file://用于指定本地软件包存放位置
enabled=1    #软件仓库是否启动,1启动,0不启动
gpgcheck=0   #是否检测软件包签名,0不检测,1检测


#检测仓库可用性
[root@localhost centos]# yum repolist
已加载插件:fastestmirror, langpacks
    
源标识        源名称            状态
local       local_centos      4,021
repolist: 4,021

#查找指定的软件包
[root@localhost centos]# yum list gcc

#安装软件包
[root@localhost centos]# yum install gcc
...
Is this ok [y/d/N]: y (y安装/d下载到本地不安装/N不安装)

[root@localhost centos]# rpm -q gcc
gcc-4.8.5-36.el7.x86_64

[root@localhost centos]# rpm -qi gcc

[root@localhost centos]# rpm -ql gcc

#安装软件包并自动回答yes
[root@localhost centos]# yum -y install  gcc-c   

[root@localhost centos]# rpm -q gcc

[root@localhost centos]# rpm -qi gcc

[root@localhost centos]# rpm -ql gcc

[root@localhost centos]# rpm -qf /usr/bin/ls

[root@localhost centos]# yum provides /usr/bin/ls

#下载挂载点
[root@localhost ~]# umount /mnt/centos/
[root@localhost ~]# ls /mnt/centos/

#查看仓库可用性
[root@localhost ~]# yum repolist
源标识          源名称                             状态
local          local_centos                     4,021
repolist: 4,021


[root@localhost ~]# rpm -e vsftpd
root@localhost ~]# yum -y install vsftpd
Error downloading packages:
  vsftpd-3.0.2-25.el7.x86_64: [Errno 256] No more mirrors to try.

[root@localhost ~]# yum clean all
[root@localhost ~]# yum repolist
源标识      源名称                                  状态
local      local_centos                            0
repolist: 0

#挂载
[root@localhost ~]# mount -a
mount: /dev/sr0 写保护,将以只读方式挂载
  • 网络 yum 源配置(网络软件仓库,配置阿里开源软件仓库)
  • https://developer.aliyun.com/special/mirrors/notice 阿里软件仓库
  • https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ 清华大学软件仓库
代码语言:javascript复制
#下载wget工具
[root@localhost ~]# yum -y install wget

#下载阿里Base源(基本软件仓库,解决rpm软件的依赖关系)
[root@localhost ~]#  wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#下载阿里epel源(额外软件仓库,包含许多基本软件仓库没有的软件包)
[root@localhost ~]#  wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@localhost ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority   #故障转移方法,默认优先
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#配置清华大学开源镜象站
[root@localhost ~]# vim /etc/yum.repos.d/local.repo 
[local]
name=local_centos
baseurl=file:///mnt/centos/
enabled=1
gpgcheck=0

[tuna.tsinghua.edu.cn]
name=tuna.tsinghua.edu.cn
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
enabled=1
gpgcheck=0

#生成yum仓库缓存提高软件包下载速度
[root@localhost ~]# yum makecache
...
元数据缓存已建立
# 设置 yum 源优先级
代码语言:javascript复制
#安装yum-priorities插件
[root@localhost ~]# yum -y install yum-priorities

#设置本地yum为最高优先级
[root@localhost ~]# vim /etc/yum.repos.d/local.repo
[local]
name=local_centos
baseurl=file:///mnt/centos
enabled=1
gpgcheck=0
priority=1  #优先级为1-99之间,数字越小越优先
# 源码包安装方式

源码包安装步骤:

  • 官网下载源码包
  • 系统安装源码包依赖
  • 解压源码包 && 进入源码包路径
  • configure 检测系统环境 && 指定安装路径与功能
  • make 编译,将源代码转换成二进制
  • make install 安装软件包
代码语言:javascript复制
#从官网下载源码包
http://nginx.org/

#安装源码包依赖包
[root@localhost ~]# yum -y install gcc pcre-devel openssl-devel zlib

#解压源码包并进入源码包路径
[root@localhost ~]# tar -xf nginx-1.20.0.tar.gz 
[root@localhost ~]# cd nginx-1.20.0/
[root@localhost nginx-1.20.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

#使用configure程序检查系统环境并指定安装参数
[root@localhost nginx-1.20.0]# ./configure --with-http_ssl_module  --with-file-aio  --with-http_realip_module
  
  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"


#make将源码包转换成二进制
[root@localhost nginx-1.20.0]# make

#make install安装源码包
[root@localhost nginx-1.20.0]# make install

[root@localhost nginx-1.20.0]# cd /usr/local/nginx/
[root@localhost nginx]# ls
conf  html  logs  sbin
# 源码包管理方式
代码语言:javascript复制
#启动nginx服务
[root@localhost nginx]# sbin/nginx

#netstat|ss命令用于查看系统中启动的端口信息
-a	显示所有端口信息
-n	以数字格式显示端口号
-t	显示TCP连接的端口
-u	显示UDP连接的端口
-l	显示服务正在监听的端口信息
-p	显示监听端口的服务名称是什么(也就是程序名)

#查看nginx服务端口信息
[root@localhost ~]# ss -anptul | grep nginx
tcp    LISTEN     0      128       *:80  #Nginx服务默认通过TCP 80 端口监听客户端请求

#查看系统所有服务占用的端口信息
[root@localhost nginx]# ss -ntlp 

[root@localhost nginx]# ss -anptul | grep sshd

[root@localhost nginx]# ss -anptul | grep vsftpd
# systemd 管理服务
  • systemd 是内核加载的第一个进程(PID=1),systemd 负责整个 Linux 系统的运行与服务控制,systemd 为用户提供 systemctl 命令来管理 RPM 包的服务,如:启动服务、重启服务、关闭服务、查看服务状态,服务随机自启
  • 服务的启动有两个阶段,一是系统开机时随着系统的启动而启动(随机自启),二是系统启动以后用户手动将服务启动
  • 常用命令:
    • systemctl start 程序名 #启动服务
    • systemctl restart 程序名 #重启服务
    • systemctl stop 程序名 #停止服务
    • systemctl enable 程序名 #设置服务随机自启
    • systemctl disable 程序名 #设置服务不随机自启
    • systemctl status 程序名 #查看服务状态
    • systemctl is-enabled 程序名 #查看服务是否被设置随机自启
代码语言:javascript复制
[root@localhost nginx]# yum -y install vsftpd

[root@localhost nginx]# rpm -ql vsftpd
...
/usr/sbin/vsftpd

#启动vsftpd服务
[root@localhost nginx]# systemctl start vsftpd

#查看服务运行状态
[root@localhost nginx]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2021-05-04 17:58:38 CST; 1min 7s ago
  Process: 14028 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 14030 (vsftpd)

#查看端口信息
[root@localhost nginx]# ss -anptul | grep vsftpd
tcp  LISTEN  0  32  :::21    :::*     users:(("vsftpd",pid=14030,fd=4))

#重启服务(用于对配置发生修改且立即生效时使用)
[root@localhost nginx]# systemctl restart vsftpd

#停止服务
[root@localhost nginx]# systemctl stop vsftpd

#启动服务并设置服务随机自启
[root@localhost nginx]# systemctl start vsftpd
[root@localhost nginx]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

#查看服务是否被设置随机自启
[root@localhost nginx]# systemctl is-enabled vsftpd
enabled  #随机自启

#设置服务不随机自启
[root@localhost nginx]# systemctl disable vsftpd
Removed symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service.

[root@localhost nginx]# systemctl is-enabled vsftpd
disabled  #不随机自启

[root@localhost nginx]# systemctl is-enabled sshd
enabled
# 课后作业

1. 请说出 RAID0、RAID1、RAID5、RAID10 的特点

RAID0:等量存储,至少由两块磁盘组成,同一个文档分散并行存储,提高数据的读写速度,没有冗余功能

RAID1:完整备份,至少由两块磁盘组成,同一个文档复制成多份分散存储,提高数据的安全性,没有提高读写速度

RAID5:至少由三块磁盘组成,同一份文档分散写入不同磁盘,每个磁盘中都有校验数据,允许坏一块磁盘的数据,校验数据会占用磁盘的三分之一存储空间

RAID10:至少需要 4 快磁盘组成,先将 4 快磁盘组成两组 RAID1,在将两组 RAID1 组成一个 RAID0,既能够提高数据读写速度,还有冗余功能,可用容量是总容量一半

2. 如何查看系统中的进程树,并显示每个进程的 PID

pstree -p

3. 如何查找到系统中 lisi 用户开启了哪些进程?

pstree -p lisi

4. 如何将进程放入后台运行?

&

5. 如何将后台运行进程调度到前台运行?

fg 进程编号

6. 如何查看后台进程?

jobs

7.kill 与 killall 命令的区别是什么?

kill 结束进程时,按照进程的 PID 结束

killall 结束进程时候,按照进程名字结束

8. 如何将 lisi 用户提出系统?

killall -9 -u lisi

9. 如何查看系统中登录失败的用户?

lastb

10. 如何查看系统中登录成功的用户?

last

11. 如何查询一个软件包在系统中安装了哪些文件与目录?

rpm -ql 软件包名

12. 如何查询 ifconfig 命令是由哪个软件包产生?

[root@localhost ~]# which ifconfig /usr/sbin/ifconfig [root@localhost ~]# rpm -qf /usr/sbin/ifconfig net-tools-2.0-0.24.20131004git.el7.x86_64

13. 如何查看一个软件包是否被安装在系统中?

rpm -q 软件包名

14. 如何卸载一个软件包?

卸载 RPM 包:rpm -e 软件包名

卸载源码包:直接删除源码包安装路径

15. 说明本地 yum 仓库每一行的配置含义

[仓库名字]

name = 仓库描述

baseurl = 仓库地址

enabled = 仓库状态(1/0,启用 / 不起用)

16. 源码包的安装过程大体步骤

下载源码包

安装源码包依赖关系

解压源码包,进入源码包路径

./configure 安装参数

make 编译

make install 安装

17. 如何查看一个服务占用的端口信息?

ss/netstat -anptul | grep 程序名称

18. 如何启动 vsftpd 服务?

systemctl start vsftpd

19. 如何查看 vsftpd 运行状态?

systemctl status vsftpd

20. 如何设置 vsftpd 服务随机自启?

systemctl enable vsftpd

21. 如何停止 vsftpd 服务?

systemctl stop vsftpd

0 人点赞