一、文件系统命令

1. FHS

  • 1.1 FHS:文件系统层次化标准
  • 1.2 拓扑:倒置的树形结构,一切都从根目录(/)开始
  • 1.3 常见一级目录存储文件功能
    • /boot:存储开机所需文件,如:内核、镜像、菜单的配置文件
    • /dev:以文件的形式存储设备及接口,如:硬盘、光驱等
    • /bin:存储命令程序及配置文件
    • /lib:开机时用到的函数及数据
    • /root:root账户的家目录,相当于~
    • /var:存储系统产生的日志文件
    • /media:用于挂载设备(光驱)的目录
    • /user:存储应用程序的安装目录
    • /etc:配置文件存储目录
  • 1.4 注意:目录名称区分大小写,FHS意义在于按照功能进行分类存储文件

2. 文件操作命令

  • 2.1 新建目录命令

    • 格式:mkdir -参数 目录名称

    • 参数:

      • -p:创建递归目录(包含下级目录的多级目录)
      • -m:对新建的目录设置存取权限
    • 例:

      image-20201006155715956
  • 2.2 新建文件命令

    • 格式:touch -参数 文件名

    • 例1:touch n{1,2,3,4,5,6,7,8}.txt

      image-20201006160252021
    • 例2:

      image-20201006162125240
    • 例3:

      • touch test.c

      • vim test.c

      • #include<stdio.h>
        int main(void){
            printf("Hello World");
            return 0;
        }
        
      • gcc test.c

      • ls -a

        image-20201006163827628
      • ./a.out

  • 2.3 删除命令

    • 格式:rm -参数 文件名

    • 参数:

      • -r:删除目录

      • -f:强制删除,不确认

        image-20201006162615901
  • 2.4 pwd命令:显示绝对路径

  • 2.5 cp拷贝命令

    • 格式:cp -参数 源文件 目标文件
    • 参数:
      • -r:拷贝目录
      • -p:保留原始文件属性
      • -d:若为链接文件,则保留链接文件属性
    • 注意:
      • 若目标为目录,则拷贝到目录中
      • 若目标为文件且不存在,则正常拷贝
      • 若目标为文件且名称不同,则改名后拷贝
  • 2.6 mv移动文件命令

    • 格式:mv -参数 源文件 目标文件
    • 注意:
      • 若目标为目录,则剪切移动到目录中
      • 若目标为文件,则修改名称(无同名目录)
  • 2.7 大容量文件生成命令

    • 格式:dd if=数据来源 of=新文件名 count=数据块个数 bs=单个块容量

    • 功能:按照指定容量制作大文件,数据来源一般为算法设备或光驱

    • if=/dev/zero:zero为可输出指定容量大小的数据0

    • if=/dev/sr0:光驱(cdrom)

    • 例:

      • 制作400MB大文件:dd if=/dev/zero of=xin.txt count=2 bs=200MB
      • 制作光盘镜像:dd if=/dev/sr0 of=centos7_x86_64.iso
  • 2.8 file命令

    • 作用:查看文件类型
    • 格式:file 文件名
    • 文件类型
      • empty:空文件
      • ASCII File:ASCII文件
      • character special:字符设备文件
      • block special:块设备文件
      • directory:目录
      • link:链接文件
  • 2.9 cat命令

    • 作用:输出文本内容

    • 格式:cat 文件名

    • 参数:

      • -n:显示行号
      • -b:排除空行,非空行显示行号,从1开始显示
    • 将文件显示内容输出到另一文件

      • touch temp.txt
      • cat /etc/passwd > temp.txt
      • cat temp.txt
    • 文档合并:

      image-20201007165810521
  • 2.10 tac命令

    • 作用:倒序查看文件内容

    • 格式:tac 文件名

      image-20201007170247545
  • 2.11 more命令

    • 作用:翻页查看文件内容,适用于内容较多的文件
    • 格式:more 文件名
    • 参数
      • -s:将输出文件中的空行减少为1个空行
      • -p:先清屏后显示
      • -数字:如-10,表示1屏显示10行,包括空行
    • 例:
      • more -sp /etc/passwd
      • more -5 /etc/passwd
    • 注意:
      • 点击空格进行翻页浏览
      • 点击回车进行换行浏览
      • 点击q键退出浏览
  • 2.12 less命令

    • 作用:同more,使用键盘上下键浏览
  • 2.13 head命令

    • 作用:显示文本文件的前n行
    • 格式:head -数字 文件名
  • 2.14 wc命令

    • 作用:统计文本文件内容的个数

    • 格式:wc -参数 文件名

    • 参数

      • -l:显示行数
      • -w:显示单词数
      • -c:显示字节数
    • 不加参数全显示

    • 例:显示文件前十行后统计字节数

      image-20201007171748647
  • 2.15 stat命令

    • 作用:显示文件的存储信息
    • 格式:stat 文件名

