Linux--学习笔记

第一章、简单使用Linux

1. Linux系统基本概念

  • 多用户的系统:允许同时有很多个用户登录系统,使用系统里的资源
  • 多任务的系统:允许同时执行多个任务
  • 严格区分大小写:命令,选项,参数,文件名,目录名都严格区分大小写
  • 不管是文件还是目录都是以倒挂的树形结构,存在于系统的“/”根目录下,根目录是Linux系统的起点
  • 对于Linux系统而言,目录/文件没有扩展名一说,扩展名如:.sh(脚本文件) .conf(程序配置文件) .log(日志文件) .rpm(软件包).tar(压缩包)是易于用户和程序本身方便识别
  • Linux系统没有回收站

2.shell命令提示符

[root@localhost ~]#

解释:

  • root:当前登录系统用户名(root超级管理员)
  • localhost :当前主机名
  • :当前用户所在目录( 为家目录) ,root超级管理员家目录:/root
  • #: 当前用户身份是超级管理员

[student@localhost ~]$

  • $:当前用户身份为普通用户,普通用户的家目录:/home/用户名同名

3. 命令行一般命令格式

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

  • 命令:实现功能的指令
  • 选项:调整命令功能的
  •      短选项:-l -a -d -h(单个字母),短选项可以合并使用:-lad
  •      长选项:–help(单词),长选项通常是不能合并使用的
  • 参数:命令的执行对象,文件/目录/程序等
  • []:可选的
  • …:可以同时有多个

4.查看系统信息相关命令

  • 在终端窗口上输入命令,命令的格式: 主命令 参数 操作对象
查看当前linux的发行版信息:
[root@server ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)
# PlowRHEL9的代号

查看内核版本 :

[root@server ~]# uname -r
5.14.0-162.6.1.el9_1.x86_64
# 分析
5 - 内核版本.
14 - 主修订版本.
0-162 - 次要修订版本.
6.1 - 补丁版本.
x86_64 - 适用平台

查看shell的类型:

