1.连接命令:

  1. 云服务器连接:

    1
    ssh root@qv1234.top
  2. centos7IP地址查看:

    1
    ip addr    ## centos的ip地址是ens33条目中的inet值。
  3. ubantuIP地址查看:

    1
    ipconfig
  4. RedHat地址查看

    1
    2
    ip a
    # 在2:ens160下的inet后面即为
    1
    ip a show ens160
  5. 其他命令:

    1
    2
    hostname -i
    alias myip="ip a | cut -d' ' -f6 | head -9 | tail -1" # 执行myip

2.系统命令:

1.主机名配置:

  1. 查看当前主机名:hostname
  2. 查看当前主机的FQDN:hostname -f
  3. 查看主机名配置文件:cat /etc/hostname
  4. 修改当前主机名(临时修改,重启linux系统之后失效 ):hostname 新主机名
  5. 修改当前主机名(永久修改):hostnamectl set-hostname 新主机名

2.网络服务管理:

  • 用于控制软件服务:systemctl / service [option] 服务名

    参数 说明
    status 查看指定服务的状态
    start 启动指定服务
    stop 停止指定服务
    restart 重启指定服务
    1
    systemctl status docker    # 查询docker服务的状态

3.防火墙命令:

  • 用于控制防火墙:systemctl / service [option] firewalld

  • 防火墙根据配置文件/etc/sysconfig/iptables 来控制本机的“出”“入”网络访问行为

    参数 说明
    status 查看防火墙状态
    start 启动防火墙
    stop 关闭防火墙
    disable 开机禁用
    enable 开机启用
    1
    systemctl status firewalld
    1
    systemctl start firewalld
    1
    systemctl stop firewalld

4.防火墙端口命令:

  • 参数permanent永久生效,没有此参数重启后失效

    1
    2
    firewall-cmd --zone=public --add-port=8161/tcp --permanent 
    firewall-cmd --zone=public --add-port=61616/tcp --permanent
  • 重启防火墙:

    1
    firewall-cmd --reload
  • 查看端口是否设置成功:

    1
    firewall-cmd --zone=public --list-ports

5.进程管理命令

  • 进程的详情:

    UID PID PPID C STIME TTY TIME CMD
    root 1 0 0 18:25 ? 00:00:06 /usr/lib/systemd/…..
    • UID:该进程执行的用户Id
    • PID:进程ID
    • PPID:该进程的父级进程Id;如果一个程序的父级进程找不到,该程序的进程称之为僵尸进程
    • C:CPU的占用率,其形式是百分数
    • STIME:进行的启动时间
    • TTY:终端设备,发起该进程的设备识别符号,如果显示?则表示该进程并不是由终端设备发起
    • TIME:进程的执行时间
    • CMD:该进程的名称或者对应的路径
  • 查看进程:ps [option]

    参数 说明
    -e( processes) 表示列出所有的进程
    -f(full) 显示全部的列(全字段)
    1
    ps -ef   # 显示所有的进程详情
    1
    ps -ef | grep post   # 查看名为post的进程详情
  • 杀死某个进程:kill 进程ip

    参数 说明
    -9 强制杀死进程
    1
    2
    ps -ef | grep dokcer  # 查询docker进程的信息
    kill 75806 # 根据进程ID删除进程

6.网络命令:

  • 查看是否ping通过对方主机:

    1
    ping
    参数 说明
    -c 数字 用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令
    -s 字节数 设置ping命令发出的消息包的大小,默认发送的测试数据大小为56字节;自动添加8字节的ICMP协议头后,显示的是64字节;再添加20字节的IP协议头,则显示的为84字节。最大设置
    -i 时间间隔 设定前后两次发送ICMP消息包之间的时间间隔,无此选项时,默认时间间隔为1秒。为了保障本机和目标主机的安全,一般不要小于0.2秒
    -t 设置存活时间TTL(Time To Live)
  • 显示网络设备信息:

    1
    ifconfig
  • 查看网卡信息:

    1
    dhclient
  • 显示详细的网络状况:

    1
    netstart

7.其他命令:

  1. 查看当前LInux发行版信息:

    1
    2
    cat /proc/version
    dmesg | grep linux
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /proc/cmdline         # 保存操作系统的启动参数

    /proc/cpuinfo # 保存CPU的相关信息。对应lscpu命令。

    /proc/devices # 系统已经加载的所有块设备和字符设备的信息。

    /proc/diskstats # 统计磁盘设备的I/O信息。

    /proc/filesystems # 保存当前系统支持的文件系统。

    /proc/kcore # 物理内存的镜像。该文件大小是已使用的物理内存加上4K。

    /proc/loadavg # 保存最近1分钟、5分钟、15分钟的系统平均负载。

    /proc/meminfo # 保存当前内存使用情况。对应free命令

    /proc/mounts # 系统中当前挂载的所有文件系统。mount命令。

    /proc/uptime # 系统自上次启动后的运行时间。

    /proc/version # 当前系统的内核版本号

    /proc/vmstat # 当前系统虚拟内存的统计数据
  2. 查看内核版本:

    1
    uname -r
    uname参数 说明
    -a 显示全部的信息
    -s 显示操作系统名称
    -m 显示处理器类型
    -v 显示操作系统的版本
    -n 显示主机名
  3. 查看shell的类型:

    1
    cat /etc/shells
  4. 查看当前默认的shell:

    1
    echo $SHELL 
  5. 查看cpu:

    1
    top
    1
    2
    top -p(PID)    # 只显示某个进程的信息
    top -u(user) # 查找特定用户启动的进程
    1
    2
    3
    4
    5
    6
    # 第一行: 系统时间,运行时间,在线用户数,负载均衡 ——> uptime命令
    # 第二行:总进程,运行进程,休眠进程,停止进程,僵尸进程
    # 第三行:用户空间占用CPU比例,内核空间占用CPU比例等
    # 第四行:物理内存总量,空闲内存总量,使用中的内存总量,缓存的内存总量
    # 第五行:交换空间总量,空闲交换总量,使用空间,虚拟空间
    # 后面为进程表
  6. 查看cpu的核数:

    1
    cat /proc/cpuinfo| grep "cpu cores"| uniq
  7. 查看端口:

    1
    ss -tnl
  8. 查看系统的日志信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    路径1:/var/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息

    路径2:/var/log/cron:记录 crond 计划任务产生的事件信息

    路径3:/var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息

    路径4:/var/log/maillog:记录进入或发出系统的电子邮件活动

    路径5:/var/log/lastlog:记录每个用户最近的登录事件

    路径6:/var/log/secure:记录用户认证相关的安全事件信息

    路径7:/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件

    路径8:/var/log/btmp:记录失败的、错误的登录尝试及验证事件
  9. 系统关机:

    1
    2
    3
    4
    5
    shutdown -h now / poweroff       # 现在关机 
    shutdown -t 10 # 10秒后关机
    shutdown -H # 半分钟后关机
    shutdown -h 10 # 十秒分钟后关机
    shutdown -r # 关机后重启
  10. 重启计算机:

1
reboot

3.用户和用户组命令:

1.用户管理命令

  • Linux下的用户可以分为三类:1.超级用户,2.系统用户,3.普通用户

  • Linux中的组有以下两类:

    1. 基本组:建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。
    2. 附加组:可以容纳多个用户,组中的用户都具有组所拥有的权利
  • 只有root用户可以进行用户管理命令

  • 用户信息的存储

    用户存储文件 说明
    /etc/passwd 存储用户的关键信息
    /etc/group 存储用户组的关键信息
    /etc/shadow 存储用户的密码信息
    /etc/gshadow 存储用户组的密码信息
  • /etc/passwd文件中的信息:

    用户名 密码 用户ID 用户组ID 注释 家目录 解释器Shell
    itcast x(不显示) 1000 1000 itcast /home/itcsat /bin/bash
    • 家目录:用户登录进入系统中之后默认的位置
    • 解释器Shell:等待用户进入系统之后,用户输入指令之后,该解释器会收集用户输入的指令,传递给内核。
  • /etc/group文件中的信息:

    组名 组的加密口令 是系统区分不同组的ID 是用“,”分开的用户名,列出的成员以该组为附加组
    root x(不显示) 0
  • 添加用户:useradd [option] 用户名

    常用参数 说明
    -g(gid) 指定用户的用户主组,选项值可以是用户组的id,也可以是组名
    -G(groups) 指定用户的用户附加组,选项值可以是用户组的id,也可以是组名(linux一个用户可以属于多个用户组)
    -u(uid) 指定用户自定义的uid,系统默认生成(超级用户的UID:0,系统用户的UID:1~999,普通用户的UID:≥1000)
    -c(comment) 添加注释(表示该用户是干什么的)
    -d(home-dir) 目录——设定用户的家目录(默认为/home/用户名)
    -e(expiredate) YYYY-MM-DD——设置用户的失效日期,此日期后将不能使用该账号
    -s(shell) shell名——指定用户登录后使用的Shell,默认是bash
    -N(no) 不创建与用户名同名的基本组
    1
    useradd -g 1000 -u 1001 qv123  # 添加qv123用户,用户组ID1000,用户uid10001
    1
    useradd -s /sbin/nologin sarach    # 设置次用户为不可登录shell
  • 修改用户:usermod [option] 用户名

    常用参数 说明
    -g(gid) 指定用户的用户主组,选项值可以是用户组的id,也可以是组名
    -G(groups) 指定用户的用户附加组,选项值可以是用户组的id,也可以是组名(linux一个用户可以属于多个用户组)
    -u(uid) 指定用户自定义的uid,系统默认生成(500之后)
    -l(login) 修改用户名
    1
    usermod -g 1001 -G 1002 qv123  # 修改qv123用户的用户组ID为1001,用户附加值ID为1002
    1
    usermod -l wangli qv123   # 修改qv123用户的的用户名为wangli
    1
    usermod -G g123 itcast   # 修改itcast用户的用户附加值为g123
  • 设置 / 修改密码:passwd 用户名

    Linux不允许没有密码的用户登录到系统,因此前面创建的用户目前都于锁定状态,需要设置密码之后才能登录计算机

    1
    2
    3
    4
    passwd                  # 普通用户修改自己密码:
    passwd [ 用户名 ] # 修改普通用户密码(root)
    passwd -d [ 用户名 ] # 删除普通用户密码(root)
    echo "123456" | passwd --stdin test1 # 使用管道流修改用户密码
  • 切换用户:su 用户名(如果不指明用户默认切换到root)

    • 从root往普通用户切换不需要密码,但是反之则需要root密码
    • 切换用户之后前后的工作路径是不变的
    • 普通用户没有办法访问root用户家目录,但是反之则可以;
    • su和su - 命令区别就是加载的配置文件不一样:
      • su 切换方式加载的文件: ~/.bashrc,/etc/bashrc
      • su - 切换方式加载的文件: /etc/bashrc,/etc/profile,/.bashrc,/.bash_profile
    1
    su qv123
  • 删除用户:userdel [option] 用户名

    • 已经登录的qv123用户删除的时候提示删除失败,但是没有登录的list用户可以正常删除;但可以kill qv123的用户相关的进程,再删除已登录的用户。
    常用参数 说明
    -r(remove) 表示删除用户,同时其家用录
    1
    userdel -r qv123   # 删除qv123用户,并且删除qv123目录
  • 查看用户名:whoami

    1
    whoami  # 显示当前登录的用户名
  • 查看用户信息:id 用户名

    查看一个用户的一些基本信息(包含用户id,用户组id,附加组id),该指令如果不指定用户则默认当前用户

    1
    id    # 查看当前用户的基本信息
    1
    2
    [root@qv123 qv123]# id huang123    # 查看指定用户的基本信息
    uid=1002(huang123) gid=1005(base1) groups=1005(base1),1006(add1)
  • 控制用户对系统命令的使用权限:

    • 使用 sudo 命令可以提高普通用户的操作权限,不过这个权限需要root用户进行配置/etc/sudoers文件才可使用。

    • 当用户执行sudo时,便会让用户输入自己的密码来确认(root执行sudo时不需要输入密码);

    • 若用户具有执行sudo的权限,便开始sudo后续接的命令

      1
      [qv110@wangxuan root]$ sudo yum install -y httpd
      参数 说明
      l(list) 列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
      u(user) 以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是UID
      k(reset) 清除存活期时间,下次再使用sudo时要再输入密码。
      b(backgroud) 在后台执行指定的命令。
      p(prompt) 可以更改询问密码的提示语,其中%u会代换为使用者账号名称,%h会显示主机名称
      1
      [qv110@wangxuan root]$ sudo -l
      1
      [qv110@wangxuan root]$ sudo -u qv456 pwd
      1
      [qv110@wangxuan root]$ sudo -k
      1
      [qv110@wangxuan root]$ sudo -b yum install -y httpd
    • 配置/etc/sudoers文件

      用户账号 登录者的来源主机名 可切换的身份 可执行的命令
      root ALL ALL ALL
      1
      [root@localhost ~]# vim /etc/sudoers
      1
      qv123 ALL=(ALL) ALL