3. 文件查找命令

  • 作用:按照条件查找文件

  • 格式:find 查找路径 查找条件 操作

  • 查找条件:

    • 文件名称

      • -name:按照文件名检索,文件名最好加上双引号

        • image-20201008091901205
      • 通配符:

        • *:表示任意内容匹配任意次数
        • ?:表示任意内容匹配一次
        • image-20201008092204622
        • image-20201008092255826
        • image-20201008092635098
      • 以扩展名查询文件

        • find /etc -name "*.cfg"

          image-20201008093035974
          image-20201008093054674
    • 文件属性

      • -user:按照所有者进行匹配(root账户或普通账户)

        • find ~ -user "root"
        image-20201008093426050
        • find ~ -name "a*" -user "root"(检索以a开头且归属于root账户的文件)
        image-20201008093547774
        • find / -name "*e" -o -user "ZHIYUAN"(检索以e结尾或归属于ZHIYUAN账户的文件)
    • 设备

      • -type b/d/c/p/l/f:按照文件类型检索(块设备、目录、字符设备、管道设备、链接文件、文本文件)
        • find /dev -type b (检索块设备文件)
        • find ~ -type d (检索目录)
    • 权限

      • -perm:按照权限检索
      • find /dev -perm 777
    • 时间

      • -mtime:按照修改文件时间检索
      • -atime:按照访问文件时间检索
      • -ctime:按照修改权限时间检索
      • 注意:-n表示n天以内,+n表示n天以前
      • 例:find / -mtime -10 -empty(检索10以内未修改的空文件)
    • 容量

      • -size:按照容量来检索(k、M、G)
        • find /dev -type c -size -10k(检索/dev目录下的容量小于10k的字符设备文件)
        • find / -size +100M(检索根目录下容量大于100M的文件)