# 方法1
[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
# 方法2
[root@server ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

查看当前默认的shell:

[root@server ~]# echo $SHELL
/bin/bash

查看网卡信息以及获取ip地址:

 5.切换目录

  • 更改当前的工作目录,即切换目录
  • 绝对路径(以/开始的路径)
  • 相对路径(以当前工作目录开始的路径)
[root@server ~]# cd /
[root@server /]# cd /root
[root@server ~]# cd /home
[root@server home]# cd ~
[root@server ~]# cd /etc
[root@server etc]# cd ..
[root@server /]# cd .

6.通过文件详细属性辨别

  • 文件: - 开头
  • 目录: d 开头
  • 链接文件: l 开头
  • 硬件设备文件:b 开头
  • 字符设备文件:c 开头
  • 管道设备文件:p 开头
  • 套接字: s 开头

7. ls 查看目录/文件命令

  • ls命令(英文全拼:list):用于列出目录下内容及目录和文件详细属性信息
  • 命令格式:ls [-选项…] [参数…]

常用选项:
-a 显示目录下所有内容,包含隐藏的内容
-l 显示目录下的内容及详细属性
-h 以kB、MB、GB单位显示文件内容大小
-d 仅显示目录本身而不显示目录下的内容
-R 递归查看目录下所有内容(从头到尾)
-i 查看文件或目录的inod号

ls命令示例: 

#显示当前所在目录下的所有内容
ls
#查看根目录下所有内容
ls /
#查看/etc目录下所有内容
ls /etc
#查看/bin目录下所有内容
ls /bin
#查看/dev目录下所有内容
ls /dev
#查看目录下所有目录和文件,包括隐藏的内容
ls -a
#以长格式显示目录下所有内容,包括详细的属性信息
ls -l
-rw-------. 1 root root 1584 8月 27 16:41 anaconda-ks.cfg
解释
- --文件类型
1 --代表文件的引用次数
root --文件的所有者
root --文件的所属组
1584 --文件的大小,默认以字节为单位显示大小
8月 27 16:41 --文件最近一次的修改时间
anaconda-ks.cfg --文件名
#以长格式显示目录所有内容,以人性化的方式显示详细的属性信息
ls -l -h
#短选项合并使用
ls -lh
#以长格式显示目录所有内容,以人性化的方式显示详细的属性信息,包括隐藏
的内容
ls -lha
#以长格式显示根目录下所有内容,包括详细的属性信息
ls -l /
lrwxrwxrwx. 1 root root 7 3月 13 17:15 bin ->
usr/bin

 8.命令行快捷键

  • 键盘上下键调出历史命令
  • Ctrl + c:废弃当前命令行中的命令,取消当前执行的命令,例如ping、tail -f
  • Ctrl + l,clear:清屏
  • tab键自动补齐:可补齐命令、文件路径、文件名称、软件名
  • esc +. :将上一条命令参数变成当前命令的执行对象
  • Ctrl + a:将当前光标移动至行首
  • Ctrl + e:将当前光标移动至行尾
  • Ctrl + u 清空至行首
  • Ctrl + w 删除一个单词
  • exit,logout:退出系统(并不是关机,账号退出系统)

第二章、文件管理命令

1. mkdir 创建目录命令

mkdir(英文全拼:make directory)用于创建新目录

  • 命令格式:mkdir [-选项] 目录名
  • 常用选项:

        -p 递归创建多个目录(在一个不存在的目录下创建子目录)

  • 注意事项:

目录还是文件的名字,除了以“/”以外的任意名称,“/”根目录,路径分隔符
文件或目录的名字长度不能超过 255 个字符

mkdir命令示例:

#在当前所在目录创建test目录
mkdir test
#在当前所在目录同时创建多个目录
mkdir test1 test2 test3
#指定在/tmp目录下创建abc目录
mkdir /tmp/abc
#在指定目录下同时创建多个目录
mkdir /tmp/abc1 /tmp/abc2 /tmp/abc3
#在/opt目录下创建student,在当前目录创建student1..3
mkdir /opt/student student1 student2 student3
#mkdir默认无法在一个不存在的目录下创建目录,需要通过-p选项
mkdir /opt/xx/oo
mkdir: 无法创建目录"/opt/xx/oo": 没有那个文件或目录
mkdir /opt/a/b/c/d
mkdir: 无法创建目录"/opt/a/b/c/d": 没有那个文件或目录
#在/opt目录下递归创建目录
mkdir -p /opt/xx/oo
mkdir -p /opt/a/b/c/d
#ls -R选项可以递归目录下所有内容
ls -R /opt/a
/opt/a:
b
/opt/a/b:
c
/opt/a/b/c:
d

2. cd 切换目录命令

cd(英文全拼:change directory)切换目录

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

  • 提示:如果不指定目录名称,则切换到当前用户的家目录~
  • 常用快捷操作:
    • ~ 表示为家目录(可以直接cd)
    • … 表示上一级目录
    • 可在两路径之间来回切换

3. 绝对路径与相对路径

绝对路径:以/(根)为起点,到达你想去的目标目录称为绝对路径

相对路径:以当前路径为起点,到达你想去的目标目录(必须保证相对路径下存在这个目录)

4. pwd 打印当前所在目录

pwd(英文全拼:print work directory)显示当前所在目录完整路径名称

  • 命令格式:pwd [-选项]
# cd /opt/a/b/c/d
打印当前所在目录绝对路径
pwd

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

# cd /bin
# pwd
/bin
# cd /boot
# pwd
/boot
# ls

# cd /dev
# pwd
/dev
# ls

# cd /etc
# pwd
/etc
# ls

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

#“.”表示当前所在目录,对于cd命令而言作用不大
# cd .
# cd /opt/a/b/c/d
# pwd
/opt/a/b/c/d

#“..”切换到当前目录的上一级目录
# cd ..
# pwd
/opt/a/b/c

# cd ..
# pwd
/opt/a/b

# cd ..
# cd ..
# pwd
/opt

# cd ..
# cd ..
# cd
# ls

# cd /opt/a/b/c/d
# pwd
/opt/a/b/c/d

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

# pwd
/opt/a/b/c/d

# cd -
/etc/ym

# cd -
/opt/a/b/c/d

# cd -
/etc/yum

5. rmdir 删除空目录命令

rmdir(英文全拼:remove directory)删除空目录(了解即可)

  • 命令格式:rmdir [-选项] 目录名
#rmdir只能删除空目录,如果目录下存在数据无法删除
rmdir /opt/a
rmdir: 删除 "/opt/a" 失败: 目录非空

ls -R /opt/a
/opt/a:
b

/opt/a/b:
c

/opt/a/b/c:
d

/opt/a/b/c/d:
rmdir /opt/a/b/c/d
ls -R /opt/a
/opt/a:
b

/opt/a/b:
c

/opt/a/b/c:
rmdir /opt/a/b/c
ls -R /opt/a/b
/opt/a/b:

rmdir /opt/a/b
ls -R /opt/a
/opt/a:

rmdir /opt/a
ls /opt
rh student xx

rmdir /opt/
rmdir: 删除 "/opt/" 失败: 目录非空

6. touch 创建文件命令

touch 命令用于创建新的空白文件

  • 命令格式:touch [-选项] 文件名
#在当前路径创建空文件
touch hello

#在当前路径同时创建多个文件
touch t1 t2 t3 t4

#在指定路径同时创建多个文件
touch /opt/test1 /opt/test2 /opt/test3

#如果存在同名目录时,无法创建
mkdir test
mkdir: 无法创建目录"test": 文件已存在

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

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

ls /opt
rh student test1 test2 test3 xx

#对于目录而言,查看目录下的内容时,必须要有“/”,如果查看的是目录本
身,可有可无!
ls /opt
ls /opt/xx

#对于文件而言,后边绝对不能有“/”
ls /opt/test1
/opt/test1

ls /opt/test1/
ls: 无法访问/opt/test1/: 不是目录

7. cp 复制命令

cp(英文全拼:copy file)用于复制文件或目录,cp命令在复制时也可修改目录或文件名字

  • 命令格式:cp [-选项] 源文件 目标目录
  • 常用选项:
  • -p或-a #保留源文件属性不变拷贝(如:修改时间、归属关系、权限)
  • -r #复制目录(包含该目录下所有的子目录和文件)
  • 使用. 配合cp命令执行复制(.永远表示当前路径)
#复制当前目录文件到/opt目录(相对路径方式复制)
cp t1 /opt/
#复制文件到/opt目录(绝对路径方式复制)
cp /root/t2 /opt
#同时复制多个文件
cp t3 t4 /opt/
#创建目录
mkdir abc
#使用-r对目录执行复制
cp -r abc /opt
#同时复制多个目录
mkdir abc1 abc2 abc3
cp -r abc1 abc2 abc3 /opt
#复制hello文件到/opt并改名为hello.txt
cp hello /opt/hello.txt
#复制xxxx目录到/opt并改名xxoo
mkdir xxxx
cp -r xxxx /opt/xxoo
#使用“.”配合cp命令执行复制
cd /etc/sysconfig/network-scripts/
cp /root/t1 .
#操持属性不变复制文件
cp -p anaconda-ks.cfg /opt
cp:是否覆盖"/opt/anaconda-ks.cfg"? y
#对比以上两个文件的详细属性信息(最后一次修改时间)
ls -l anaconda-ks.cfg
-rw-------. 1 root root 1800 3月 13 17:34 anaconda-ks.cfg
#这两个操作代表什么意思?
cp -r test /opt/public #拷贝并改名
cp -r test /opt/public #拷贝到该目录下

8. mv 移动命令

mv(英文全拼:move file)用于移动文件或目录到其他位置,也可用于修改目录或文件名

  • 命令格式:mv [-选项] 源文件… 目标路径
  • 使用. 配合mv命令使用
#移动当前路径hello文件到/mnt目录
mv hello /mnt
#同时移动多个文件
mv t1 t2 t3 t4 /mnt
#移动/opt目录下文件到/mnt
mv /opt/test1 /opt/test2 /opt/test3 /mnt/
#移动目录
mv student1 /mnt
#移动文件并改名
mv hello.txt /media/hello
#移动目录并改名
mv test /media/testxx

9. cat 查看文件内容命令

cat (英文全拼:concatenate)命令用于查看文本文件内容

  • 命令格式:cat [选项] 文件名
  • 常用选项
    • -n #查看文件时以行号的形式显示文件内容
#查看文件内容
cat /etc/hosts

#查看网卡文件内容,网卡配置文件
cat /etc/sysconfig/network-scripts/ifcfg-ens32

#查看当前系统用户基本信息文件内容
cat /etc/passwd

#查看当前系统主机名配置文件内容
cat /etc/hostname

#查看当前系统版本信息文件内容
cat /etc/centos-release

#查看当前系统开机自动挂载配置文件内容
cat /etc/fstab

#查看系统组基本信息文件内容
cat /etc/group

#查看存放DNS配置文件信息
cat /etc/resolv.conf

#使用“-n”以行号形式显示文件内容
cat -n /etc/passwd
cat -n /etc/hostname
cat -n /etc/fstab
cat -n /etc/group
cat -n /etc/services

10. less命令

less 常用于查看内容量较大的文件,可以分页显示文件内容

  • 命令格式:less [-选项] 文件
  • 常用选项:-N #以行号形式显示文件内容

使用技巧 :

  • 键盘上下键逐行查看
  • f 向下翻一页
  • b 向上翻一页
  • /字符串 搜索指定字符串(n从上向下定位,N从下向上定位)
  • G 直接跳转到文件最后一行
  • gg 直接跳转到文件行首
  • #查看当前系统主机名配置文件内容
  • :1000 精准的定位到某一行(每次定位需要从第一行开始,否则会
  • 从当前行数开始进行定位
  • q 退出

11. head与tail命令

head命令:用来显示文件开头部分内容,默认显示文件开头 10 行内容

  • 命令格式:head [选项] 文件

  • 常用操作:

    • <行数> #指定显示的行数
head /etc/passwd
head /etc/fstab
head /etc/group
head /etc/hostname
head /etc/hosts
head /etc/sysconfig/network-scripts/ifcfg-ens32

#指定显示文件前多少行内容
head -5 /etc/passwd
head -6 /etc/passwd
head -15 /etc/passwd
head -20 /etc/passwd

tail命令:用来显示文件末尾部分内容,默认显示文件末尾 10 行内容

  • 命令格式:tail [选项] 参数
  • 常用操作:
    • <行数> 显示指定的行数
  • 常用选项:
    • -f #动态显示
tail /etc/passwd

#使用“-n”指定显示文件末尾多少行内容
tail -5 /etc/passwd
tail -5 /etc/sysconfig/network-scripts/ifcfg-ens32

#动态查看文件内容
touch t1
tail -f t1

#另开一个终端向文件写入内容
echo 123 > t1

12. rm删除命令

rm(英文全拼:remove)命令用于删除文件或者目录。

  • 命令格式:rm [-选项…] 目录或文件…
  • 常用选项
    • -f 强制删除
    • -r 删除目录
    • *特殊字符:系统常用符号,匹配所有!
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

#使用“-f”强制删除文件(无需确认,直接删除)
rm -f /mnt/hello

#同时强制删除多个文件
rm -f /mnt/t1 /mnt/t2 /mnt/t3 /mnt/t4

#删除目录
rm -r /opt/abc
rm:是否删除目录 "/opt/abc"?y

#同时删除多个目录
rm -r /opt/abc1 /opt/abc2 /opt/abc3
rm:是否删除目录 "/opt/abc1"?y
rm:是否删除目录 "/opt/abc2"?y
rm:是否删除目录 "/opt/abc3"?y

#同时强制删除多个目录
rm -rf /opt/home /opt/student /opt/xx /opt/xxoo

#rm命令在删除目录时,包含改目录及目录下所有数据全部删除
rm -rf /opt/

#使用“*”通配任意所有字符,删除/mnt目录下所有数据
rm -rf /mnt/*

13. 软连接与硬连接

Linux中的链接文件类似于windows中的快捷方式

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

软链接命令格式:ln -s 源文件路径 目标路径

注意:创建链接文件时一定要写绝对路径,哪怕是在当前路径下,也要写绝对路径

touch hello.soft

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

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

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/Especially_Allen/article/details/139699376

硬链接特点:硬连接不可以跨分区,不可以对目录进行链接,源文件删除后,链接文件仍然可用(类似与对文件做了一个备份)

  • 硬链接命令格式:ln 源文件路径 目标路径
#创建文件,并创建硬连接
[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":
无效的跨设备连接

第三章:系统常用管理命令

1. --help 命令帮助手册

–help命令长选项:用于查看系统中命令的帮助信息,包括使用方法、选项等…

  • 命令格式:命令 --help

#查看命令帮助手册(命令自带)
cat --help
ls --help

2. man 获取命令帮助手册

man 工具用于查看系统命令的帮助信息,包括使用方法、选项、使用例子等…,对比–help ,man 输出的信息更加详细

  • 命令格式:man [-选项] 命令
  • 常用快捷操作
    • 向下键向下移一行
    • 向上键向上移一行
    • f 向下翻一页
    • b 向上翻一页
    • /关键字 #搜索关键字,配合n(向下查询)、N(向上查询)
    • q 退出

man ls
man cat
man touch
man mkdir

第四章:Linux执行命令

1. vi/vim文本编辑器

Vim是从 vi 发展出来的一个文本编辑器,vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性

安装vim工具:yum -y install vim

vi/vim 共分为三种模式:命令模式、输入模式、底线命令模式(末行模式)

1 )vim 文件名 便进入了命令模式

2 )按键盘a/i进入输入模式

3 )按ESC退出输入模式(回到命令模式)

4 )按英文:(冒号)切换到底线命令模式,wq保存并退出

提示:若文件不存在,则新创建文件并编辑,若文件以存在,则打开文

件并编辑

命令模式下常用的指令:

  • a 切换到输入模式,当前光标向后移动一个位置
  • i 切换到输入模式,当前光标不会移动位置
  • o 切换到输入模式,在当前光标所在的行下,另起一个新行
  • x 在命令模式下删除当前光标所在的单个字符
  • C 删除当前光标及光标后所有内容并进入输入模式
  • u 恢复上一次修改内容,一次恢复一个操作,可多次恢复,直到恢复本次操作初始状态为止
  • ctrl +r 恢复到本次操作的前一个步骤
  • $ 将光标移动至行尾
  • 0 (零) 将光标移动至行首
  • dd 删除一整行内容,配合数字可删除指定范围内的行
  • yy 复制当前行,配合数字可以同时复制多行
  • p 粘贴在当前的光标下一行
  • r 替换字符,一次只能替换一个字符,可以替换多次

底线命令模式常用的指令:

  • :w 保存
  • :q 退出
  • :wq 保存并退出
  • :x 保存并退出
  • ZZ 保存并退出(无需切换到底线命令模式)
  • :q! 退出不保存
  • :wq! 强制保存并退出,适用于只读文件(没有写权限,且只有root可以这样操作)
  • :set nu 以行号形式显示文件内容
  • :set nonu 取消行号显示
  • :行号 快速跳转到指定行
  • :%s 替换文件内容,g替换全文,默认只替换每一行匹配到的第一个关键字(数字s 指定替换的行)
  • G 快速跳转到文件的最后一行
  • gg 快速跳转到文件的行首/关键词 搜索指定的字符,n从上向下快速定位关键字,N从下向上快速定位关键字
  • :nohl 取消高亮显示

2. history 管理命令历史

history命令用于显示历史记录和执行过的命令,登录系统时会读取.bash_history历史文件中记录下的命令,当退出时,会自动保存到历史命令文件,该命令单独使用时,仅显示历史命令。历史命令默认只能存储 1000 条,可以通过/etc/profile文件修改。

  • 命令格式:history [-选项] [参数]
  • 常用选项:
    • -a 追加本次新执行的命令至历史命令文件中
    • -d 删除历史命令中指定的命令
    • -c 清空历史命令列表
  • 快捷操作:
    • !历史命令的编号 #调用命令历史
    • ! 历史命令名称 #调用历史命令中最近执行的命令
查看历史命令
# history

查看记录历史命令文件
# cat .bash_history

将历史命令同步至历史命令配置文件中
# history -a

删除历史命令中655条命令历史
# history -d 655
# history -d 637

清空缓存中所有历史命令
# history -c

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

快速调用历史命令中第N条
# !3

调用历史命令中以cat开头的命令(就近原则)
# !cat

重复执行上一条命令
# !!

历史命令默认只能记录1000条,可以通过/etc/profile文件修改
# vim /etc/profile
...
46 HISTSIZE=100

3. date日期时间管理

  • date命令用于显示或设置系统日期与时间
  • 命令格式:date [+格式符] #查看系统日期时间
  • 命令格式:date [-选项] #设置日期时间
  • 常用选项:-s 设置日期时间
  • 格式符:
  1. +%Y 年份
  2. +%B 月份
  3. +%d 日
  4. +%H 时
  5. +%M 分
  6. +%S 秒
  7. +%F 年-月-日
  8. +%X 时:分:秒
显示系统日期与时间
# date
提示:CST表示时区(亚洲上海)
只显示年分
# date +%Y

只显示月份
# date +%B

只显示几号
# date +%d

只显示小时
# date +%H

只显示分钟
# date +%M

只显示秒
# date +%S

显示年月日
# date +%F

显示时分秒
# date +%X

显示年月日时分秒
# date +%F%X

可以自定义分隔符“-”
# date +%F-%X
# date +%F:%X

修改系统年月日
# date -s 2020-03-28

修改系统时分秒
# date -s 17:16:00

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

cal显示日历
# 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

显示指定的全年月份
# cal 2021

#修改系统时区(注意大写的字母,严格区分大小写)
timedatectl set-timezone Asia/Shanghai

4. wc统计命令

wc 用于统计文件的字节数、行数,并将统计的结果输出到屏幕

  • 命令格式:wc [-选项] 文件名
  • 常用选项:
    • -l 统计行数

# wc /etc/passwd
43 87 2259 /etc/passwd
行数 单词 字节 文件名

统计文件字节数
# wc -c /etc/passwd
2259 /etc/passwd

统计文件行数
# wc -l /etc/passwd
43 /etc/passwd

# wc -l /etc/fstab
11 /etc/fstab

5. 管道符

管道符 | 将命令的输出结果交给另外一条命令作为参数继续处理

查看/etc/passwd文件前6-10行内容,其余数据不要显示
# cat -n /etc/passwd|head|tail -5
# ifconfig ens32 |head -2
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu
1500
inet 192.168.0.40 netmask 255.255.255.0
broadcast 192.168.0.255

6. grep文件内容过滤

grep用于查找文件中符合条件的字符串,并把匹配到的字符串的行打印出来

  • 命令格式:grep [-选项] “查找条件” 目标文件
  • 常用选项:
    • -n #以行号形式输出
    • -i #忽略字符串大小写
    • -v #排除匹配的内容
    • ^ 常用的特殊符号,在grep中可用来匹配以什么开头的关键字
    • $ 常用的特殊符号,在grep中可用来匹配以什么结尾的关键字
    • ^$ 在grep中可用来匹配空行
过滤包含root关键字的行
# grep root /etc/passwd

以行号形式过滤包含root关键字的行
# grep -n root /etc/passwd

忽略大小写过滤
# grep -ni user /etc/passwd

排除包含#号的行
# grep -n -v '^#' /etc/fstab

过滤以root开头的行
# grep ^root /etc/passwd

过滤以root结尾的行
# grep -n 'root$' /etc/passwd
# grep -n 'bash$' /etc/passwd

通过grep过滤一个文件中有效的配置
# egrep -nv "#|^$" /etc/login.defs

7. 重定向操作

将前面命令的输出结果,写入到其他的文本文件中

重定向的表示符号:

  • > 覆盖重定向,只收集正确的命令结果
  • >> 追加重定向输出,只收集正确的命令结果
  • << 输入重定向,需要从命令行中获取内容,将内容写入到文件中
  • 2> 只收集错误的输出结果(覆盖)
  • 2>> 只收集错误的输出结果(追加)
  • &> 正确错误都收集(覆盖)
  • &>> 正确错误都收集(追加)
将命令的输出结果以覆盖的方式重定向到文件中,(>附带创建文件功能)
ping -c2 www.baidu.com > up.txt
ping -c2 www.dhjgdhjg.com > up.txt

重定向输入(>覆盖)以EOF开始,以EOF结束,中间写入内容
# cat > xxxx.txt <<EOF
hello
Linux
EOF
重定向输入(需要配合重定向输出一起使用)
# cat >> xxxx.txt <<EOF
> 你好
> EOF

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

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

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

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

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

# ls /etc/passwd &> /opt/pass.bak
# cat /opt/pass.bak

# free -h &> /opt/pass.bak
# cat /opt/pass.bak

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

以覆盖方式将正确输出与错误输出重定向到不同文件中
# ll -d /root/ bcd >a.txt 2>b.txt

# cat a.txt
dr-xr-x---. 24 root root 4096 3月 28 18:07 /root/

# cat b.txt
ls: 无法访问bcd: 没有那个文件或目录

8. echo命令

echo命令用于输出指定的字符串和变量

  • 命令格式:echo [-选项] [参数]

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bi
n

# echo 你好 > hello

第五章、Linux文件类型和根目录结构

1.Linux文件类型

  • 文件: - 开头
  • 目录: d 开头
  • 链接文件: l 开头
  • 硬件设备文件:b 开头
  • 字符设备文件:c 开头
  • 管道设备文件:p 开头
  • 套接字: s 开头

2. Linux系统目录介绍

  • /(根):系统所有数据都存放在根目录下
  • /bin:存放用户使用的系统管理命令
  • /boot:存放Linux系统内核及引导系统程序
  • /dev:存放硬件设备的目录,如硬盘、光驱设备、驱动程序等等 ( 记住 )
  • /etc:存放服务的配置文件,用户信息文件 ( 记住 )
  • /root:超级管理员的家目录( 记住 )
  • /home:普通用户的家目录( 记住 )
  • /lib:存放系统中的程序运行所需要的共享库及内核模块文件( 类似像windows的C++库)
  • /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: 额外安装的软件存放目录,与/opt目录一样 ( 记住 )
    /usr/sbin:该目录与/sbin目录相同,存放用户可执行的二进制程序文件
    /usr/share: 放置只读架构的杂项数据文件
    /usr/src:一般软件源代码建议存放该目录下

第六章:用户账号管理

1. useradd创建用户

useradd 命令用于创建新的用户

命令格式:useradd [-选项] 用户名

常用选项:

  • -u 指定用户UID(用的不多)
  • -d 指定用户家目录(了解)
  • -c 用户描述信息
  • -G 指定用户附加组
  • -s 指定用户的解释器程序
# useradd user1

创建用户并指定用户的UID
# useradd -u 1100 user2

创建用户并指定用户的家目录
# useradd -d /opt/user3 user3

创建用户并指定UID与用户描述信息
# useradd -u 1400 -c yunwei user4

创建test组
# groupadd test

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

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

/sbin/nologin :禁止用户登录系统
# useradd -u 1800 -c test -s /sbin/nologin user8
user8:x:1800:1800:test:/home/user8:/sbin/nologin

2. /etc/passwd用户信息文件

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

# vim /etc/passwd

组:

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

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

用户—>bash程序(解释器)—>内核—>硬件

3. /etc/default/useradd文件

/etc/default/useradd 存放用户默认值信息(了解内容)

# 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 #是否建立邮箱

4. /var/spool/mail/用户邮件目录

# ls /var/spool/mail/
laowang lisi rpc user1 user2 user3 user4 user5 user8 xiaozhang

安装查看邮件的工具,查看邮件
# yum -y install mailx
# mail

5. passwd设置用户密码

passwd命令用于设置用户密码(重点掌握)

  • 命令格式:passwd [-选项] [用户名]

密码规范:长度不能少于 8 位,复杂度包含、数字、字母(包含大小写)、殊字符

密码规范:本次修改的密码不能和上次修改的密码太相近

  • 密码强度设置文件:

  • 常用选项

    • -S 查看密码信息
    • -l 锁定用户密码
    • -u 解锁用户密码
    • -d 删除密码
    • –stdin 通过管道方式设置用户密码
  • 非交互设置用户密码

    命令格式:echo ‘密码’ | passwd --stdin 用户名

    设置用户密码
    # passwd user1
    更改用户 user1 的密码 。
    新的 密码:1
    无效的密码: 密码是一个回文
    重新输入新的 密码:1
    passwd:所有的身份验证令牌已经成功更新。
    
    查看用户密码信息
    # 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:所有的身份验证令牌已经成功更新。
    

    6. /etc/shadow用户密码文件

    用户的密码信息存放在/etc/shadow文件中,该文件默认任何人都没有任何权限(不包括root)

# vim /etc/shadow
...
第一字段:用户名
第二字段:密码加密字符串,加密算法为SHA512散列加密算法,如果密码位是“*”或者“!!”表示密码已过期
第三个字段:密码最后一次修改日期,日期从1970年1月1日起,每过一天时间戳加1
第四个字段:密码修改的期限,如果该字段为0表示随时可以修改密码,例如:
该字段为10,代表10天之内不可以修改密
第五个字段:密码有效期
第六个字段:密码到期前警告时间(和第五个字段相比)
第七个字段:密码过期后的宽限天数(和第五个字段相比)
第八个字段:账号失效时间,日期从1970年1月1日起
第九个字段:保留

chage命令用于修改/etc/shadow文件信息,修改文件内容第三个字段(密码
最后一次修改时间)
# chage -d 0 user2

7. su命令

su命令用于切换当前用户身份到其他用户身份

  • 命令格式:su [-选项] [用户名]
# su - user1

8. usermod修改用户属性

usermod 命令用于修改已存在用户的基本信息

  • 命令格式:usermod [-选项] 用户名
  • 常用选项:
    • -u 修改用户UID
    • -d 修改用户家目录(将原有的家目录在移动到修改后的目录中)
    • -c 修改用户描述信息
    • -G 添加用户附加组
    • -s 修改用户shell

修改用户UID(用户如果以登录系统,不允许修改)
# usermod -u 1111 user1
# id user1
uid=1111(user1) gid=1001(user1) 组=1001(user1)

修改用户描述信息
# usermod -c xxoo@163.com user8

修改用户的附加组
# usermod -G test user8
# id user8
uid=1800(user8) gid=1800(user8) 组=1800(user8),1401(test)

修改用户的解释器
# usermod -s /bin/bash user8

9. userdel删除用户

userdel 用于删除给定的用户以及与用户相关的文件,该命令若不加选项仅删除用户账号,不删除用户的家目录

  • 命令格式:userdel [-选项] 用户名
  • 常用选项:
    • -r 删除用户同时,并删除用户的家目录

#删除用户,仅删除账号,不删除家目录
[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

第七章:组管理

1. groupadd添加新组

groupadd 用于创建一个新的工作组,新组的信息将被添加到/etc/group文

件中

  • 命令格式:groupadd [-选项] 组名

  • 常用选项:

    • -g GID #指定组的GID

 # groupadd -g 1555 student

# cat /etc/group

2. id命令

id 命令用于查看系统用户和用户所在组的信息

  • 命令格式:id [-选项] [用户名]
[root@localhost ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1)

3. /etc/group组信息文件

组信息存放在/etc/group文件中(了解)

# vim /etc/group
root:x:0:
#每个字段含义解释:组名:组密码占位符:GID:组中附加用户

4. /etc/gshadow组密码文件

组密码信息存放在/etc/gshadow文件中(了解)

# vim /etc/gshadow
root:::
#每个字段含义解释:组名:组密码:组内管理员:组中附加用户

5. groupmod修改组属性

groupmod 用于修改指定工作组属性

  • 命令格式:groupmod [-选项] 组名
  • 常用选项:
    • -g GID #修改组的GID
    • -n 新组名 #修改组名
# groupmod -n stugrp student
# groupmod -g 1666 stugrp

6. gpasswd组管理命令

用于将用户添加到组或从组中删除

命令格式:gpasswd [-选项] 用户名 组名

  • 常用选项:
    • -a #将用户添加到工作组
    • -d #将用户从工作组中删除
创建用户
# useradd hary
# useradd tom
# useradd natasha
# useradd kenji
# useradd jack

用户加入到组
# gpasswd -a hary stugrp
# gpasswd -a tom stugrp
# gpasswd -a kenji stugrp
# gpasswd -a natasha stugrp
# gpasswd -a jack stugrp

查看组文件信息
# grep yunwei /etc/group
stugrp:x:1666:hary,tom,kenji,natasha,jack

将用户从组中删除
# gpasswd -d tom stugrp
# gpasswd -d hary stugrp
# gpasswd -d jack stugrp
# gpasswd -d kenji stugrp
# cat /etc/group

7. groupdel删除组

groupdel 用于删除指定工作组

  • 命令格式:groupdel 组名
# groupdel stugrp

 第八章:基本权限管理

1.chmod权限管理

       权限的重要性:任何一个系统,权限都是非常重要的,如果没有权限控制系统用户的话,那系统的安全就没办法保障,特别是对于Linux这种多用户的系统来讲,通常一台机器有很多个用户都在使用的话,那我们就应该通过权限去控制这些用户在系统的操作。

权限类别:

  • r 读取:可以查看文件的内容
  • w 写入:可以对文件的内容进行增删改
  • x 执行:可以运行该文件(程序文件、脚本)
  • - 没有权限(它在那个位置,就表示没有对应的权限)

归属关系介绍:

  • 归属关系:u 所有者 g 所属组 o 其他人

chmod(英文全拼:change mode)设置用户对文件的权限

  • 命令格式:chmod [-选项] 归属关系±=权限类别 文件…
  • 不常用选项:
    • -R 递归修改目录下所有的子文件与子目录的权限与父目录相同

操作符:+ 添加权限,- 去除权限,= 重新定义权限

权限数字表示:r ---- 4   w ---- 2   x ---- 1     0 ------没有权限

#查看文件详细属性
[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

总结:用户对文件拥有rwx权限(针对的是文件的内容)
r:查看文件内容
w:对文件内容拥有增删改权限,并不能删除文件,删除文件取决于对文件所在
的目录有没有rwx权限
x:可以运行该文件

2.用户对目录拥有rwx权限
r:查看目录下内容
w:在该目录创建文件,修改文件属性,删除任何用户的文件(包括root)
x:可以切换到该目录

2.umask预设权限

umask用于显示或设置创建目录的权限掩码

  • 命令格式:umask [-p] [-S] [mode]
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

3.chown归属关系管理

chown(英文全拼:change owner)用于设置文件的所有者和所属组关系

#创建文件
[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

第九章:特殊权限管理 

1.SetUID特殊权限

SetUID(SUID):对于一个可执行的文件用了SUID权限后,普通用户在执行该文件后,临时拥有文件所有者的身份,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有身份。

  • SetUID权限会附加在所有者的 x 权限位上,所有者的 x 权限标识会变成 s
  • 设置SetUID命令格式:chmod u+s 文件名

SetUID应用案例:

#搜索命令绝对路径
[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

2.SetGID特殊权限

  • SetGID(SGID):当对一个可执行的程序文件设置了SGID后,普通用户在执行该文件时临时拥有其所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份

  • 当对一个目录作设置了SGID权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所属组相同

  • SetGID权限会附加在所属组的 x 权限位上,所属组的 x 权限标识会变成 s

  • 设置SetGID命令格式:chmod g+s 文件名

[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

3.Sticky BIT特殊权限

Sticky BIT(SBIT):该权限只针对于目录有效,当普通用户对一个目录拥有rwx权限时,普通用户可以在此目录下拥有增删改的权限,应为普通用户对目录拥有rwx权限时,是可以删除此目录下的所有文件。

  • 如果对一个目录设置了SBIT权限,除了root可以删除所有文件以外,普通用户就算对该目录拥有rwx权限,也只能删除自己建立的文件,不能删除其他用户建立的文件
  • SBIT权限会附加在其他人的 x 权限位上,其他人的 x 权限标识会变成 t
  • 设置SBIT命令格式:chmod o+t 目录名

#为目录设置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": 不允许的操作

4.ACL访问控制列表

ACL(Filesystemctl Access Control List)文件系统访问控制列表:利用文件扩展属性保存额外的访问控制权限(单独为每一个用户量身定制一个权限)。

  • 命令格式:setfacl 选项 归属关系:用户名:权限 文档
  • 常用选项:
    • -m 设置权限
    • -x 删除指定用户权限
    • -b 删除所有用户权限
#为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::---

 第十章:find查找

find 命令根据预设的条件递归查找文件或目录所在位置

命令格式:find 查找路径 查找条件 1 查找条件2 … [-exec 处理命令 {} ; ]

  • –exec或者| xargs 可接额外的命令来处理查找到结果
  • {} 代表find查找到的内容被放置{}中
  • ; 代表额外处理命令结束

常用查找条件:

  • -type #按类型查找(f文件 d目录 l链接文件)
  • -name “文件名” #按名称查找
  • -iname #按名称查找且忽略大小写
  • -size #按文件大小查找(k、M、G + 大于 - 小于)
  • -a (and并且)两个条件同时满足
  • -o (or或者)两个条件满足任意一个即可
  • -user #按用户名查找
  • -mtime #按日期查找(+ 代表多少天之前 - 代表多少天之内, 0 代表 24 小时之内)

find应用案例: 

[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 -execcp {} /opt \;
  • 查找/etc/目录下以.conf结尾的文件(只能在/etc这一层目录去查找)

ls /etc/*.conf

  • 查找/etc/目录下以.conf结尾的文件(包含所有的子目录)

find /etc/ -name “*.conf”

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

find /var/log/ -name messages -type f -exec cp /dev/null {} ;

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

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 [选项…] 文件名
  • bzcat [选项…] 文件名
  • xzcat [选项…] 文件名
[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

#解压文件
# xz -d services.xz

tar打包工具

tar命令对文件/目录打包,tar命令打出来的包是以文件的格式存在,使用tar 程序打出来的包常称为 tar 包,tar 包文件通常都是以 .tar 结尾

tar 命令格式:tar 选项 打包后名字 被打包文件

  • 常用选项:

    • -c 创建打包文件

    • -f 指定打包后的文件名称

    • -z 调用gzip压缩工具 -J 调用xz压缩工具 -j 调用bzip2压缩工具

    • -t 列出打包文档内容

    • -x 解压打包文件

    • -C 指定解压路径

    • -v 显示详细信息

tar命令应用案例:

#同时打包多个文件/目录并使用gzip格式压缩
# tar -czf xxx.tar.gz /etc/passwd /etc/fstab /home

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

#同时打包多个文件/目录并使用xz格式压缩
# 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”获得更多信息。

#不解压查看压缩包数据
# tar -tf xx.tar.xz
etc/hostname

#将压缩包数据解压到/tmp目录
# tar -vxf xx.tar.xz -C /tmp
[root@localhost opt]
#同时打包多个文件/目录并使用bzip2格式压缩
# tar -cjf abc.tar.bz2 /etc/hostname /etc/group /home

#解压缩
# tar -xf abc.tar.bz2 -C /media/

第十二章:管理Linux软件包和进程 

1.rpm管理工具

标准格式:rpm   -参数   软件包名

-i, --install        安装软件包

--nodeps         不验证软件包依赖

--force             安装时提示已安装则重新覆盖安装

-U                    软件包升级

-e                     软件包卸载

实例演示:

1.下载Linux版qq:

 2.发现缺少依赖性:

3.解决依赖性问题: 

下载安装依赖:

安装qq:

2.YUM/DNF管理工具 

功能:在线下载、 安装、 卸载、 升级rpm软件包

自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐 个或者手工地去安装每一个rpm包。

系统会去读取 /etc/yum.repos.d/ 目录下的 .repo 结尾的文件,从该文件中读取以下内容实现装包: 

包含各种rpm安装文件的软件仓库(rhel8开始有两个仓库,rhel7只有一个仓库)

  • BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库
  • AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库

建立本地源:

验证能否装包成功:

第十三章: 管理进程

1.进程概念

2.进程暂停

  • 在 Linux 中,Ctrl + Z是一个用于将当前正在前台运行的任务暂停(挂起)的快捷键组合。当你在终端中运行一个程序(例如一个长时间运行的命令、一个文本编辑器或者一个编译过程)时,按下Ctrl + Z,这个程序会被暂停,它的状态会被保存,并且控制权会交回到终端的命令提示符下。
  • 在 Linux 中,fg是一个命令,它用于将后台作业(process)移到前台运行。当一个进程被放入后台(例如通过&符号或者bg命令)后,可以使用fg命令把它重新调回前台运行,这样用户就可以和这个进程进行交互,就像它最初在前台运行一样。
  • gedit 是 Linux 系统下的一个文本编辑器。它拥有图形用户界面(GUI),这使得它在操作上比较直观,对于习惯使用鼠标和图形化操作环境的用户来说很容易上手。它类似于 Windows 系统中的 “记事本”,但功能更加强大。例如,它支持语法高亮显示,这对于编写代码的用户非常有用。当编辑代码文件(如 C、Python 等编程语言的文件)时,gedit 能够根据不同的编程语言语法规则,以不同的颜色显示代码中的不同元素,比如关键字用一种颜色,变量用另一种颜色等,这样可以帮助用户更方便地检查代码语法错误。
  • 在 Linux 中,bg是 “background” 的缩写,它是一个用于将已暂停(使用Ctrl + Z暂停)的作业放到后台继续运行的命令。这样可以让用户在不终止该作业的情况下,继续在终端中执行其他命令。

实例: 

3.进程查看 

1.图形化查看进程:

      

 2.ps命令

作用:ps显示某个时间点的程序运行情况

格式:ps    -参数

参数:

unix风格:

-a :只显示运行在当前shell的进程

-u :显示指定用户进程

-e :显示所有进程,包括没有控制终端的进程

-l :长格式显示,会显示更详细的进程

-w:宽行显示,可以使用多个 w 进行加宽显示

-f:做一个更完整的输出

bsd风格:

x:   无字符终端进程
a:   有字符终端进程

u:   利用用户信息进行归类

f:    显示进程的层级关系

GNU风格:

ps  -o %cpu,%mem,command

ps  ax  --sort   +/-%cpu   -o   %cpu,pid

ps  ax  --sort   +/-%mem  -o  %cpu,pid

3.快速查看进程

4.top命令

格式:
top [-d 数字] | [-bnp]
参数:
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5
-b:以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。
-n:与-b搭配,进行几次top的输出结果
-i:不显示闲置或者僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险
-p:指定某些个PID来进行查看检测

 4.kill命令

作用:
强制结束进程

格式:

kill      pid
killall  进程名

 示例:

注意指令差异:

第十四章:磁盘管理

1.概念

硬盘是由一片或多篇带有磁性的铝合金制的盘片构成,是一种大容量、永久性的外部存储设备
组成:盘片、马达驱动、缓存、控制电路、接口

2. 硬盘分区类型

2.1 MBR分区

概念
  • MBR(Master Boot Record,主引导记录)包含硬盘一系列参数和一段引导程序,硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序

  • MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存

  • MBR位于整个硬盘的0磁道0柱面1扇区

    • 主引导扇区512B

    • MBR=446B

    • MPT(Disk Partition Table硬盘分区表)=64B

    • 最后两个字节“55,AA”是分区的结束标志

MBR分区类型
  • 主分区(primary partition)

    • 一块硬盘最多4个主分区,主分区不可以再进行二次分区

    • 主分区可以直接建立文件系统,存放数据

    • 可以用来引导、启动操作系统

  • 扩展分区(extended partition)

    • 一块硬盘最多一个扩展分区,加主分区最多4个

    • 不能创建文件系统

    • 可以划分逻辑分区

  • 逻辑分区(logical partition)

    • 可以创建文件系统,存放数据

    • 逻辑分区的数量没有限制。

  • 支持的分区数量:4个主分区或者3个主分区1个扩展分区

  • 为什么MBR最多只能有4个主分区: 因为分区表占据64个字节,其中每个分区的信息占用16个字节,分区表里面可以记录四个分区信息描述。

 

3. GPT分区

产生原因
  • MBR分区表中最高支持磁盘容量为2.2TB

  • MBR分区表中,没有备份机制,分区表被干掉则磁盘全部死光光

  • MBR中存储开机管理程序的容量只有446B,无法存储较多内容

概念
  • GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式

  • GPT分区表使用LBA(Logical Block Address)逻辑区块地址来记录磁盘引导、分区的相关信息

    • LAB区块大小(512B-4KB),默认为512B

    • LAB区块共68个,前34个记录分区信息,后34个进行备份

  • 不在区分主分区与其它分区,默认情况下,GPT最多可支持128个分区

  • 支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)

  • GPT分区机制在较老的BIOS中不能识别,则提供了一个UEFI (Unified Extensible Firmware Interface)统一的可扩展固件接口,来取代传统的BISO,又称为UEFI BIOS,UEFI使用C语言编写,支持较多的平台

4.lsblk命令

作用:查看磁盘信息
格式:

lsblk  参数  设备名

参数:

-d :仅列出硬盘本身信息,不显示分区信息
-f :列出磁盘的内的文件系统名称
-i :   使用ASCII码格式输出信息
-t :显示磁盘的详细信息
-p :显示设备完整名称

示例:
[root@localhost ~]# lsblk -d
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda    8:0    0  100G  0 disk
sdb    8:16   0   20G  0 disk
sr0   11:0    1 10.3G  0 rom  /run/media/root/RHEL-9-4-0-BaseOS-x86_64
[root@localhost ~]# lsblk -f
NAME FSTYPE FSVER LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
│    vfat   FAT32       E314-A29B                               591.8M     1% /boot/efi
├─sda2
│    xfs                cfd38652-aa11-45c4-9708-d96e5138566a    664.3M    31% /boot
└─sda3
     LVM2_m LVM2        G4w5JU-hBWI-h3qw-tLXh-EB6y-ua1i-xbCnYZ
  ├─rhel-root
  │  xfs                b29a2aff-ec1b-4211-970d-e85b98fc40db     58.1G     8% /
  ├─rhel-swap
  │  swap   1           68dff9e0-5526-402a-89d1-692b4bce6cef                  [SWAP]
  └─rhel-home
     xfs                b7473a6d-73f1-4526-b71c-736c60d2f35f     30.7G     1% /home
sdb
sr0  iso966 Jolie RHEL-9-4-0-BaseOS-x86_64
                        2024-04-12-03-32-56-00                       0   100% /run/media/root/RHEL-9-4-0-BaseOS-x86_64
[root@localhost ~]# lsblk -p
NAME                    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
/dev/sda                  8:0    0  100G  0 disk
├─/dev/sda1               8:1    0  600M  0 part /boot/efi
├─/dev/sda2               8:2    0    1G  0 part /boot
└─/dev/sda3               8:3    0 98.4G  0 part
  ├─/dev/mapper/rhel-root
  │                     253:0    0 63.5G  0 lvm  /
  ├─/dev/mapper/rhel-swap
  │                     253:1    0  3.9G  0 lvm  [SWAP]
  └─/dev/mapper/rhel-home
                        253:2    0   31G  0 lvm  /home
/dev/sdb                  8:16   0   20G  0 disk
/dev/sr0                 11:0    1 10.3G  0 rom  /run/media/root/RHEL-9-4-0-BaseOS-x86_64
[root@localhost ~]#
扩展: 

 1. df   -h   : df -h中的df命令用于查看磁盘空间使用情况,-h选项是以 “人类可读(human - readable)” 的格式显示磁盘空间大小。这种格式会自动选择合适的单位(如 K、M、G 等)来显示容量,让用户能够直观地理解磁盘空间的使用情况

  df   -H  : df -H同样是用于查看磁盘空间信息。其中-H选项表示以 “1000 为基数” 的人类可读格式来显示磁盘空间使用情况。

例如,一个文件系统的块大小为 1048576 字节:

  • 使用df -h显示可能为 1M(因为 1048576 字节按照 1024 进制换算约为 1M)。
  • 使用df -H显示可能为 1.05M(因为 1048576 字节按照 1000 进制换算约为 1.05M)

2. cat /proc/partitions  :是用于查看系统中磁盘分区相关信息的命令。

  • 主设备号(major):设备的主设备号用于标识设备驱动程序。不同类型的设备(如硬盘、软盘等)通常有不同的主设备号,它帮助内核确定使用哪种驱动程序来处理该设备的请求。
  • 次设备号(minor):次设备号用于在同一类型的设备中区分不同的设备实例。例如,在一个有多个磁盘分区的系统中,主设备号可能相同,但每个分区的次设备号不同。
  • 分区的块数(blocks):这表示该分区所包含的磁盘块的数量。磁盘块是磁盘存储数据的基本单位,其大小通常是由文件系统格式化时确定的。了解分区的块数可以帮助估算分区的容量大小。
  • 分区名称(name):显示分区的设备名称,如sdX(SCSI、SATA、USB 等设备)或hdX(传统 IDE 设备),其中X可以是ab等字母,表示不同的设备或分区。
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8        0  104857600 sda
   8        1     614400 sda1
   8        2    1048576 sda2
   8        3  103192576 sda3
  11        0   10825920 sr0
   8       16   20971520 sdb
 253        0   66576384 dm-0
 253        1    4108288 dm-1
 253        2   32505856 dm-2

 5.磁盘分区命令

5.1 使用fdisk命令管理分区

作用
  • fdisk命令工具默认将磁盘划分为==MBR==格式的分区

  • 命令:fdisk 设备名

  • 注意:fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可

指令作用指令作用
a调整磁盘的启动分区p显示当前磁盘的分区信息
d删除磁盘分区t更改分区类型
l显示所有支持的分区类型u切换所显示的分区大小单位
m查看所有指令的帮助信息n创建新分区
q不保存更改,退出fdisk命令w把修改写入磁盘分区表,然后退出fdisk命令
g新建一个空的GPT分区表o新建一个空的DOS分区表

5.2 使用gdisk管理分区

注意:gdisk命令针对GPT分区格式,若在MBR分区格式下进行添加分区,则所有数据会全部丢失,切记:一块硬盘中fdisk与gdisk不能混用

格式:gdisk 设备名   指令与fdisk相同

示例: 
[root@localhost ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.7

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): N
Partition number (2-128, default 2):
First sector (34-41943006, default = 4196352) or {+-}size{KMGTP}:
Last sector (4196352-41943006, default = 41943006) or {+-}size{KMGTP}: +3G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3):
First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}:
Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +4G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): wq

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda             8:0    0  100G  0 disk
├─sda1          8:1    0  600M  0 part /boot/efi
├─sda2          8:2    0    1G  0 part /boot
└─sda3          8:3    0 98.4G  0 part
  ├─rhel-root 253:0    0 63.5G  0 lvm  /
  ├─rhel-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─rhel-home 253:2    0   31G  0 lvm  /home
sdb             8:16   0   20G  0 disk
├─sdb1          8:17   0    2G  0 part
├─sdb2          8:18   0    3G  0 part
└─sdb3          8:19   0    4G  0 part
sr0            11:0    1 10.3G  0 rom  /run/media/root/RHEL-9-4-0-BaseOS-x86_64
[root@localhost ~]#

 6.格式化

格式化的目的

  • 当我们拿到了一张大白纸,首先为了使用方便要裁剪,然后为了书写工整要先画格,这里的“白纸”就是原始的硬盘,而“裁剪”意味着分区,然后的“画格”就是格式化,最后写入内容

  • 格式化是对分区建立文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法

查看文件系统格式

  • 方法:输入mkfs在键入tab(点击2次)进行命令补全,可显示支持的文件系统格式

格式化命令

mkfs.xfs  -参数   硬盘分区名


mkfs.ext4  -参数  硬盘分区名

参数

-f:    强制格式化,已存在文件系统时需要使用
-c:   建立文件系统前先检查坏块。
-V:   输出建立文件系统的详细信息

示例:

将分区后的新硬盘sdb格式化:

[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131072 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=524288, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkfs.xfs /dev/sdb2
meta-data=/dev/sdb2              isize=512    agcount=4, agsize=196608 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=786432, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkfs.ext4 /dev/sdb3
mke2fs 1.46.5 (30-Dec-2021)
创建含有 1048576 个块(每块 4k)和 262144 个inode的文件系统
文件系统UUID:b7234a98-f1a0-469f-995f-5411572c3f01
超级块的备份存储于下列块:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块)完成
写入超级块和文件系统账户统计信息: 已完成

blkid命令

作用

显示设备的UUID值和文件系统名称

UUID

UUID:全局单一标识符(Universally Unique Identifier),Linux系统会给所有设备分配一个唯一的UUID值,以方便挂载

格式

blkid  设备名

示例:

7.挂载

概念

mount point:挂载点,是一个目录,该目录是进入磁盘分区(文件系统)的入口

挂载:将一个分区或者设备挂载至挂载点目录,建立连接,通过挂载点目录进入分区空间

mount命令

格式

mount  [-t  文件系统类型]  设备名   挂载点目录

参数

-a:   依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-t:    指定文件系统类型
-o :  特殊设备选项:挂载设备时使用逗号分割输入额外参数

示例:

新建挂载目录,挂载/dev/sdb1:

umount命令

作用

卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载

格式

umount  参数   设备名称[挂载点]

参数

-f :强制卸载

示例:

8.du命令

作用
  • du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB。

  • du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候du与df就一致了

格式

du  -参数   文件或目录名

参数

-a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
-h : 以人们较易读的容量格式(G/M)显示;
-s : 列出总量,而不列出每个个别的目录占用了容量;
-S : 不包括子目录下的总计,与-s有点差别;
-k : 以KB列出容量显示;
-m : 以MB列出容量显示。

9.df命令

作用
  • 列出文件系统的磁盘空间占用情况

  • df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了

格式

df -参数 目录或文件名

参数

 -a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KB的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB,MB,KB等格式自行显示
-H:以M=1000K替代M=1024K的进位方式
-T:连同该分区的文件系统名称(例如ext3)也列出
-i:不用硬盘容量,而以inode的数量来显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值