2.用户组管理命令:

  • 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中。

  • Linux系统对用户组的规则有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建

  • 用户组的管理涉及用户组的添加,删除和修改。组的增加,删除和修改实际上就是对/etc/group文件的更新。

    用户组名 密码 用户组ID 组内用户名(用户的附加组)
    itcast x(不显示) 1000 itcast

    image-20220621234538017

  • 用户组的添加:groupadd [option] 用户组名

    常用参数 说明
    -g(gid) 表示选择自己设置一个自定义的用户组ID数组(默认系统自动添加)
    1
    groupadd -g 1001 g123  # 添加一个g123的用户组,用户组ID为1001
  • 用户组的编辑:groupmod [option] 用户组名

    常用参数 说明
    -g(gid) 表示选择自己设置一个自定义的用户组ID数组(默认系统自动添加)
    -n(name) 表示设置新的用户组的名称
    1
    groupmod -n p1 g123  # 修改一个g123的用户组,新的用户组名p1
  • 添加/删除组成员:gpasswd [选项] [用户] [组](只有root用户和组管理员才能够使用该命令)

    常用参数 说明
    -r(delete passwd) 删除组密码
    -a(add) 把用户加入组
    -d(delete user) 把用户从组中删除。
    -M(member) 可同时添加多个用户
    -A(admin) 给组指派管理员
    1
    [root@wangxuan ~]# gpasswd -r test1
    1
    [root@wangxuan ~]# gpasswd -a qv110 qv456
    1
    [root@wangxuan ~]# gpasswd -A qv110 qv110
    1
    [root@wangxuan ~]# gpasswd -M qv110,qv456,mysql test1
    1
    [root@wangxuan ~]# gpasswd -d qv456 test1
  • 用户组的删除:groupdel 用户组名

    如果需要删除一个组,但是这个组是某个用户的主组时,则不允许删除;如果确实需要删除,则先从组内移出所有用户。

    1
    groupdel g123
  • 查询用户的用户组信息:

    1
    2
    [root@qv123 redhat]# groups redhat   # 显示出用户的所属组信息
    redhat : g1

3.查看用户登录系统的情况:

  • users:查看当前登录系统的用户

    1
    2
    [root@node12 ~]# users
    root
  • lastlog:如果想要知道每个账号的最近登录时间,则可使用lastlog查看,该命令会读取/var/log/lastlog文件

    1
    2
    3
    [root@node13 ~]# lastlog
    Username Port From Latest
    root pts/0 192.168.168.1 Mon May 9 15:38:52 +0800 2022
  • w:显示登录到系统的用户信息

    1
    [root@localhost ~]# w
    1
    2
    3
    4
    5
    6
    7
    8
    USER:表示登录系统的用户
    TTY:表示用户使用的TTY名称
    FROM:表示用户从哪里登录进来
    LOGIN@:用户登录的日期和时间
    idle:表示空闲时间
    JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间
    PCPU:当前活动进程使用的系统时间
    WHAT:表示当前用户执行的进程名称和选项
  • who:显示目前登录到系统的用户,who通常通过/var/run/utmp文件来获取信息

    参数 说明
    -s 仅显示名称、终端、时间字段信息和主机名。这是who默认的输出
    -b 列出系统最近启动的日期
    -m 列出关于当前终端的信息

4.常用命令:

1.列出某目录文件列表:

文件类型 说明
- 普通文件
l 符号链接又叫软链接,和原文件不是一个文件;例如Windows的快捷方式
d 目录
c 字符设备文件:串行端口设备,顺序读写,键盘
p 管道文件 :用于进程间的通信
s 套接字文件:通常用于网络上的通信
1
2
3
文件类型 权限          所属者 所属组 文件大小  创建时间       文件名称
d r-xr-xr-x. 2 root root 36864 4月 28 18:17 bin
d rwxr-xr-x. 2 root root 22 4月 28 18:06 config
1
2
3
4
5
ls              ## 显示本目录所有文件以及文件夹
ls ../ ## 显示上一层目录所有文件以及文件夹
ls -a ## 显示所有文件(包括隐藏)以及文件夹
ls -l 或 ll ## 显示所有文件的详细信息以及文件夹
ls -lh ## 显示所有文件的详细信息以及文件夹(以文件大小)
选项 功能
-l(long) 以长格形式显示文件和目录的详细信息,ls命令默认只显示名称的短格式。
-d(directory) 显示指定目录本身的信息,而不显示目录下的各个文件和子目录的信息。
-c(ctime) 按文件的修改时间排序后,予以显示。
-h
-R(recursive) 以递归的方式显示指定目录及其子目录中的所有内容。
-a(all) 显示所有子目录和文件的信息,包括名称以“.”开头的隐藏目录和隐藏文件。
-A 与-a选项的作用类似,但不显示表示当前目录的“.”和表示父目录的“..”。
-i 显示文件索引节点号(inode)
-s(sort by file size) 按照文件大小排序

2.切换目录命令:

  1. 切换到本目录下的app目录:cd app
  2. 切换到上层目录:cd ..
  3. 打开上一层目录下的某一目录:cd ../目录
  4. 切换到某一目录:cd /目录1/目录2…
  5. 切换到用户主目录:cd ~ 或 cd 或 cd $HOME
  6. 切换到上一次所在的目录:cd -

3.创建目录和移除目录:

  1. 创建目录:mkdir [option] [dirname]

    参数 说明
    -m 对新建目录设置存储权限,也可以用chmod命令设置
    -p(parents) dirname可以是一个路径名称。一次可以建立多个目录(多个层级)
    1
    mkdir test1   # 在本目录下创建test1的目录
    1
    mkdir test1 test2 test3   # 在本目录下创建test1,test2,test3的多个目录
    1
    mkdir -p -m 700 ./inin/mail   # 在本目录下创建多层目录/inin/mail,并指明权限
    1
    2
    3
    4
    5
    文件命名规则:
    1.不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
    2.文件名不能超过255个字符
    3.区分大小写file File FILE fIle
    4.目录也是文件,在同一路径下,两个不同类型文件不能同名
  2. 删除空目录:rmdir [option] [dirname]

    参数 说明
    -r(recursive,递归) 带文件(删除指定目录下的所有文件)
    -f(force,推进) 不询问
    1
    rmdir test1   # 删除当前目录下的一个空目录
    1
    rmdir -p /usr/local/app  # 删除/usr/local/app如果父目录不为空则保留