4. 文件内容过滤命令

  • 作用:在一个文件中按照查找字段进行过滤内容

  • 格式:grep -参数 查找条件 文件名

  • 参数:

    • -n:显示检索内容的行号
    • -i:忽略字母大小写
    • -v:根据检索关键字进行反向显示
    • -c:统计符合条件的行数
    • -A数字:如-A3,显示符合条件的当前行和以下3行,向下遍历(4行)
    • -B数字:如-B3,显示符合条件的当前行和以上3行,向上遍历(4行)
    • -C数字:如-C2,显示符合条件的当前行以及上下2行(5行)
  • 例:

    • 检索包含“root” 的行信息:grep -n "root" /etc/passwd
    image-20201008105652649
    • 检索passwd文件中不能登录的信息:grep -n “/sbin/nologin” /etc/passwd

      image-20201008110049784
    • 检索passwd文件中能登录的信息:grep -n -v "/sbin/nologin" /etc/passwd

      image-20201008110252359
    • 检索包含“ssh”字段的行以及上5行:grep -nB5 "ssh" /etc/passwd

      image-20201008110442342
    • 检索包含“ftp”的行及上下两行:grep -nC2 "ftp" /etc/passwd

      image-20201008110607221
    • 检索不能登录账户的行数:grep -c "/sbin/nologin" /etc/passwd

      image-20201008110717180
      image-20201008110754636
    • 检索包含大小写字母d的信息:grep -ni "d" /etc/passwd

      image-20201008110931203
  • 正则表达式

    • 概念:为了处理大量文本或字符串而定义的一套规则方法

    • 特点:

      • 通过定义特殊符号来描述模糊查找关键字,可以快速过滤、替换、输出字符串
      • 检索时是按行为单位进行处理
    • 使用[ ]字符集表示

      • [ab]:检索包含或者 b的行信息,[]中只能表示一个内容

        例:检索包含字母d或者D的信息:grep

        image-20201008111636544

        例:检索包含字母o的信息:grep -n [o] /etc/passwd

      • [^]:根据关键字检索后反向显示(反向着色)

        例:检索不包含字母o的信息:grep -n [ ^o ] /etc/passwd

        例:检索不以r开头且包含oot的信息:grep -n [ ^r ]oot /etc/passwd

        image-20201008112349265
      • [-]:[0-9] 表示数字,[a-z] [A-Z]表示小写或大写字母,[a-zA-Z]表示字母

        例:检索包含7-9的信息:grep -n [7-9] /etc/passwd

        image-20201008112559287

        例:检索包含大写字母:grep -n [A-Z] /etc/passwd

        image-20201008112701436
    • 行首及行尾

      • ^:表示行首

        例:检索以“root”开头的行信息:grep -n "^root" /etc/passwd

        image-20201008112905339

        例:检索以#开头的行信息:grep -n "^#" /etc/sos.conf

        image-20201008113112533

        例:检索以[开头的信息:grep -n "^\[" /etc/sos.conf(注意:\转义)

        image-20201008113553198
      • $:表示行尾

        例:检索以数字结尾的信息:grep -n [0-9]$ /etc/sos.conf

        image-20201008113830879

        例:检索空白行:grep -n ^$ /etc/sos.conf

        image-20201008114017543

        例:检索非空行:grep -nv ^$ /etc/sos.conf

        image-20201008114138441
    • 正则通配符

      • 点(.):表示一个任意字符

        例:检索以r开头,t结尾的中间2个字符的信息:grep -n "r..t" /etc/passwd

      • 星号(*):重复前面字符 0次或多次

        例:检索至少包含2个字母o的信息:grep -n "ooo*" /etc/passwd

        image-20201008115219639
      • 转义字符

        • 作用:由于某些字符有特殊作用,若使用该字符原来的功能,则需要使用\将其特殊功能去掉,称为转义

          image-20201008115700465
        • 例:检索以点结尾的字符:grep -n "\.$" tt.txt

      • 区间字符

        • 格式:\{n1,n2\}

        • 分析:由于{}有特殊作用,需要使用\进行转义,n1==n2时,可以简写为\{n1\},表示执行n1次

        • 例:检索包含两个o的信息:grep -n "o\{2\}" /etc/passwd

          image-20201008120202158

          例:检索包含两个到五个o的信息:grep -n "o\{2,5\}" /etc/passwd

          image-20201008120403954

5. 文档内容替换命令

  • 作用:进行文本内容的批量替换

  • 格式:tr 原字符 结果字符

  • 例:将passwd文件中的小写字母改为大写:cat /etc/passwd | tr [a-z] [A-Z]

    image-20201008140951688
  • 例:grep -n "root" ~/passwd | tr [a-z] [A-Z]

    image-20201008141308276

6. 打包压缩命令

  • 作用:将文件或目录进行打包、压缩、解压缩

  • 分类:

    • *.gz:由gzip程序进行压缩、解压缩
    • *.bz2:由bz2程序压缩、解压缩
    • *.tar:只是打包文件
    • *.tar.gz:使用tar打包后进行gzip压缩
    • 注意:*.tar.bz2 和 *.tar.xz 也是打包压缩文件
  • tar命令

    • 格式:tar -参数 文件名 目标及存储路径

    • 参数:

      • -c:创建压缩文件
      • -x:解压缩文件
      • -v:显示时间进度
      • -f:目标文件名
      • -p:保留原始文件的属性及权限
      • -t:查看压缩包的内容
      • -P:使用绝对路径进行压缩
      • 常用参数:
        • -cvf:压缩
        • -xvf:解压缩
    • 例:tar -cvf rootfile.tar.gz /root

      ​ tar -xvf rootfile.tar.gz

      • 注意:参数c和参数x不能同时使用

7. 管道符与重定向符

  • 重定向

    • 分类:

      • 输入重定向:默认来源于键盘

      • 输出重定向:默认到屏幕

    • 符号:

      • 命令 < 文件:将文件作为命令的标准输入
      • 命令 > 文件:将标准输出重定向为文件(覆盖清空原有内容)
      • 注意 >> 表示追加,会保留原有内容
  • 管道符

    • 符号:|
    • 格式:命令1|命令2|命令3.......
    • 作用:将前一个命令的输出结果作为下一个命令的标准输入

8. 环境变量

  • 作用:用来定义系统运行环境的相关参数

  • 一般使用大写英文字母

  • PATH环境变量

    • 作用:存储Linux系统命令解释器bash及程序的路径
    • 查看:ehco $PATH
  • 常见环境变量

    • HOME:存储家目录的绝对路径
    • HISTSIZE:记录history命令的历史命令条数
    • LANG:记录语系
    • MAIL:邮箱文件
  • 执行命令过程

    • 第一步:判断是否以绝对路径或者相对路径来书写命令,若为绝对路径则立即执行
    • 第二步:判断命令名是否为别名
    • 第三步:使用bash解释器判断命令是外部命令还是内部命令
    • 第四步:通过PATH查询路径执行
    • 查看环境变量:$
      • 格式:$ 变量名
  • 全局变量:

    • 作用:所有账户都生效的变量,默认定义的为局部变量

    • 格式:export 变量名

    • 例:

      在root账户下:

      • export NIC=/etc/sysconfig/network-scripts/ifcfg-ens33
      • cat $NIC

      在普通账户下

      • su ZHIYUAN
      • cat $NIC

二、 用户账户及权限

1. root账户

  • root账户为默认的系统管理员账户,拥有完整权限
  • 使用原则:生产活动中尽量不使用root账户,应使用普通账户临时分配权限来使用

2. UID

  • 账户ID是管理账户的一种手段,相当于账户的“身份证编号”,具有唯一性
  • 编号原则
    • 系统使用无符号整数进行编号,范围:[0,4294967294]
    • UID分类
      • 系统管理员账户:[0,999],root账户UID为0
      • 普通账户:从1000开始编号,连续编号,即使管理员编号未使用,普通账户也不可占用
      • 查看:/etc/passwd
    • id命令
      • 作用:显示账户的UID值
      • 格式:id 账户名
  • 注意:UID不能相同

3. 新建账户

  • 格式: useradd -参数 账户名
  • 参数:
    • -d:指定账户家目录,默认普通账户家目录为:/home/账户名
    • -e:设置账户到期失效时间,时间格式:YYYY-MM-DD(如:2020-10-08)
    • -u:指定账户的UID值
    • -g:指定一个初始用户的工作组(工作组必须已存在)
    • -G:指定一个或多个扩展组
    • -N:不创建与账户同名的基本工作组
  • 例:useradd test1

4. 设置账户密码

  • 格式:passwd -参数 账户名

  • 参数:

    • -l:锁定账户,禁止登录
    • -u:解除锁定,允许登录
    • -d:允许用户可以用空格密码登录
    • -e:强制用户在在下次登录时修改密码
  • 注意:

    • 密码输入时不回显
    • 密码应超过8字符
    • 密码应使用数字、字母、符号组成
    • 密码应定期更换
  • 例1:新建账户、设置密码、注销账户、重新登录

    • useradd test2
    • passwd test2 (输入两次密码)
    • logout
    • 登录test2账户
  • 例2:新建账户test3,UID=5555,工作组为test1,家目录为/home/tmp

    • useradd test3 -u 5555 -g test1 -d /home/tmp(/homt/tmp需要新建)
    • passwd test3(输入两次密码)
    • logout
    • 登录test3账户
    • pwd
    • id test3
  • 例3:设置账户为不可登录状态

    • vim /etc/passwd
    • 定位倒数几行的普通账户,点击i键,将本行尾部的/bin/bash修改为/sbin/nologin
    • 点击ESC键,冒号,wq保存并退出
    • logout
    • 尝试登录被修改账户
  • root账户密码的破解

    • reboot重启系统
    • 在内核选择界面点击键盘上下键,再点击e键
    • 进入内核登录编辑界面,定位Linux16所在行,找到ro修改为rw init=/sysroot/bin/bash
    • 按下Ctrl+X
    • 进入紧急救援模式后输入chroot /sysroot
    • passwd修改密码(输入两次密码,方块为汉字不能显示)
    • 设置selinux 使其密码修改生效:touch /.autorelabel
    • 按下Ctrl+D
    • reboot重启

5. 删除账户

  • 格式:userdel -参数 账户名
  • 参数:
    • -f:强制删除
    • -r:同时删除账户及家目录

6. 工作组(group)

  • 意义:将相同属性及权限的账户作为一组,组内账户属性等信息相同
  • Linux系统为了方便管理数据,引入了层级管理机制:公司(系统)->部门(工作组)->员工(账户)-> 文件(权限)
  • 分类
    • 基本工作组:创建账户时一同创建同名的工作组
    • 扩展组:可以将账户加入到其他工作组中
    • 查看:more /etc/group
  • GID:工作组编号,规则同UID
  • 创建工作组
    • 格式:groupadd -参数 工作组名
    • 参数:-g ,自定义工作组GID,默认从1000开始
  • 删除工作组
    • 格式:groupdel 工作组名
    • 注意:若工作组中已存在账户,必须先移除再删除工作组,否则无法删除工作组

7. 文件权限

  • 文件归属者

    • 文件拥有者(账户)
    • 所属组(工作组)
    • 其它账户
  • 权限的意义

    • 限制用户操作,规范命令使用,将破坏性限制在一定范围

    • 类别

      • 普通文件(-)
        • 可读(r):可以读取到文件中的内容
        • 可写(w):可以编辑修改删除文件内容
        • 可执行(x):可以运行一个脚本
      • 目录(d)
        • 可读(r):可以读取目录中的文件列表
        • 可写(w):可以读取目录内容,修改目录名称,增删目录中的文件
        • 可执行(x):可以进入该目录(cd命令)
    • 查看权限方法:

      • ls -l(ll同):查看目录内的文件权限信息

      • ls -ld:查看当前目录的权限信息

      • 显示内容分析:

        • 第一列描述文件类别,- 表示普通文件,d为目录
        • rw-r--r--:三个一组,分别对应账户、工作组、其他账户对该文件拥有的权限,- 表示无权限
        • 1:链接数
        • root root:该文件对应的账户及所属工作组
    • 权限数字表示法

      • 原则:

        • r:4
        • w:2
        • w:1
      • 小结:

        权限项 执行 执行 执行
        字符表示法 r w x r w x r w x
        数字表示法 4 2 1 4 2 1 4 2 1
        权限分配 文件所有者 文件所属组 其他账户
      • 组合

        • rwx:4+2+1->7(完整权限)
    • rw-:4+2->6(可读可写不可执行)

      • r-x:4+1->5(可读可执行不可写)

      • r--:4(可读不可写不可执行)

      • -wx:2+1->3(不可读可写可执行)

      • -w-:2(可写)

      • --x:1(可执行)

      • ---:0(无权限)

      • 例:764、642、153、731的字符描述

        • rwxrw-r--
        • rw-r---w-
        • --xr-x-wx
        • rwx-wx--x
      • 例:rwxrw-r-- 、rw--w--wx 、rw-r--r--数字描述

        • rwxrw-r--:764
        • rw--w--wx:623
        • rw-r--r--:644
  • 修改文件权限命令chmod

    • 格式:chmod -参数 权限 文件或目录名

    • 例:touch tmp.cfg(新建文件默认权限644)

      ​ chmod 777 tmp.cfg

  • chown命令

    • 作用:设置文件所有者及工作组
    • 格式:chown -参数 账户名:工作组 文件或目录名
    • 例: chown ZHIYUAN:ZHIYUAN tmp.cfg
  • 文件隐藏权限

    • 原则:文件一般包含默认权限和隐藏权限,隐藏权限默认状态下无法查看,若权限足够但无法删除,此时应考虑该文件是否有隐藏权限

    • lsattr命令

      • 作用:查看文件隐藏权限
      • 格式:lsattr 文件或目录名
    • chattr命令

      • 作用:设置文件隐藏权限

      • 格式:chattr 参数 文件或目录名

      • 参数

        • i:表示文件无法修改(目录中不能新建和删除)
        • a:仅允许追加内容,不可以覆盖、删除
        • s:从硬盘中彻底删除,不可恢复,会使用0填充文件所在存储空间
        • S:文件变更后同步到磁盘
      • 注意:参数前若有加号(+)或减号(-),则表示增加或撤销功能

      • 例:设置不可删除权限

        image-20201009105520603

8. 账户切换命令

  • 格式:su -参数 账户名
  • 常用:su - 账户名
  • 注意:
    • 减号(-)表示完全切换,重新建立系统环境变量,不保留原有环境参数
    • root账户切换到普通账户,不需要输入密码,反之需要重新验证密码

9. sudo命令

  • 作用: 给普通账户提供额外的权限完成原本root账户才能实现功能,将权限控制在某个命令或文件上,降低安全风险

  • sudo配置文件分析

    • 原则:必须在root账户下配置后才可使用

    • 格式:visudo

    • 方法:

      • visudo

      • 输入后定位第99行即:root ALL=(ALL) ALL

      • 该参数意义为:账户名 允许使用的主机=(以谁的身份) 执行命令列表

      • 点击i键输入:普通账户名 ALL=(ALL) ALL

      • 输入冒号,wq保存并退出

  • 提权方法:

    • 格式: sudo -参数 命令名称

    • 例:新建账户访问 /etc/shadow

      image-20201009112930327
      image-20201009112725500

原文作者:絷缘
作者邮箱:zhiyuanworkemail@163.com
原文地址:https://zhiyuandnc.github.io/xc3aA90Gk/
版权声明:本文为博主原创文章,转载请注明原文链接作者信息