前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux命令小记

Linux命令小记

作者头像
程序员Leo
发布2023-08-07 21:51:50
5860
发布2023-08-07 21:51:50
举报
文章被收录于专栏:Java知识点Java知识点
# 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 写保护,将以只读方式挂载
代码语言: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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # Linux 显示行号设置
  • # 命令终端字段含义介绍
  • # Linux 系统基本概念
  • # 命令行编辑技巧
  • # 命令行一般命令格式
  • # 学习方法
  • # Linux 系统辨别目录与文件的方法
  • # ls 查看目录 / 文件命令
  • # Linux 系统文件类型
  • # Linux 系统下的归属关系
  • # Linux 基本权限的类别
  • # 课后练习
  • # mkdir 创建目录命令
  • # cd 切换工作目录命令
  • # 绝对路径与相对路径
  • # pwd 打印当前所在目录
  • # rmdir 删除空目录命令
  • # touch 创建文件命令
  • # cp 复制命令
  • # mv 移动命令
  • # cat 查看文件内容命令
  • # less 命令
  • # head 与 tail 命令
  • # rm 删除命令
  • # 软连接与硬连接
  • # Linux 命令的分类
  • # help 命令帮助手册
  • # man 获取命令帮助手册
  • # Linux 系统的运行级别
  • # 关机与重启
  • # 课后练习
  • # 计算机硬件组成部分
  • # Linux 系统目录介绍
  • # 查看内核信息
  • # 查看 CPU 信息
  • # 查看系统内存信息
  • # 查看网卡信息
  • # 查看主机名及修改主机名
  • # vi/vim 文本编辑器
  • # 修改网卡 IP 地址
  • # host 命令
  • # nslookup 命令
  • # alias 别名管理
  • # history 管理历史
  • # date 日期时间管理
  • # wc 统计命令
  • # 管道符
  • # 重定向操作
  • # echo 命令与 sleep 命令
  • # 课后练习
  • # 用户账号管理
  • # useradd 创建用户
  • # id 命令
  • # /etc/passwd 用户信息文件
  • # /etc/default/useradd 文件
  • # /var/spool/mail/ 用户邮件目录
  • # passwd 设置用户密码
  • # /etc/shadow 用户密码文件
  • # su 命令
  • # usermod 修改用户属性
  • # userdel 删除用户
  • # groupadd 添加新组
  • # /etc/group 组信息文件
  • # /etc/gshadow 组密码文件
  • # groupmod 修改组属性
  • # gpasswd 组管理命令
  • # groupdel 删除组
  • # chmod 权限管理
  • # umask 预设权限
  • # chown 归属关系管理
  • # SetUID 特殊权限
  • # SetGID 特殊权限
  • # Sticky BIT 特殊权限
  • # FACL 访问控制列表
  • # 课后练习
  • # 常用特殊符号的使用
  • # grep 文件内容过滤
  • # find 文件 / 目录查找命令
  • # 压缩与解压缩
  • # tar 打包工具
  • # 分区过程
  • # 磁盘类型介绍
  • # Linux 常用分区格式
  • # 文件系统类型详解
  • # 挂载
  • # lsblk 查看系统所有磁盘信息
  • # df 查看分区使用情况
  • # du 统计文件 / 目录大小
  • # blkid 查看设备属性
  • # MBR 分区格式
  • # 格式化文件系统
  • # mount 挂载
  • # umount 卸载
  • # 开机自动挂载
  • # GPT 分区格式
  • # LVM 逻辑卷
  • # 创建卷组
  • # 创建逻辑卷
  • # 格式化文件系统
  • # 扩展逻辑卷
  • # 扩展文件系统
  • # 扩展卷组
  • # 课后作业
  • # 删除逻辑卷
  • # 逻辑卷的缩减
  • # RAID 磁盘阵列
  • # RAID 级别
  • # 实现 RAID 方式
  • # 进程管理
  • # 查看进程树
  • # top 查看系统健康状态
  • # 检索进程
  • # 进程的前后台调度
  • # 杀死进程
  • # 用户登录分析
  • # Linux 软件包类型
  • # 开源软件包类型
  • # 源码包特点
  • # RPM 包特点
  • # RPM 管理软件包
  • # yum 软件包管理
  • # 设置 yum 源优先级
  • # 源码包安装方式
  • # 源码包管理方式
  • # systemd 管理服务
  • # 课后作业
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com