4.创建文件,删除文件,查看文件详情:

  • 查看文件的详细信息:

    1
    stat [文件名 / 路径名]
    1
    2
    3
    Access: 2022-06-09 11:19:35.484027446 +0800    ## 即access time,查看了一下文件内容(cat),文件的atime时间会更新
    Modify: 2022-04-16 14:46:36.153011877 +0800 ## 即modify time,文件内容被改变了,ctime会更新
    Change: 2022-04-16 14:46:36.153011877 +0800 ## 即change time,元数据【文件的属性,例如大小、文件名等等】被改变,mtime会更新
  • 创建一个空文件(如果文件已存在,更新文件的三个时间):

    1
    2
    3
    touch 文件
    touch 目录1/目录2/文件
    touch file{1..3} # 创建从file1到file3的文件
  • 创建链接文件:

    1
    ln -s 原文件 目标文件     ## 创建软链接文件
    1
    2
    3
    4
    5
    6
    [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# ln -s b.txt d.txt
    [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# ll
    -rw-r--r-- 2 root root 0 10月 11 15:21 a.txt
    -rw-r--r-- 1 root root 0 10月 11 15:21 b.txt
    -rw-r--r-- 2 root root 0 10月 11 15:21 c.txt
    lrwxrwxrwx 1 root root 5 10月 11 15:22 d.txt -> b.txt
    1
    ln 原文件 目标文件        ## 创建硬链接文件
    1
    2
    3
    4
    5
    [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# ln a.txt c.txt
    [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# ll
    -rw-r--r-- 2 root root 0 10月 11 15:21 a.txt
    -rw-r--r-- 1 root root 0 10月 11 15:21 b.txt
    -rw-r--r-- 2 root root 0 10月 11 15:21 c.txt
  • 删除文件:

    1
    2
    rm 文件名1 文件2 ...
    rm -f 文件名1 文件2 ... # 删除文件不咨询

5.显示文件内容命令:

  1. 查看文件的所有内容或连接文件(不分页):cat [option] 文件名

    参数 说明
    -v 用于一种特殊形式显示控制字符
    -n(number) 对输出内容中进行标注行号。
    -b(nonblank,非空白行) 对输出内容中非空行进行标注行号
    -T(tabs) 将TAB显示为 ^I。该选项要与 -v 选项一起使用,即如果没有 -v选项,则这个选项将将被忽略
    -E 在每行的末尾显示一个 $ 符,该选项要与 -v 选项一起使用
    -u(ignore) 输出不经过缓冲区
    -A(all) 等同于 -vET
    -t 等同于 -vT
    -e(equivalent,相等的) 等同于 -vE
    1
    cat Readme.txt   # 显示出Readme.txt文件的内容
    1
    cat -A Readme.txt   # 显示出Readme.txt文件的内容;如果文件中含有特殊字符的话,一起显示出来
    1
    cat test1 test2 > test3  # 把test1和test2的文件内容合并起来,放入test3中
  2. 查看文件内容(分页显示):more [option] 文件名 (回车下一行,空格下一屏,q退出(如果没有内容会退出))

    参数 说明
    -p(page) 显示下一屏之前先清屏
    -c 作用同 -p 类似
    -d 在每屏的底部显示 –more– (XX%) …
    -s 文件中连续的空白行压缩成一个空白行显示
    -f 显示当前问价你的文件名和行数
    1
    more Readme.txt   # 用分页的方式显示出Readme.txt文件的内容
    1
    more -dc Readme.txt   # 用分页的方式显示出Readme.txt文件的内容;但显示之前要清屏
    1
    more -c -10 Readme.txt   # 用分页的方式显示出Readme.txt文件的内容;要求每10行显示一次,且显示之前要清屏
  3. 查看文件内容(前后翻页分页显示):less 文件名(上下键翻页,q退出(如果没有内容不会退出))

    1
    less Readme.txt   # 用分页的方式显示出Readme.txt文件的内容;并且可以前后翻页
  4. )查看文件的前几行信息:head -number 文件名

    1
    head -3 test.java
  5. )查看文件最后10行内容:tail -num 文件名

    参数 说明
    +num 从文件第num行以后开始显示
    -num 从文件倒数第num行开始显示;如果省略num参数,系统默认值为10
    c(char) 以字节为num的计数单位
    -f(follow) 使tail不停地去读取和显示文件最新的内容, 这样有实
    1
    tail -4 test.java   
    1
    tail -c +0 group

6.查看文件内容命令:

  • grep命令:

    1
    2
    3
    4
    # 返回的行信息
    grep [option] [search pattern] [file1,file2,....]
    erep [option] [search pattern] [file1,file2,....]
    frep [option] [search pattern] [file1,file2,....]
    参数 说明
    -b 在输出的每一行显示包含匹配字符串的行在文件中的字节偏移量
    -c(count) 仅显示找到的行数
    -i(ignore) 显示找到的行,比较时不区分大小写
    -h 在查找多个文件时,指示grep不要将文件名加入到输出之前
    -l 显示首次匹配串所在的文件名并用换行符将其隔开。
    -n(line-number) 显示找到的行,显示行号(文件首行行号为1)
    -o(only-matching) 只显示匹配的内容
    -A 如果匹配成功,则将匹配行及其后n行一起打印出来
    -B 如果匹配成功,则将匹配行及其前n行一起打印出来
    -C 如果匹配成功,则将匹配行及其前后n行一起打印出来
    -E 等于egrep,扩展
    –color 高亮颜色显示匹配到的字符串
    -v(invert,反向) 显示没有匹配字符串的行
    -x(line-regexp) 只显示整行严格匹配的行
    1
    grep 'text file' Readme.txt   # 在文件Readme.txt中搜索字符串'text file'
    1
    grep 'text file' *   # 在所有文件中搜索字符串'text file'
    1
    grep 'text file' *.java   # 在所有的.java文件中搜索字符串'text file'-

    使用特殊符号进行字符串的匹配

    匹配模式 说明
    grep h 文件名 查找文件里有字符h的行
    grep ^q 文件名 显示匹配以q开始的行
    grep ^[ ^q ] 文件名 显示不匹配以q开头的行
    grep ^[0-9] 文件名 显示匹配以数字开头的行
    grep q$ 文件名 显示匹配以q结束的行
    grep ^$ 显示空白行
    grep -r h ./* 如果要明确搜索当前目录中的子目录有h的行
    grep -d skip h ./* 忽略当前目录下的子目录下的普通文件
    1
    grep ^SELINUX /etc/selinux/config    # 查找以SELINUX开头的行数据
    1
    grep ^$ passwd    # 显示要一个文件中空行
    1
    grep ^[^$] passwd   # 显示要一个文件中空行 
  • cut命令:用于按列提取文本内容

    参数 说明
    -d[num](delimiter,分隔符) 设置间隔符号
    -f[num1,num2…..](fields) 显示列数
    1
    cut -d: -f1 passwd    # 显示文件中以:分隔,第一列数据
    1
    cut -d' ' -f1 passwd    # 显示文件中以空格分隔,第一列数据
    1
    cut -d' ' -f 1-3 passwd    # 显示文件中以空格分隔,第一列到第三列的数据
  • Sort命令:默认会按照字母顺序进行排序

    参数 说明
    -f(ignore-case) 忽略大小写
    -b(ignore-leading-blanks) 忽略缩进与空格
    -n(number) 以数值型排序
    -r(reverse) 反向排序
    -u 去除重复行
    -t 指定间隔符
    -k 设置字段范围
    1
    2
    3
    4
    5
    6
    [root@kongd ~]# sort fruit.txt 
    apple
    banana
    orange
    pear
    raspaberry
    1
    2
    3
    4
    [root@kongd ~]# sort -u sort.txt    # 去重行
    Free Linux Lessons
    Red Hat certified
    Welcome to kongd.com
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@kongd ~]# sort -n number.txt     # 以数值型排序
    3
    9
    12
    24
    45
    56
    67
    82
    98
  • uniq命令:去除文本中连续的重复行

    1
    uniq passwd
  • tr命令:替换文件中的字符显示

    参数 说明
    -c 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
    -d 删除指令字符
    -s 缩减连续重复的字符成指定的单个字符
    1
    cat /etc/passwd | tr a-z A-Z   # 将文件/etc/passwd中的小写字母全部转换成大写字母
    1
    cat /etc/passwd | tr '123' 'abc'    
  • wc命令:用于统计指定文本文件的行数、字数或字节数

    参数 说明
    -l 只显示行数
    -w 只显示单词数
    -c 只显示字节数
    1
    wc -l /etc/passwd

7.文件查找:

  • find命令:可按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件(返回文件路径)

    参数 说明
    -name 匹配名称
    -size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
    -mtime -num 匹配修改内容的时间(-4指小于等于4天内的文件名;+4,大于等于5天前的文件名;4指前4~5那一天的文件)
    -atime -num 匹配访问文件的时间
    -ctime -num 匹配修改文件权限的时间
    -perm 匹配权限(mode为完全匹配,-mode为包含即可)
    -user 匹配所有者
    -group 匹配所有组
    -type 匹配文件类型(b块设备、d目录、c字符设备、p管道、l查找软链接文件、f文本文件)
    -a / -o / -not 逻辑运算符 ,and 逻辑与, or 逻辑或,not 逻辑非
    -exec …. \ 后面可跟用于进一步处理搜索结果的命令({}表示找到的文件路径)
    1
    find . -name 'server.log'   # 查找当前目录下及其子目录下的server.log文件
    1
    find / -name '*oot*'   # 查找根目录下及其子目录下的文件名有boot的文件
    1
    find ./ -size +50k
    1
    find . -mtime -4     # 查找当前目录下及其子目录下的文件内容时间小于4天的文件
    1
    find . -type l      # 查找当前目录下及其子目录下的文件类型为链接文件的文件
    1
    find . -name 'a*' -a -name '*.txt'   # 查找当前目录下及其子目录下的同时满足文件名是a开头和.txt结尾的文件
    1
    find . -user root -a -name 'a*'   # 查找当前目录下及其子目录下的同时满足文件名是a开头和所有者为root的文件
    1
    2
    # 找出当前目录下文件名为'passwd'的文件并复制到上一层目录
    find . -name 'passwd' -exec cp {} ../ \;
    其他选项 说明
    -print 默认动作,将搜索结果写入到标准输出
    -fprint file 将搜索结果写入到文件file
    -ls 以详细格式(长格式)显示搜索结果
    -fls file 将搜索结果以详细格式(长格式)写入到文件file
    -delete 将搜索到的文件删除
  • which命令:which 是搜索系统命令的可执行文件

8.解压缩和压缩:

  • tar命令:

    必选选项 说明
    -f(file) 用于指定操作的文件名。
    (三选一)必选参数 说明
    -c(create) 创建打包或者压缩文件
    -x(extract,取出) 释放打包或者压缩文件
    -t(list) 查看包中的文件列表
    辅助选项 说明
    -v(verbose) 表示在命令执行时显示详细的提示信息
    -p() 打包时保留文件及目录的权限
    -z 调用gzip程序,以gzip格式压缩或解压缩文件(.tar.gz)
    -j 调用bzip2程序,以bzip2格式压缩或解压缩文件(.tar.bz2)
    -J 使用xz压缩或解压缩文件(.tar.xz),xz的压缩率通常比bzip2更高
    -C(大写字母C) 和-x选项一起使用,表示释放包时指定释放的目标路径
    1
    tar -cvf 压缩名.tar 目录名    # 打包目录文件 
    1
    tar -zcvf 压缩名.tar.gz 目录名    # 打包压缩目录文件
    1
    tar -zxvf 压缩名.tar.gz     # 解压缩到当前目录
    1
    tar -zxvf 压缩名.tar.gz -C ./文件     # 解压缩到某目录
  • zip命令(压缩):

    参数 说明
    -r(reverse) 将当前目录下的某个目录连同目录下文件一起压缩
    -m(move) 向压缩文件中【】中添加【】文件
    -d(delete) 删除压缩文件中的文件
    -x(exclude) 压缩文件时排除某个文件
    1
    zip test1.zip test1.txt      # 使用zip压缩文件test1.txt
    1
    zip -r dir1.zip dir1/       # 将当前目录dir1连同目录下文件一起压缩
    1
    zip -m test1.zip test2.txt   # 向压缩文件中test1.zip中添加test2. txt文件
    1
    zip -d test1.zip test2.txt   # 删除压缩文件中的文件
    1
    zip test.zip *.txt -x test1.txt   # 压缩文件时排除某个文件
  • unzip命令(解压缩):

    参数 说明
    -d(directory) 将压缩文件在指定目录下解压缩
    -v(verbose) 查看压缩文件目录,但不解压
    1
    unzip test2.zip    # 解压文件test2.zip
    1
    unzip test.zip -d dir1    # 将压缩文件text.zip在指定目录dir1下解压缩
    1
    unzip -v test.zip      # 查看压缩文件目录,但不解压

11.文件目录剪切和复制命令:

  1. 复制文件到某目录:cp [option] [src_file | src_dir] [dst_file | dst_dir]

    参数 说明
    -a 通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录
    -d 复制时保留连接
    -f 在覆盖已经存在的目标文件时不提示
    -i 在覆盖目标文件之前将给出提示要求用户确认
    -p 不只复制文件内容,还会复制修改时间和访问权限
    -r 复制目标目录下的所有子目录和文件
    -l 不做复制,只是连接文件
    1
    cp test1.java /usr/local/app/  # 复制test1.java到/usr/local/app/
    1
    cp test1.java /usr/local/app/test2.java  # 复制test1.java到/usr/local/app/并改名为test2.java
    1
    cp -r /usr/local/app/ /home  # 复制/usr/local/app/下所有子目录文件到/home
  2. 剪切文件到某某目录(绝对路径+改名):mv cp [option] [src_file | src_dir] [dst_file | dst_dir]

    参数 说明
    -i 交互式操作,如果剪切目录有已存在的文件,提示是否覆盖
    -f 禁止交互式操作
    1
    mv /usr/local/* .  # 将/usr/local/下所有子目录和文件剪切到当前目录
    1
    mv test1.java test2.java  # 将当前目录下test1.java改名为test2.java
    1
    mv jdk-linux-x64.tar.gz /usr/local/qv123/jdk    # 将当前目录的jdk压缩包剪切到此路径

12.时间操作命令:

1.date命令:

1
2
3
4
5
date                          ## 查看当前时间
date "+%j" ## 查看今天是当年中的第几天
date "+%Y-%m-%d %H:%M:%S" ## 按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间
date "+%F" ## 查看当前时间,完整日期格式,等价于 %Y-%m-%d
date -s "20201101 8:30:00" ## 将系统的当前时间设置为2020年11月1日8点30分
  • 参数 作用
    %Y 完整年份(例如:2020)
    %M 月份(1~12)
    %D 本月中的第几天
    %H 小时(00~23)
    %M 分钟(00~59)
    %S
    %j 今年中的第几天
    %F 完整日期格式,等价于 %Y-%m-%d

2.timedatectl命令:

1
2
3
4
timedatectl status                              ## 查看系统时间与时区
timedatectl set-timezone Asia/Shanghai ## 列出上海地区的日期
timedatectl set-time 2021-05-18 ## 设置系统日期
timedatectl set-time 9:30 ## 设置系统时间
参数 作用
status 显示状态信息
list-timezones 列出已知时区
set-timezone 设置生效时区
set-time 设置系统时间

13.查看命令帮助命令:

  • 查看bash内置命令帮助,如:cd

    1
    help [命令]
  • 查看bash外置命令帮助,如:ls

    1
    [命令] ——help
    1
    2
    3
    4
    5
    6
    示例如下:cat [OPTION]... [FILE]... 表明cat后面可以加上多个可选的选项以及多个可选的文件参数
    下面是对于命令的语法的一些符号的说明:
    [] :表示的是可选 ...: 表示的可以存在多个参数
    |表示是可选的
    <>:必填
    {}:表示作为一个整体存在的
  • 提供在线帮助1,使用权限是所有用户

    1
    man [命令]
    • 在man命令帮助信息的界面中,所包含的常用操作按键如下:

      按键 作用
      空格键,PaGe down 向下翻一页
      PaGe up,b 向上翻一页
      home 直接前往首页
      end 直接前往尾页
      / 从上至下搜索某个关键词,如“/linux”
      ? 从下至上搜索某个关键词,如“?linux”
      n 定位到下一个搜索到的关键词
      N 定位到上一个搜索到的关键词
      q 退出帮助文档
    • man命令的帮助信息的结构如下:

      结构名称 代表意义
      NAME 命令的名称
      SYNOPSIS 参数的大致使用方法
      DESCRIPTION 介绍说明
      EXAMPLES 演示(附带简单说明)
      OVERVIEW 概述
      DEFAULTS 默认的功能
      OPTIONS 具体的可用选项(带介绍)
      ENVIRONMENT 环境变量
      FILES 用到的文件
      SEE ALSO 相关的资料
      HISTORY 维护历史与联系方式
  • 提供在线帮助2,使用权限是所有用户(与man page不同的是,info page则是将文件数据拆成一个一个的段落)

    1
    info [命令]

14.其他命令:

  1. 显示当前所在目录:pwd
  2. 补全命令和参数:TAB键
  3. 终止当前进程:Ctrl+C
  4. 清屏:clear 或 Ctrl+L
  5. 移动到当前行的开头:Ctrl+a
  6. 移动到当前行的结尾:Ctrl+e

15.修改字符集编码:

1
2
echo "export LC_ALL=en_US.UTF8" >> /etc/profile
source /etc/profile

5.Vi和Vim编辑器:

  • VIM 是 vi 的升级版本,除了兼容 vi 的所有指令,VIM 还具有一些新的特性,主要体现在:

    1.多级撤销:我们知道在 vi 里,按 u 只能撤消上次命令,而在 VIM 里可以无限制的撤消。

    2.易用性:vi 只能运行于 unix 中,而 VIM 不仅可以运行于 unix,windows ,mac 等多操作平台。

    3.语法加亮:VIM 可以用不同的颜色加亮显示代码。

    4.可视化操作:VIM 不仅可以在终端运行,也可以运行于 x window、 mac os、 windows

image-20221013095402041
  1. 进入文件:vim 文件

  2. 切换到命令模式:Esc键

  3. 命令模式切换到插入模式:

    按键参数 说明
    i 在光标前插入
    I(大写字母i) 在光标所在行行首第一个非空字符前插入
    A 在光标所在行末尾插入
    o 在光标所在行下一行插入
    O 在光标所在行上一行插入
    S(大写字母) 删除当前行并进入插入模式
    光标跳转按键 功能
    ^ 光标跳转至行首
    $ 光标跳转至行尾
    gg 文档首行第一个字符
    G 文档最后一行第一个字符
    行号gg 或者 行号G 跳转到指定行
    复制、粘贴、删除按钮 说明
    dd 删除光标所在行
    ndd 删除从光标处开始的n行
    d^ 删除光标前至行首字符
    d$ 删除光标及之后的所有字符
    yy 复制光标所在行
    nyy 复制从光标处开始的n行
    p 将缓冲区的内容粘贴到光标所在行的下一行
    u 撤销操作
  4. 命令行切换到末行模式,使用” :或者/ “:

    查找关键字并替换按键 功能
    /word 从上而下在文件中查找字符串“word”(可按n键定位到下一个匹配的被查找字符串)
    :s /old/new 当前行中查找到的第一个字符串“old”替换为“new”
    :s /old/new/g 当前行中查找到的所有字符串“old”替换为“new”
    :n1,n2 s/old/new/g 在行号“n1,n2”范围内替换所有的字符串“old”为“new”
    :% s/old/new/g 将整个文件内的字符串“old”替换为“new”
    其他操作按键 说明
    :r /dir/file 在当前文件中读入其他文件内容
    :sp /dir/file 可分屏显示另一个文件(光标在多个文件之间的切换按ctrl+w w)
    :g/word/d 查找含有”word”的行并删除
    :set nu 显示行号
    :set nonu 关闭行号显示
    :n1,n2 d 删除n1-n2行内容
    :n1,n2 co n 复制n1-n2行到第n行后面
    保存退出按键 功能
    :q 退出vi/vim编辑器,未对文件做任何编辑操作才可退出
    :q! 不保存文档内容,强制退出vi/vim编辑器
    :w 保存文件
    :w /dir/file 将文件另存为/dir/file
    :wq 或者 ZZ 保存文件内容并退出vi/vim编辑器
    :wq! 强制保存并退出

6.数据流和重定向输出>和>>:

  • 数据流:

    • 标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入,代码为0
    • 标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上,代码为1
    • 标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上,代码为2
  • 重定向:

    使用形式 功能
    命令 >文件 或 命令 1>文件 将命令执行后的标准输出信息不在默认的屏幕上显示,若指定的文件不存在,则自动创建该文件
    命令 2>文件 将命令执行后所产生的错误信息不在默认的屏幕上显示,若指定的文件不存在,则自动创建该文件
    命令 2>/dev/null 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件中,即将输出的错误信息丢弃掉
    命令 &>文件或命令 >&文件 将命令执行后的正确输出信息和错误信息不在默认的屏幕上显示,若指定的文件不存在,则自动创建该文件
    命令 >>文件 将命令执行后的正确输出信息以追加的方式写入到指定的文件中,不覆盖原文件内容,若指定的文件不存在,则自动创建该文件
    命令 <文件 使命令从指定的文件中读取数据作为输入
    命令 <<结束 标识字符串 在命令行读取数据作为输入,直到遇到指定的结束标识字符串
  • 输出重定向:

    • “ > “:覆盖输出,会覆盖到之前的文件内容

      1
      cat test1.txt > test2.txt   # 将test.txt打印到控制台的内容将写到test2.txt中
      1
      ls > test2.txt  # 将ls打印到控制台的内容将写到test2.txt中
      1
      sed  's/AAA/BBB/g'  xyz > xyz.tmp   # 替换文件中的所有AAA成BBB
    • “ >> “:追加输出,不会覆盖掉原始文件,会在原始文件末尾继续添加

      1
      cat test1.txt >> test2.txt   # 将test.txt打印到控制台的内容追加到test2.txt中
  • 输入重定向:

    • 从文件读取数据作为cat命令的输入

      1
      cat < file
    • 标准输入重定向 << 并不表示追加,而是表示输入结束的意思,即作为一个结束符。

      1
      cat > file3 << end
      1
      2
      3
      4
      5
      6
      7
      [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# cat > a.txt << end
      > qq
      > qq
      > end
      [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# cat a.txt
      qq
      qq
  • echo命令用于在终端设备上输出字符串或变量提取后的值

    1
    2
    3
    [root@localhost ~]# echo kongd.com
    kongd.com
    [root@master test]# echo test > /root/test/file ## 将标准输出重定向到文件
  • tee读取标准输入的数据,并将其内容输出到文件的同时输出到屏幕

    image-20221012180201469

    参数 说明
    -a或–append 附加到现有文件的后面,而非覆盖它
    -i或–ignore-interrupts 忽略中断信号
    –help 在线帮助
    1
    2
    3
    [root@iZ8vb3lp570ckxhpbpeopuZ qv123]# ls | tee a.txt
    a.txt
    jdk

7.管道命令:

  • 作用:将前一个命令的输出作后一个命令的输入

    1
    ls --help | more     # 分页查看帮助信息
    1
    ps -ef | grep java   # 名称中包含java的进程
    1
    cut -d: -f1 passwd | sort -n    # 查看文件中以:分隔得第一行数据,并按照从小到大排序

8.Linux的权限命令:

1.文件的一般权限:

  • Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命

  • 代表文件文件类型:1.-表示文件 2.d表示文件夹 3.l表示连接

  • 用户具有该文件的权限分类:

    文件权限 代表数字
    r:read读 4
    w:write写 2
    x:excute执行 1
  • Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

  • 文件权限管理用户分类:

    用户分类 说明
    u(owner) 属主
    g(group) 属组
    o(other users) 其他用户
    a(all) 所有用户

    image-20220619225947970

    image-20220619230210640

    image-20221016145206662

  • 操作符号:

    操作符号 说明
    + 添加某个权限
    - 取消某个权限
    = 赋予给定权限并取消其他权限
  • 文字设定法:

    • 添加或删除用户权限:chmod [who] [+]-[=] [mode] filename

      1
      chmod a+x test.java   # 给所有用户添加权限可执行
      1
      chmod o-w passwd     # 取消其他组用户的读权限
      1
      chmod ug+w,o-x test.java  # 给当前用户和当前组用户添加写权限,给其他用户删除可执行权限
      1
      chmod u=rwx,g=r,o=rw server.log   # 赋予owner用户读写执行权限,group用户读权限,其他用户读写权限
    • 查看文件的用户权限:ls -l 或ll

  • 数字设定法:

    • 添加或删除用户权限:chmod [mode] filename

      1
      chmod 644 test.java   # 赋予owner用户读写权限,group用户写权限,其他用户写权限
      1
      chmod 750 test.java   # 赋予owner用户读写可执行,group用户读可执行权限,其他用户没有权限
    • 查看文件的用户权限:ls -l 或ll

  • 修改文件或目录的属主和属组(-R 可递归设置指定目录下的全部文件(包括子目录和子目录中的文件)的所属关系)

    • 修改文件或目录的所属者:

      1
      chown [选项] 新属主:新属组 文件或目录
    • 修改文件或目录的属组:

      1
      chown [选项] :新属组 文件或目录
      1
      chgrp [选项] 新属组 文件或目录

2.文件和目录的特殊权限:

  • 在Linux系统中,用户对文件或目录的访问权限除了r、w、x三种一般权限外,还有SET UID(SUID)、SET GID(SGID)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制

  • SUID权限:是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程序文件所属者的权限。

  • SGID权限:

    • 文件: 如 果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将会变成该程序文件的所属组
    • 目录, 如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A目录的所属组
  • Sticky Bit权限:当前只针对目录有效, 对文件没有效果

    • 在 具 有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目录时, 只有文件拥有者与 root 才有权力删除。
  • 设置文件和目录的特殊权限:

    • 文字设定法:

      1
      chmod a=trwx 文件名
      1
      使用“u±s”、“g±s”、“o±t”的字符权限模式分别用于添加和移除SUID、GUID、sticky权限
    • 文字设定法:

      1
      chmod 1777 文件名
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      # 若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示
      # 后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字
      0——表示不设置特殊权限
      1——表示只设置sticky
      2——表示只设置GUID权限
      3——表示只设置SGID和sticky权限
      4——表示只设置SUID权限
      5——表示只设置SUID和sticky权限
      6——表示只设置SUID和SGID
      7——表示同时设置SUID、GUID、sticky3种权限
  • 查看文件是否含有特殊权限:

    1
    2
    # 权限后有.即为拥有特殊权限
    drwsr-sr-x. 2 root temp 6 Oct 16 22:27 dir

3.ACL权限:(指定用户权限)

  • ACL 权限分配:给指定的用户指定目录分配指定的权限

  • 查看ACL权限:getfacl 文件名

    1
    getfacl cw   
    1
    2
    3
    # 注意如下所示,如果某个目录或文件下有 + 标志,说明其具有 acl 权限。
    [root@kongd ~]# ll -d /project/
    drwxrwx---+ 2 root QQgroup 6 12月 30 14:15 /project/
  • 设定ACL权限:setfacl 选项 文件名

    参数 说明
    -m(modify) 设定 ACL 权限。如果是给予用户 ACL 权限,则使用 u:用户名:权限 格式赋予;如果是给予组ACL 权限,则使用 g:组名:权限” 格式赋予;
    -x(remove) 删除指定的 ACL 权限
    -b(remove) 删除所有的 ACL 权限
    -d(default) 设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限
    -k(remove-default) 删除默认 ACL 权限
    -R(recursive) 递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效
    1
    setfacl -m u:qv123:rx /project/
  • 删除acl权限:

    1
    2
    3
    4
    5
    6
    # 删除指定用户的 ACL 权限
    setfacl -x u:用户名 文件名
    # 删除指定用户组的 ACL 权限
    setfacl -x g:组名 文件名
    # 删除文件的所有 ACL 权限
    setfacl -b 文件名
  • 最大有效权限 mask:

    • 给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限

    • 查看 mask 的权限:

      1
      getfacl 文件名

4.权限掩码umask:

  • 设置新建文件或目录的默认权限

    • 在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关,其具体关系是:

      1
      2
      新建文件的默认权限=0666-umask值
      新建目录的默认权限=0777-umask值
    • umask:查看默认umask值

      1
      2
      3
      4
      5
      6
      7
      [root@localhost ~]# umask  //查看当前用户的umask权限
      0022
      [root@localhost ~]# touch file800
      [root@localhost ~]# mkdir dir800
      [root@localhost ~]# ll -d dir800 file800
      drwxr-xr-x. 2 root root 4096 3月 11 19:40 dir800
      -rw-r--r--. 1 root root 0 3月 11 19:40 file800
    • umask [num]:修改shell umask值(临时)

      1
      2
      3
      4
      5
      6
      [root@localhost ~]# umask 000
      [root@localhost ~]# mkdir dir900
      [root@localhost ~]# touch file900
      [root@localhost ~]# ll -d dir900 file900
      drwxrwxrwx. 2 root root 4096 3月 11 19:44 dir900
      -rw-rw-rw-. 1 root root 0 3月 11 19:44 file900
    • 修改shell umask值(永久)

      1
      2
      3
      4
      5
      6
      7
      [root@localhost ~]# vim /etc/profile
      if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
      umask 002
      else
      umask 022
      fi
      [root@localhost ~]# source /etc/profile //立即在当前shell中生效

10.管理Linux的联网:

1.配置网路:

  • ip命令:使用ip命令配置临时生效的网络连接:

    1
    [root@master ~]# ip -4 addr add 192.168.168.16/24 dev ens160
  • nmcli命令行工具:

    • 查看网卡设备:

      1
      2
      3
      4
      [root@kongd ~]# nmcli device
      DEVICE TYPE STATE CONNECTION
      ens160 ethernet connected ens160
      lo loopback unmanaged --
      1
      2
      3
      4
      connected:已被NM管理,并且当前有活跃的connection
      disconnected:已被NM管理,但是当前没有活跃的connection
      unmanaged:未被NM管理
      unavailable:不可用,NM无法管理,通常出现于网卡为down的时候
    • 查看配置文件:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      cat /etc/sysconfig/network-scripts/ifcfg-[会话名]
      TYPE=Ethernet
      PROXY_METHOD=none
      BROWSER_ONLY=no
      BOOTPROTO=none # IP地址获取方式
      IPADDR=192.168.1.100 # ip地址
      PREFIX=24 # 掩码
      IPADDR1=192.168.1.101
      PREFIX1=32
      GATEWAY=192.168.1.254
      DNS1=8.8.8.8
      DNS2=4.4.4.4
      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=ethX-test # 会话的名称
      UUID=9a10ad89-437c-4caa-949c-a394a6d28c8d # 进程唯一标识
      DEVICE=ethX # 网卡名
      ONBOOT=yes # 开机自启
    • 查看dns配置文件:

      1
      cat /etc/resolv.conf
    • 查看相应的会话:

      1
      2
      3
      4
      5
      6
      [root@qv123 ~]# nmcli connection
      # NAME会话名,DEVICE网卡名
      # 一个网卡可以有多个会话,但同时只能有一个会话生效;一个会话可以配置多个IP地址
      NAME UUID TYPE DEVICE
      ens160 9849f46a-faae-4433-abe1-2facd03f6370 ethernet ens160
      virbr0 df202f4e-aedc-4d44-9e4b-0a15ea303d35 bridge virbr0
      • nmcli connection的选项
      选项 说明
      modify 配置已存在的会话
      add 新建会话
      up 连接会话
      down 断开会话
      delete 删除会话
    • 配置已存在会话的网卡的ip地址(非交互式)

      1
      2
      3
      4
      5
      # 先将dhcp变为none
      # manual:手工的,auto:获取方式为dhcp
      # autoconnect yes:开机自动连接这个会话
      [root@kongd ~]# nmcli connection modify [会话名] ipv4.method manual ipv4.addresses 192.168.73.149/24 ipv4.gateway 192.168.73.2 ipv4.dns 180.76.76.76 autoconnect yes
      [root@kongd ~]# nmcli c up ens160 # 重新加载配置文件(最好选择重启系统)
    • 添加新的会话

      1
      nmcli c add type ethernet con-name [会话名] ifname [网卡名] ipv4.addresses '192.168.73.240/24,192.168.73.241/24' ipv4.gateway '192.168.73.2' ipv4.dns '180.76.76.76' ipv4.method manual autoconnect yes
      1
      2
      3
      4
      5
      6
      type ethernet:创建连接时候必须指定类型,类型有很多,可以通过 nmcli c add type -h 看到,这里指定为ethernet。
      con-name ethX-test:ethX-test表示连接(connection)的名字,这个名字可以任意定义,无需和网卡名相同
      ifname ethX:ethX表示网卡名,这个ethX必须是在 nmcli d 里能看到的网卡的名字
      ipv4.method:默认为auto,对应网卡配置文件里的BOOTPROTO=dhcp;
      ipv4.method manual,对应网卡配置文件里的BOOTPROTO=none,即只有静态ip
      autoconnect yes:对应网卡配置文件里的ONBOOT=yes
    • 连接、断开、删除会话:

      1
      2
      3
      4
      5
      6
      #连接会话
      [root@kongd ~]# nmcli c up [会话名]
      #断开会话
      [root@kongd ~]# nmcli c down [会话名]
      # 删除会话
      [root@kongd ~]# nmcli c delete [会话名]
  • 使用nmtui配置

2.网络测试命令:

  • 使用ping命令测试网络的连通性:ping [选项] <目标主机名或IP地址>

    参数 说明
    -c 数字 用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令
    -s 字节数 设置ping命令发出的消息包的大小,默认发送的测试数据大小为56字节;自动添加8字节的ICMP协议头后,显示的是64字节;再添加20字节的IP协议头,则显示的为84字节。最大设置
    -i 时间间隔 设定前后两次发送ICMP消息包之间的时间间隔,无此选项时,默认时间间隔为1秒。为了保障本机和目标主机的安全,一般不要小于0.2秒
    -t 设置存活时间TTL(Time To Live)
    1
    ping -c 2 www.baidu.com
  • 使用tracepath命令跟踪并显示网络路径:tracepath [选项] <目标主机名或目标IP地址>

    参数 说明
    -n() 对沿途各主机节点,,仅仅获取并输出IP地址,不在每个IP 地址的节点设备上通过DNS查找其主
    -b(both) 对沿途各主机节点同时显示IP地址和主机名
    -l(length) 设置初始的数据包的大小
    -p(port) 设置UDP传输协议的端口(缺省为33434)
    1
    [root@zhanglin network-scripts]# tracepath -b www.baidu.com
    1
    [root@zhanglin network-scripts]# tracepath -l 1024 8.130.17.95
    1
    [root@zhanglin network-scripts]# tracepath -p 22 8.130.17.95
  • traceroute (Windows 系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器

    1
    2
    # traceroute (Windows 系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器
    traceroute -I www.baidu.com # -I表示使用ICMP协议

3.通过域名访问主机:

  1. 配置静态解析,通过/etc/hosts文件实现域名解析

    1
    2
    3
    4
    5
    6
    7
    [root@master ~]# cat /etc/hosts
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.168.11 master
    [root@master ~]# ping master
    PING master (192.168.168.11) 56(84) bytes of data.
    64 bytes from master (192.168.168.11): icmp_seq=1 ttl=64 time=0.131 ms
  2. 通过/etc/resolv.conf文件指派域名解析服务器的地址,由dns服务器做域名解析

    1
    2
    3
    4
    5
    6
    7
    [root@master ~]# cat /etc/resolv.conf
    # Generated by NetworkManager
    nameserver 192.168.168.2
    [root@master ~]# host www.baidu.com
    www.baidu.com is an alias for www.a.shifen.com.
    www.a.shifen.com has address 110.242.68.3
    www.a.shifen.com has address 110.242.68.4
    1
    # 当通过域名访问服务器的时候,其默认解析顺序为hosts文件、resolv.conf文件中的DNS服务器。其响应的先后顺序可在文件/etc/nsswitch.conf中设置。

11.从网站下载文件:

  1. wget命令用于在终端命令行里下载网络文件,英文全称为:“web get”,语法格式为: wget [选项] 网址

    参数 说明
    -P(prefix) 下载到指定目录
    -t(tries) 最大尝试次数
    -b(backgroud) 后台下载模式
    -c(continue) 断点续传s
    -p(page) 下载页面内所有资源,包括图片、视频等
    -r(recursive) 递归下载
    1
    wget http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/s/sl-5.02-1.el8.x86_64.rpm
  2. curl命令是一个网络工具,其主要作用是通过http、https、ftp等方式下载/上传文件

    1
    curl www.baidu.com -o index.html

12.软件包管理RPM和YUM数据库:

1.软件包管理RPM:

  • RPM是红帽包管理(Redhat Package Manager)的缩写

    • 由Red Hat公司提出的一种软件包管理标准

    • 是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)

    • RPM功能通过rpm命令使用不同参数来实现

  • rmp的作用类似于windows上的电脑管家中 “软件管理” ,主要作用是对Linux服务器上的软件包进行对应管理操作,管理分为:查询,卸载,安装。

  • RPM软件包的典型命名格式:

    1
    2
    软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm
    zsh -5.0.2 -14 .el7 .x86_64 .rpm
  • rpm包相关网站http://rpmfind.net/,http://rpm.pbone.net/

  • rpm安装

    参数 说明
    -i(install) 安装软件包
    –nodeps 不验证软件包依赖
    -v(verbose) 提供更多的详细信息输出
    -h(hash) 软件包安装的时候列出哈希标记
    -U(upgrade) 软件包升级
    -e(erase) 软件包卸载
    • 通过本地光盘镜像文件安装rpm包

      1
      2
      3
      4
      #安装tree包
      [root@master Packages]# rpm -ivh tree-1.7.0-15.el8.x86_64.rpm
      #卸载tree包
      [root@master Packages]# rpm -evh tree
    • 从网上下载rpm包并安装:

      1
      wget http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/s/sl-5.02-1.el8.x86_64.rpm
  • rpm查询:(rpm –q 常与下面参数组合使用)

    参数 说明
    -a(all) 查询所有已安装的软件包
    -l(list) 显示已安装软件包的相关文件列表和信息
    -f(file) 查询文件所属软件包
    -i(install) 显示已经安装的rpm软件包信息
    1
    rpm -qa   # 查询所有已经安装的包
    1
    2
    3
    #查询某个包有没有安装(包名不能写错)
    [root@master Packages]# rpm -q httpd
    httpd-2.4.37-43.module+el8.5.0+747+83fae388.3.x86_64
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #查询安装该包后会产生哪些文件
    [root@master Packages]# rpm -ql tree
    /usr/bin/tree
    /usr/lib/.build-id
    /usr/lib/.build-id/47
    /usr/lib/.build-id/47/6e749c56abc75d25e3bc5c29e83507a605fd53
    /usr/share/doc/tree
    /usr/share/doc/tree/LICENSE
    /usr/share/doc/tree/README
    /usr/share/man/man1/tree.1.gz
    1
    2
    3
    #查询该文件由哪个软件包产生
    [root@master Packages]# rpm -qf /usr/bin/ls
    coreutils-8.30-12.el8.x86_64

2.YUM:

  • YUM (Yellow dog Updater,Modified) ,RHEL8中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM)

  • YUM/DNF 功能

    • 在线下载、 安装、 卸载、 升级rpm软件包
    • 自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手工地去安装每一个rpm包
  • 如何实现yum/DNF安装

    • 系统会去读取 /etc/yum.repos.d/ 目录下的 .repo 结尾的文件,从该文件中读取以下内容实现装包
    • 包含各种rpm安装文件的软件仓库(rhel8有两个仓库,rhel7只有一个仓库)
      • BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库
      • AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库
  • 配置 .repo 文件,即yum源

    • 建立本地源:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      [root@kongd ~]# mkdir /media/cdrom
      # 将本地光盘挂载至本地目录/media/cdrom下
      [root@kongd ~]# mount /dev/cdrom /media/cdrom
      # 将/etc/yum.repos.d/目录下的文件清空,然后创建一个repo
      [root@kongd ~]# vim /etc/yum.repos.d/redhat.repo
      # 加入以下内容
      [RHEL8-BaseOS]
      name=RHEL8-BaseOS
      baseurl=file:///media/cdrom/BaseOS
      gpgcheck=0

      [RHEL8-Appstream]
      name=RHEL8-Appstream
      baseurl=file:///media/cdrom/AppStream
      gpgcheck=0
      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
      # 验证是否成功
      [root@kongd ~]# yum repolist
      Failed to set locale, defaulting to C.UTF-8
      Updating Subscription Management repositories.
      Unable to read consumer identity

      This system is not registered with an entitlement server. You can use subscription-manager to register.

      repo id repo name
      RHEL8-Appstream RHEL8-Appstream
      RHEL8-BaseOS RHEL8-BaseOS
      [root@master ~]# yum install bind-utils -y
      Failed to set locale, defaulting to C.UTF-8
      Updating Subscription Management repositories.
      Unable to read consumer identity

      This system is not registered with an entitlement server. You can use subscription-manager to register.

      RHEL8-BaseOS 12 MB/s | 2.4 MB 00:00
      RHEL8-Appstream 18 MB/s | 7.2 MB 00:00
      Last metadata expiration check: 0:00:02 ago on Mon Oct 17 12:02:48 2022.
      Package bind-utils-32:9.11.26-6.el8.x86_64 is already installed.
      Dependencies resolved.
      Nothing to do.
      Complete!
    • 建立网络源:

      1
      2
      3
      4
      # 阿里云网络源,aliyun的镜像站点为https://mirrors.aliyun.com/
      # 清华源镜像站点为https://mirrors.tuna.tsinghua.edu.cn/
      # 中国科技大学镜像站点https://mirrors.ustc.edu.cn/
      # 网易开源镜像站http://mirrors.163.com/
      1
      2
      # 直接通过网络下载配置文件
      wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      [root@master ~]# cat /etc/redhat-release
      Rocky Linux release 8.5 (Green Obsidian)
      # 注:此处先查看自己的发行版本信息,选择相应的仓库。
      # 仓库文件可以自己写也可以从aliyun网站下载
      [root@master ~]# vim /etc/yum.repos.d/aliyun.repo
      # 写入以下信息
      [appstream]
      name=appstream
      baseurl=https://mirrors.aliyun.com/rockylinux/8.5/AppStream/x86_64/os/
      gpgcheck=0
      [baseos]
      name=baseos
      baseurl=https://mirrors.aliyun.com/rockylinux/8.5/BaseOS/x86_64/os/
      gpgcheck=0
  • 查看包、包组相关信息:

    1
    yum repolist [all]   # 查看系统中yum资源库配置信息
    1
    yum list all   # 列出仓库里所有可安装的软件包
    1
    yum list installed [包名]   # 列出己经安装的所有的或指定的rpm包(包名中可使用匹配符)
    1
    yum info 包名   # 查看指定软件包的详细信息
    1
    yum grouplist   # 查看仓库里而所有包组
    1
    yum groupinfo 包组名   # 查看指定包组里而的详细信息
  • 安装、更新包和包组:

    1
    2
    yum install [-y] 包名   # 安装指定的软件包,-y则在工作过程中需要使用者响应, 这个选个参数可以直接回答yes
    # 如果安装出现错误incorrect checksum,挂载/dev/cdrom
    1
    yum update [-y] 包名    # 升级指定的软件包或主机中所有已安装的软件包
    1
    yum groupinstall 包组名   # 安装指定包组里面的所有包
  • 卸载软件包:

    1
    yum remove [-y] 包名 # 卸载已经安装在系统中的指定的软件包
  • 搜索文件:

    1
    yum provides 文件名  # 查找指定的文件属于哪个包
    1
    yum whatprovides /etc/fstab   # 查看这个文件是由那个包提供的
    1
    yum search 模糊包名  # 查看模糊包名的软件包
  • 清空缓存:

    1
    yum clean packages all   # 清除下载到本机的指定的软件包或所有软件包的yum源缓存
  • RHEL8相应地在yum命令下,增加了一个module子命令。多了个模块(module)、模块下多了个序列(Stream)、序列下多了个组合(profile)

    1
    yum module list  # 列出模块
    1
    yum module list [模块名]   # 列出指定模块

3.源代码编译:

4.进程简介

  • 程序: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下

  • 进程:进程是已启动的可执行程序的运行实例。

    • 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
    • 进程还具有并发性和交往性,而程序却是封闭的
  • 线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
    • 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行
  • 进程分类

5.查看进程:

  • ps命令查看进程:

    参数 说明
    -a(all) 显示所有用户的进程
    -u(user) 显示用户名和启动时间
    -x() 显示 没有控制终端的进程
    -e() 显示所有进程,包括没有控制终端的进程
    -l(long) 长格式显示
    -w(width) 宽行显示,可以使用多个 w 进行加宽显示
    -f(full) 做一个更完整的输出
    1
    2
    3
    4
    5
    #查看当前用户的进程
    [root@localhost ~]# ps -l
    F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
    4 S 0 42097 42091 0 80 0 - 29040 wait pts/0 00:00:00 bash
    0 R 0 43256 42097 0 80 0 - 34857 - pts/0 00:00:00 ps
    1
    2
    3
    4
    5
    6
    #查看所有用户执行的进程的详细信息
    [root@localhost ~]# ps -le
    F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
    4 S 0 1 0 0 80 0 - 44776 do_epo ? 00:00:01 systemd
    1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd
    1 I 0 3 2 0 60 -20 - 0 - ? 00:00:00 rcu_gp
    1
    2
    3
    4
    5
    6
    #查看当前用户的进程
    [root@localhost ~]# ps -u
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1280 2.2 0.2 237304 5408 tty1 Ss+ 15:54 0:00 -bash
    root 1415 0.1 0.2 237172 5092 pts/0 Ss 15:55 0:00 -bash
    root 1452 0.0 0.2 268484 4008 pts/0 R+ 15:55 0:00 ps -u
    1
    2
    #查看进程树
    [root@localhost ~]# pstree
    1
    2
    3
    #查看指定进程的PID
    [root@localhost ~]# ps aux | grep sshd
    root 752 0.0 0.3 92288 6976 ? Ss 15:46 0:00
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #查看指定进程的PID
    [root@localhost ~]# pgrep -l sshd
    752 sshd
    1408 sshd
    11.5.2 top命令查看进程
    语法: top [-d 数字] | [-bnp]
    top的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,后面为进程信息区。
    统计信息区
    1412 sshd
    1413 sshd
    1438 sshd
    1
    2
    3
    #查看指定进程的PID
    [root@localhost ~]# pidof sshd
    1438 1413 1412 1408 752
    1
    2
    # 查看系统中所有包含其他使用者的进程
    ps -aux
  • top命令查看进程:(top [-d 数字] | [-bnp])(动态查看)

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

6.信号控制进程:

1
kill -l     # 列出所有支持的信号
1
killall vim    # 给所有vim进程发送信号

7.作业控制:

  • 作业控制是一个命令行功能,允许一个shell 实例来运行和管理多个命令。如果没有作业控制,父进程fork()一个子进程后,将sleeping,直到子进程退出。使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell 可以在子进程运行期间返回接受其他命令

  • foreground: 前台进程是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。

  • background: 后台进程没有控制终端,它不需要与终端交互。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@localhost ~]# [命令] &                 #运行程序(时),让其在后台执

    [root@localhost ~]# sleep 4000 #ctrl+z可以将前台的任务放到
    后台中暂停
    [2]+ Stopped sleep 4000
    [root@localhost ~]# ps aux |grep sleep
    root 8895 0.0 0.0 100900 556 pts/0 S 12:13 0:00 sleep 3000
    root 8896 0.0 0.0 100900 556 pts/0 T 12:13 0:00 sleep 4000
    #查看当前终端放在后台的进程( jobs
    [root@localhost ~]# jobs
    [1]- Running sleep 3000 &
    [2]+ Stopped sleep 4000
    +表示最近被放到后台的工作,-表示最近第二个被放到后台中的工作,超过第三个就不会有+/-符号存在了
    [root@localhost ~]# bg %2 #让作业2在后台继续运行
    [root@localhost ~]# fg %1 #将作业1调回到前台
    [root@localhost ~]# kill %1 #kill 1,终止工作号为1的进程

13.磁盘管理:

1.维护基本存储空间:

  • 在创建Linux分区时,一定要创建SWAP/根分区两个分区

1.分区的两种格式:

  • MBR分区:

    • MBR(Master Boot Record,主引导记录)是传统的分区机制,使用BIOS引导PC设备,寻址空间只有32bit长
    • 分区空间最大支持2.2TB
    • 支持的分区数量:4个主分区或者3个主分区1个扩展分区
    • 为什么MBR最多只能有4个主分区:因为分区表占据64个字节,其中每个分区的信息占用16个字节,分区表里面可以记录四个分区信息描述
    • MBR分区类型:
      • 一块硬盘最多有3个分区(扩展分区+主分区),并且扩展分区最多一个
      • 主分区(primary partition):
        • 一块硬盘最多4个主分区,主分区不可以再进行二次分区
        • 主分区可以直接建立文件系统,存放数据
        • 可以用来引导、启动操作系统
      • 扩展分区(extended partition)
        • 一块硬盘最多一个扩展分区
        • 不能创建文件系统
        • 可以划分逻辑分区
      • 逻辑分区(logical partition):
        • 可以创建文件系统,存放数据;
        • 逻辑分区的数量没有限制
  • GPT分区:

    • GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式
    • 在默认情况下,GPT最多可支持128个分区
    • 支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)
    • GPT分区表自带备份
    • 向后兼容MBR,GPT分区表上包含保护性的MBR区域

2. 查看磁盘信息(块设备):

1
2
3
4
5
6
7
8
9
[root@kongd ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 6.6G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 2G 0 disk

不同接口的磁盘在linux中的设备文件名不同

image-20221017164728990

3.使用fdisk管理分区:

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

  • 命令: fdisk 设备名

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

  • 进入分区后的指令:

    指令 作用 指令 作用
    a 调整磁盘的启动分区 p(print) 显示当前磁盘的分区信息
    d(delete) 删除磁盘分区 t(type) 更改分区类型
    l() 显示所有支持的分区类型 u(units) 切换所显示的分区大小单位
    m(menu) 查看所有指令的帮助信息 n(new) 创建新分区
    q(quit) 不保存更改,退出fdisk命令 w(wirter) 把修改写入磁盘分区表,然后退出fdisk命令
    g(gpt) 新建一个空的GPT分区表 o() 新建一个空的DOS分区表
  • 通过lsblk命令查看设备名:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@qv123 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 10.2G 0 rom
    nvme0n1 259:0 0 20G 0 disk
    |-nvme0n1p1 259:1 0 1G 0 part /boot
    `-nvme0n1p2 259:2 0 19G 0 part
    |-rhel-root 253:0 0 17G 0 lvm /
    `-rhel-swap 253:1 0 2G 0 lvm [SWAP]
    nvme0n2 259:3 0 10G 0 disk
  • 使用fdisk命令,进入设备

    1
    fdisk /dev/设备名
  • 查看帮助信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Command (m for help): m         # 输入m可查看帮助信息
    Help:
    DOS (MBR)
    a toggle a bootable flag
    b edit nested BSD disklabel
    c toggle the dos compatibility flag
    Generic
    d delete a partition
    F list free unpartitioned space
    l list known partition types
    n add a new partition
    p print the partition table
    t change a partition type
    v verify the partition table
    i print information about a partition
    ....
  • 创建分区:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Command (m for help): n    # 输入n创建新分区
    Partition type
    p primary (0 primary, 0 extended, 4 free) # 输入p创建主分区
    e extended (container for logical partitions) # 输入e创建扩展分区
    # 创建主分区
    Select (default p): p # 输入p创建主分区
    Partition number (1-4, default 1): 1 # 选择主分区号,输入1表示第一个主分区
    First sector (2048-10485759, default 2048): # 直接按回车从当前第2048个扇区开始
    # 分区
    Last sector, +sectors or +size{K,M,G,T,P} (2048-10485759, default 10485759):+300M # 设置第一个分区为300M
    Created a new partition 1 of type 'Linux' and of size 300 MiB.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 创建扩展分区
    Command (m for help): n # 输入n创建新分区
    Partition type
    p primary (1 primary, 0 extended, 3 free)
    e extended (container for logical partitions)
    Select (default p): e # 输入e创建扩展分区
    Partition number (2-4, default 2): 2 # 选择分区号,输入2表示第二个分区
    First sector (616448-10485759, default 616448): # 直接按回车从当前第616448个扇区开始分区
    Last sector, +sectors or +size{K,M,G,T,P} (616448-10485759, default 10485759):+500M # 添加一个500M的分区
    Created a new partition 2 of type 'Extended' and of size 500 MiB.
  • 查看分区信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Command (m for help): p
    Disk /dev/nvme0n2: 10 GiB, 10737418240 bytes, 20971520 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x2b5ee117

    Device Boot Start End Sectors Size Id Type
    /dev/nvme0n2p1 2048 616447 614400 300M 83 Linux
    /dev/nvme0n2p2 616448 1640447 1024000 500M 83 L
  • 删除分区:

    1
    2
    3
    Command (m for help): d #输入d删除分区
    Partition number (1,2, default 2): 2 #输入2,选择需要删除的是第二个分区
    Partition 2 has been deleted.
  • 保存退出交互界面:

    1
    2
    3
    4
    Command (m for help): w 
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
  • 查看磁盘信息:(会发现nvme0n2磁盘被分区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@qv123 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 10.2G 0 rom
    nvme0n1 259:0 0 20G 0 disk
    |-nvme0n1p1 259:1 0 1G 0 part /boot
    `-nvme0n1p2 259:2 0 19G 0 part
    |-rhel-root 253:0 0 17G 0 lvm /
    `-rhel-swap 253:1 0 2G 0 lvm [SWAP]
    nvme0n2 259:3 0 10G 0 disk
    |-nvme0n2p1 259:6 0 300M 0 part
    `-nvme0n2p2 259:7 0 1K 0 part

4.使用gdisk管理分区:

  • gdisk命令工具默认将磁盘划分为GPT格式的分区

  • 通过lsblk命令查看设备名:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@qv123 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 10.2G 0 rom
    nvme0n1 259:0 0 20G 0 disk
    |-nvme0n1p1 259:1 0 1G 0 part /boot
    `-nvme0n1p2 259:2 0 19G 0 part
    |-rhel-root 253:0 0 17G 0 lvm /
    `-rhel-swap 253:1 0 2G 0 lvm [SWAP]
    nvme0n2 259:3 0 10G 0 disk
  • 使用gdisk命令,进入设备

    1
    gdisk /dev/设备名
  • 查看帮助信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Command (? for help): ?
    b back up GPT data to a file
    c change a partition's name
    d delete a partition
    i show detailed information on a partition
    l list known partition types
    n add a new partition
    o create a new empty GUID partition table (GPT)
    p print the partition table
    q quit without saving changes
    r recovery and transformation options (experts only)
    s sort partitions
    t change a partition's type code
    v verify disk
    w write table to disk and exit
    x extra functionality (experts only)
    ? print this menu
  • 创建分区:(GPT分区没有主分区和扩展分区之说,最大支持1228个分区)

    1
    2
    3
    4
    5
    6
    7
    8
    Command (? for help): n
    Partition number (2-128, default 2): 2 # 输入分区编号,默认为2,因为是硬盘的第一块分区
    First sector (34-20971486, default = 616448) or {+-}size{KMGTP}: # 输入扇区的开始位置,选择默认即可,也可手动指定
    # 输入扇区的结束位置,一般都是指定磁盘大小,这里输入+300M 表示新分区大小为300M
    Last sector (616448-20971486, default = 20971486) or {+-}size{KMGTP}: +300M
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300): # 默认即可,分区完成后可以修改
    Changed type of partition to 'Linux filesystem'
  • 查看分区情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Command (? for help): p
    Disk /dev/nvme0n2: 20971520 sectors, 10.0 GiB
    Model: VMware Virtual NVMe Disk
    Sector size (logical/physical): 512/512 bytes
    Disk identifier (GUID): F6277F8B-B83C-46B5-BDF5-3585DD416EFF
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 20971486
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 19742653 sectors (9.4 GiB)

    Number Start (sector) End (sector) Size Code Name
    1 2048 616447 300.0 MiB 8300 Linux filesystem
    2 616448 1230847 300.0 MiB 8300 Linux filesystem
  • 保存退出:

    1
    2
    3
    4
    5
    6
    7
    8
    Command (? for help): w

    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/nvme0n2.
    The operation has completed successfully.
  • 使用lsblk命令查看磁盘信息:(可以发现nvme0n2磁盘被分为了三个分区)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@qv123 ~]# lsblk
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sr0 11:0 1 10.2G 0 rom
    nvme0n1 259:0 0 20G 0 disk
    |-nvme0n1p1 259:1 0 1G 0 part /boot
    `-nvme0n1p2 259:2 0 19G 0 part
    |-rhel-root 253:0 0 17G 0 lvm /
    `-rhel-swap 253:1 0 2G 0 lvm [SWAP]
    nvme0n2 259:3 0 10G 0 disk
    |-nvme0n2p1 259:4 0 300M 0 part
    |-nvme0n2p2 259:5 0 300M 0 part
    `-nvme0n2p3 259:6 0 500M 0 part

5.使用parted划分分区:

  • 交互式:

    • 通过lsblk命令查看设备名:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      [root@qv123 ~]# lsblk
      NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      sr0 11:0 1 10.2G 0 rom
      nvme0n1 259:0 0 20G 0 disk
      |-nvme0n1p1 259:1 0 1G 0 part /boot
      `-nvme0n1p2 259:2 0 19G 0 part
      |-rhel-root 253:0 0 17G 0 lvm /
      `-rhel-swap 253:1 0 2G 0 lvm [SWAP]
      nvme0n2 259:3 0 10G 0 disk
    • 使用parted命令,进入设备

      1
      parted /dev/设备名
    • 查看帮助信息:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      (parted) help                                                             
      align-check TYPE N check partition N for TYPE(min|opt) alignment
      help [COMMAND] print general help, or help on COMMAND
      mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
      mkpart PART-TYPE [FS-TYPE] START END make a partition
      name NUMBER NAME name partition NUMBER as NAME
      print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found
      partitions, or a particular partition
      quit exit program
      rescue START END rescue a lost partition near START and END
      resizepart NUMBER END resize partition NUMBER
      rm NUMBER delete partition NUMBER
      select DEVICE choose the device to edit
      disk_set FLAG STATE change the FLAG on selected device
      disk_toggle [FLAG] toggle the state of FLAG on selected device
      set NUMBER FLAG STATE change the FLAG on partition NUMBER
      toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
      unit UNIT set the default unit to UNIT
      version display the version number and copyright information of GNU Parted
    • 创建分区:(先创建分区表,再进行分区操作)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      (parted) mklabel                                                          
      New disk label type? yes
      parted: invalid token: yes
      # 默认为msdos形式的分区,我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,输入gpt后回车)
      New disk label type? gpt
      Warning: The existing disk label on /dev/nvme0n2 will be destroyed and all data on this disk will be lost. Do you want
      to continue?
      Yes/No? yes
      (parted) mkpart # 进行分区操作
      Partition name? []? dp2 # 输入分区名称(自定义)
      # #文件系统 (类型:ext4,ext3,ext2,xfs,其他...... )
      File system type? [ext2]?
      # 开始位置 (0:设定当前分区的起始点为磁盘的第一个扇区;1G:设定当前分区的起始点为磁盘的1G处开始)
      Start? 0
      # 结束位置(-1:设定当前分区的结束点为磁盘的最后一个扇区;10G:设定当前分区的结束点为磁盘的10G处)
      End? 10G
      Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
      Ignore/Cancel?
      Ignore/Cancel? Ignore
    • 查看分区情况:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      (parted) p                                                                
      Model: NVMe Device (nvme)
      Disk /dev/nvme0n2: 10.7GB
      Sector size (logical/physical): 512B/512B
      Partition Table: gpt
      Disk Flags:

      Number Start End Size File system Name Flags
      1 17.4kB 10.0GB 10000MB ext2 dp2
    • 保存退出:

      1
      2
      (parted) quit                                                             
      Information: You may need to update /etc/fstab.
    • 使用lsblk命令查看磁盘信息:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      [root@qv123 ~]# lsblk                                                     
      NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      sr0 11:0 1 10.2G 0 rom
      nvme0n1 259:0 0 20G 0 disk
      |-nvme0n1p1 259:1 0 1G 0 part /boot
      `-nvme0n1p2 259:2 0 19G 0 part
      |-rhel-root 253:0 0 17G 0 lvm /
      `-rhel-swap 253:1 0 2G 0 lvm [SWAP]
      nvme0n2 259:3 0 10G 0 disk
      `-nvme0n2p1 259:5 0 9.3G 0 part
  • 非交互式:可将命令行写在脚本中,运行脚本实现一键创建;适用于远程批量管理多台主机的场景

6.格式化:

  • 格式化的目的: 是为了形成文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

  • 命令格式: mkfs|mkfs.xfs|mkfs.ext4 [选项] 分区的设备名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@qv123 ~]# mkfs.ext4 /dev/nvme0n2p1
    mke2fs 1.45.6 (20-Mar-2020)
    Creating filesystem with 2441402 4k blocks and 610800 inodes
    Filesystem UUID: a30d3029-0a10-420f-808e-ed969017e0db
    Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

    Allocating group tables: done
    Writing inode tables: done
    Creating journal (16384 blocks): done
    Writing superblocks and filesystem accounting information: done
  • 选项:

    1
    2
    3
    -t:文件系统类型——当命令名为mkfs时,指定要创建的文件系统的类型(如:xfs、ext4、vfat等)。当命令名为mkfs.xfs、mkfs.ext4等时,不需要该选项。
    -c:建立文件系统前先检查坏块。
    -V:输出建立文件系统的详细信息。
  • 注意:如果已有其他文件系统创建在此分区,必须在 mkfs.xfs 命令中加上选项 -f 强行进行格式化

    1
    2
    3
    4
    5
    6
    7
    8
    [root@localhost ~]# mkfs.xfs /dev/sda1
    [root@localhost ~]# mkfs.ext4 /dev/sda2
    #查看格式化后的磁盘分区信息
    [root@localhost ~]# blkid
    /dev/sda1: UUID="350148b0-7975-4114-b91d-35ac1b211fd3" BLOCK_SIZE="512"
    TYPE="xfs" PARTLABEL="primary" PARTUUID="e272d830-5778-48cd-aba6-230271397716"
    /dev/sda2: UUID="acf864ef-1778-4bc4-8e5d-260adfe38b69" BLOCK_SIZE="4096"
    TYPE="ext4" PARTUUID="71ca21ff-cd76-a946-9dc6-4a8dd1022e99"

7.挂载:(格式化才能挂载)

  • 挂载就是将一个分区或者设备挂载至挂载点目录

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

  • 挂载目录:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@qv123 ~]# mount /dev/nvme0n2p1 /mnt
    [root@qv123 ~]# blkid
    /dev/nvme0n1p1: UUID="2a26a2b4-a069-4adf-a9cf-880ccc72962c" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="ce4159d8-01"
    /dev/nvme0n1p2: UUID="AI2k3V-6Bfw-0WL0-UXAK-sRB3-JYLB-j6bybw" TYPE="LVM2_member" PARTUUID="ce4159d8-02"
    /dev/sr0: BLOCK_SIZE="2048" UUID="2021-10-13-03-57-25-00" LABEL="RHEL-8-5-0-BaseOS-x86_64" TYPE="iso9660" PTUUID="4d694e6c" PTTYPE="dos"
    /dev/mapper/rhel-root: UUID="e3351e8b-648c-40fa-b343-5d50d8070dbe" BLOCK_SIZE="512" TYPE="xfs"
    /dev/mapper/rhel-swap: UUID="d014eafb-cbb9-4776-aaf6-812eb2e16ad7" TYPE="swap"
    /dev/nvme0n2p1: UUID="a30d3029-0a10-420f-808e-ed969017e0db" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="dp2" PARTUUID="229f8703-055b-4fa2-b591-d9b6f927a46b"
    /dev/nvme0n1: PTUUID="ce4159d8" PTTYPE="dos"
    /dev/nvme0n2: PTUUID="ab36e107-8417-449f-a2a1-df2cee5646f8" PTTYPE="gpt"
    [root@qv123 ~]# mount | grep /dev/nvme0n2
    /dev/nvme0n2p1 on /mnt type ext4 (rw,relatime,seclabel)
  • 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载

    1
    umount 挂载点目录或存储设备名
  • 设置系统启动时的自动挂载手动挂载的分区会在系统重启后失效,若用户需要永久挂载分区,则需要通过编辑 /etc/fstab 文件来实现。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。

    字段 说明
    设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
    挂载目录 指定要挂载到的目录,需在挂载前创建好
    格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
    权限选项 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
    是否备份 若为1则开机后使用dump进行磁盘备份,为0则不备份
    是否自检 若为1则开机后自动进行磁盘自检,为0则不自检
    1
    2
    3
    4
    [root@kongd ~]# tail -3 /etc/fstab
    /dev/mapper/rhel-root / xfs defaults 0 0
    UUID=806badd7-5a3b-4549-bcc1-3a43b07b6bac /boot xfs defaults 0 0
    /dev/mapper/rhel-swap swap swap defaults 0 0

8.管理交换分区:

  • 在Linux系统中,swap交换分区的作用类似于Windows系统中“虚拟内存”。当有程序被调入内存后,但是该程序又不是常被CPU所取用时,那么这些不常被使用的程序将会被放到硬盘的swap交换分区当中,而将速度较快的内存空间释放给真正需要的程序使用,以避免由于物理内存不足而造成的系统效能低的问题。如果系统没有swap交换分区,或者现有交换分区的容量不够用时,可扩展swap交换分区。扩展swap交换分区的方式有两种:

    • 以磁盘分区的方式扩展swap交换分区
    • 以镜像文件的方式扩展swap交换分区
  • 命令:

    命令 功能
    mkswap 分区设备名 将指定的分区格式化为swap交换文件系统
    swapon 交换分区设备名 | -a 启用(或激活)指定的交换分区或所有交换分区
    swapoff 交换分区设备名 | -a 禁用指定的交换分区或所有交换分区
    swapon -s 查看交换分区的使用情况
    free -m 以兆字节为单位显示物理内存、交换分区的使用情况
    • 新建分区扩展交换空间:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # 格式化交换空间
      [root@localhost ~]#mkswap /dev/sda5
      # 激活当前的交换空间
      [root@localhost ~]#swapon /dev/sda5
      # 禁用指定的交换分区
      [root@localhost ~]#swapoff /dev/sdb1 关闭swap
      # 查看当前激活的swap分区
      [root@localhost ~]#swapon -s
      [root@localhost ~]# cat /proc/swaps
      Filename Type Size Used Priority
      /dev/nvme0n1p3 partition 2097148 0 -2
      # 写入/etc/fstab/,实现开机挂载
      [root@localhost ~]# vim /etc/fstab
      /dev/sda5 swap swap defaults 0 0
    • 新建文件扩展交换空间:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      [root@localhost ~]# dd if=/dev/zero of=/swap bs=1M count=1024
      创建一个文件/swap,从无限零资源去读,每一块大小为1M,一共有1024块
      不能用cat去查看,不然会卡死(块设备)
      #格式化交换空间
      [root@localhost ~]# mkswap /swap
      [root@localhost ~]# swapon /swap
      [root@localhost ~]# chmod 0600 /swap
      [root@localhost ~]# swapon -s 查看当前的虚拟内存
      #写入/etc/fstab/,实现开机挂载
      [root@localhost ~]# vim /etc/fstab
      /swap swap swap defaults 0 0

2.查看磁盘空间使用量:df,du:

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

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

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

    由于df主要读取的数据几乎都是针对整个文件系统,因此读取的范围主要是在Super block内的信息,
    所以这个命令显示结果的速度非常快速。
    1
    df [-ahikHTm] [目录或文件名]
  • du:显示文件磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB。

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

    1
    2
    3
    4
    5
    6
    -a(all) :  列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
    -h(human) : 以人们较易读的容量格式(G/M)显示;
    -s() : 列出总量,而不列出每个个别的目录占用了容量;
    -S : 不包括子目录下的总计,与-s有点差别;
    -k(kb) : 以KB列出容量显示;
    -m(mb) : 以MB列出容量显示。
    1
    du [-ahskm] 文件或目录名称