Linux 命令整理(一)

文章目录

  • Linux 命令整理(一)
    • 1、认识 Linux
      • 1.1、CentOS 的观察
      • 1.2、X window 与文本模式的切换
      • 1.3、正确开关机
    • 2、文件与目录权限
      • 2.1、文件的权限与属性
    • 3、文件与目录管理
      • 3.1、文件与目录的相关操作
      • 3.2、文件内容查阅
        • 3.2.1、文件内容查阅
        • 3.2.2、可翻页检视
        • 3.2.3、资料截取
        • 3.2.4、非纯文本文件:od
      • 3.3、修改文件时间或新建文件:touch
      • 3.4、文件默认权限:umask
      • 3.5、文件的隐藏权限
      • 3.6、文件特殊权限:SUID,SGID,SBIT
        • 3.6.1、SUID/SGID/SBIT 权限设定
      • 3.7、观察文件类型:file
      • 3.8、指令与文件的搜寻
        • 3.8.1、脚本文件名的搜寻
        • 3.8.2、文件名的搜寻
    • 4、磁盘与文件系统管理
      • 4.1、XFS 文件系统的描述观察
      • 4.2、文件系统的简单操作
      • 4.3、实体链接与符号链接:ln
      • 4.4、磁盘的分区、格式化、检验与挂载
        • 4.4.1、观察磁盘分区状态
        • 4.4.2、磁盘分区:gdisk/fdisk
        • 4.4.3、磁盘格式化(建立文件系统)
        • 4.4.4、文件系统的检测
      • 4.5、文件系统的挂载与卸载
      • 4.6、磁盘/文件系统参数修订
      • 4.7、设定开机挂载
    • 5、文件、文件系统的压缩,打包与备份
      • 5.1、Linux系统常见的压缩指令
        • 5.1.1、gzip,zcat/zmore/zless/zgrep
        • 5.1.2、bzip2,bzcat/bzmore/bzless/gzgrep
        • 5.1.3、xz,xzmore/xzless/xzgrep
      • 5.2、打包指令:tar
        • 5.2.1、使用 tar 加入 -z,-j 或 -J 的参数备份 /etc/ 目录
        • 5.2.2、查阅 tar 文件的数据内容(可查看文件名),与备份文件名有无根目录的意义
        • 5.2.3、将备份的数据解压缩,并考虑特定目录的解压缩动作(-C 选项的应用)
        • 5.2.4、仅解开单一文件的方法
        • 5.2.5、打包某目录,但不包含该目录下的某些文件的作法
        • 5.2.6、仅打包比某个时刻还新的文件
        • 5.2.7、特殊应用:利用管线命令与数据流
    • 6、VIM 学习
      • 6.1、vi 的使用
        • 6.1.1、一般指令模式可用的按键说明,光标移动、复制粘贴、搜寻取代等
        • 6.1.2、一般指令模式切换到编辑模式的可用按键说明
        • 6.1.3、一般指令模式切换到指令列模式的可用按键说明
        • 6.1.4、VIM 的暂存文件、救援回复与开启时的警告信息
      • 6.2、VIM 的额外功能
        • 6.2.1、区块选择
        • 6.2.2、多文件编辑
        • 6.2.3、多窗口功能
    • 7、认识 bash 这个 shell
      • 7.1、查询指令是否为 Bash shell 的内置命令:type
      • 7.2、Shell 的变量功能
        • 7.2.1、环境变量的功能
        • 7.2.2、变量的键盘读取、数组与宣告:read,array,declare
        • 7.2.3、与文件系统及程序的限制关系:ulimit
      • 7.3、命令别名与历史命令
      • 7.4、Bash Shell 的操作环境
        • 7.4.1、路径与指令搜寻顺序
        • 7.4.2、bash 的进站与欢迎信息:/etc/issue,/etc/motd
        • 7.4.3、bash 的环境配置文件
        • 7.4.4、通配符与特殊符号
      • 7.5、数据流重定向
        • 7.5.1、什么是数据流重定向
        • 7.5.2、命令执行的判断依据:;,&&,||
      • 7.6、管线命令
        • 7.6.1、撷取命令:cut,grep
        • 7.6.2、排序命令:sort,wc,uniq
        • 7.6.3、双向重定向:tee
        • 7.6.4、字符转换命令:tr,col,join,paste,expand
        • 7.6.5、分区命令:split
        • 7.6.6、参数代换:xargs
        • 7.6.7、关于减号 - 的作用

1、认识 Linux

1.1、CentOS 的观察

[root@MiWiFi-R4A-srv ~]# uname -r   #查看内核版本
[root@MiWiFi-R4A-srv ~]# uname -m  #查看操作系统的位版本
[root@MiWiFi-R4A-srv ~]# yum install redhat-lsb
[root@MiWiFi-R4A-srv ~]# lsb_release -a

1.2、X window 与文本模式的切换

Linux 预设下会提供 6 个 Terminal 来让使用者登录,切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]

  • [Ctrl] + [Alt] + [F2]~[F6]:文字接口登录 tty2~tty6 终端机;
  • [Ctrl] + [Alt] + [F1]:图像接口桌面。

1.3、正确开关机

  • 惯用的关机指令:shutdown
[root@MiWiFi-R4A-srv ~]#/sbin/shutdown [-krhc] [时间] [警告信息]
选项与参数:
-k  :    不要真的关机,只是发送警告信息出去!
-r  :    在将系统的服务停掉之后就重新启动(常用)
-h  :    将系统的服务停掉后,立即关机。(常用)
-c  :    取消已经在进行的 shutdown 指令内容。
时间  :    指定系统关机时间!
  • 重新启动,关机:reboothaltpoweroff
[root@MiWiFi-R4A-srv ~]# sync; sync; sync; reboot
[root@MiWiFi-R4A-srv ~]# halt   #系统停止~屏幕可能会保留系统已经停止的信息!
[root@MiWiFi-R4A-srv ~]# poweroff   #系统关机,所以没有提供额外的电力,屏幕空白!

2、文件与目录权限

2.1、文件的权限与属性

  • 改变所属群组,chgrp

    [root@MiWiFi-R4A-srv ~]# chgrp [-R] 目录/文件 ...
    选项与参数:
    -R  :   进行递归(recursive)的持续改变
    
  • 改变文件拥有者,chown

    [root@MiWiFi-R4A-srv ~]# chown [-R] 用户名 目录/文件 ...
    [root@MiWiFi-R4A-srv ~]# chown [-R] 用户名:组名 目录/文件 ...
    选项与参数:
    -R  :   进行递归(recursive)的持续改变
    
  • 改变权限,chmod

    数字模式:

    [root@MiWiFi-R4A-srv ~]# chmod [-R] xyz 文件或目录
    选项与参数:
    xyz :    就是数字类型的权限,为 rwx 属性数值的相加
    -R  :    递归
    

    符号模式:

    从之前的介绍我么可以发现,基本上就九个权限分别是 (1)user (2)group (3)others 三种身份!那么我们就可以用 u,g,o 来代表三种身份的权限!此外,a 则代表 all 亦即全部的身份!

    u
    g +(加入) r
    chmod o -(除去) w 文件或目录
    a =(设定) x

3、文件与目录管理

3.1、文件与目录的相关操作

特殊的目录表示,需要记住:

. 代表此层目录
代表上一层目录
- 代表前一个工作目录
~ 代表 “目前用户身份” 所在的家目录
~account 代表 account 这个用户的家目录(account 是账号名称)
  • cd(change directory,变换目录)

    [root@MiWiFi-R4A-srv /]# cd [相对路径或绝对路径]
    # 最重要的就是一些 相对路径或绝对路径,还有一些特殊的目录符号!
    
  • pwd(显示当前所在的目录)

    [root@MiWiFi-R4A-srv /]# pwd [-P]
    选项与参数:
    -P :显示出确定的路径,而非使用链接(link)路径
    
  • mkdir(建立新目录)

    [root@MiWiFi-R4A-srv /]# mkdir [-mp] 目录名称
    选项与参数:
    -m :配置文件的权限!直接设定,不需要看预设权限(umask)
    -p :帮助你直接将所需要的目录(包含上层目录)递归地建立起来
    

    新建目录的权限与 umask 有关。

  • rmdir(删除 “空” 的目录)

    [root@MiWiFi-R4A-srv /]# rmdir [-p] 目录名称
    选项与参数:
    -p :连同 “上层”“空的” 目录也一起删除
    
  • 查看文件和目录命令 ls

    [root@MiWiFi-R4A-srv ~]# ls [-aAdfFhinrRSt] 文件名或目录名称..
    [root@MiWiFi-R4A-srv ~]# ls [--color={never,auto,always}] 文件名或目录名称..
    [root@MiWiFi-R4A-srv ~]# ls [--full-time] 文件名或目录名称..
    选项与参数的功能:
    -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
    -A :全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录
    -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
    -f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
    -F :根据文件、目录等信息,给予附加数据结构,例如:*:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
    -h :将文件大小以易读的方式(例如 GB, KB 等等)列出来;
    -i :列出 inode 号码,inode 的意义下一章将会介绍;
    -l :长数据串行出,包含文件的属性与权限等等数据;(常用)
    -n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
    -r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
    -R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
    -S :以文件大小大小排序,而不是用文件名排序;
    -t :依时间排序,而不是用文件名。
    --color=never :不要依据文件特性给予颜色显示;
    --color=always :显示颜色
    --color=auto :让系统自行依据设置来判断是否给予颜色
    --full-time :以完整时间模式 (包含年、月、日、时、分) 输出
    --time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)而非内容变更时间 (modification time)
    
  • cp(复制文件或目录)

    [root@MiWiFi-R4A-srv ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
    [root@MiWiFi-R4A-srv ~]# cp [options] source2 source3 ... directory
    选项与参数:
    -a :相当于 -dr --preserve=all 的意思(常用)
    -d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身
    -f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
    -i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    -l :进行硬链接(hard link)的链接文件的建立,而非复制文件本身
    -p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用)
    -r :递归持续复制,用于目录的复制(常用)
    -s :复制成为符号链接文件(sysbolic link),亦即 “快捷方式” 文件
    -u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
    --preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性,links,xattr 等也复制
    需要注意的是,如果来源文件有两个以上,则最后一个目的文件一定要是 “目录” 才行!
    

    在预设的条件中,cp 的来源文件与目的文件的权限是不同的,目的文件的拥有者通常会是执行指令的操作者本身。

    总之,由于 cp 有种种的文件属性与权限特性,所以,在复制的时候,你必须要清除的了解到:

    • 是否需要完整的保留来源文件的信息?
    • 来源文件是否为链接文件(symbolic link file)?
    • 来源文件是否为特殊文件,例如 FIFO,socket?
    • 来源文件是否为目录?
  • rm(移除文件或目录)

    [root@MiWiFi-R4A-srv ~]# rm [-fir] 文件或目录
    选项与参数:
    -f  :    就是 force 的意思,忽略不存在的文件,不会出现警告信息
    -i  :    互动模式,在删除前会询问使用者是否动作
    -r  :    递归删除!最常用在目录的删除!这是非常危险的选项!!!
    
  • mv(移动文件与目录,或更名)

    [root@MiWiFi-R4A-srv ~]# mv [-fiu] source destination
    [root@MiWiFi-R4A-srv ~]# mv [options] source1 source2 source3 ... directory
    选项与参数:
    -f  :    就是 force 的意思,如果目标文件已经存在,不会询问而直接覆盖
    -i  :    若目标文件(destination)已经存在时,就会询问是否覆盖!
    -u  :    若目标文件已经存在,且 source 比较新,才会更新(update)
    
  • 取得路径的文件名和目录名称

    [root@MiWiFi-R4A-srv tmp]# basename /etc/sysconfig/network <== 文件名
    [root@MiWiFi-R4A-srv tmp]# dirname /etc/sysconfig/network  <== 路径名
    

3.2、文件内容查阅

3.2.1、文件内容查阅

  • cat

    [root@MiWiFi-R4A-srv ~]# cat [-AbEnTv]
    选项与参数:
    -A  :    相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已
    -b  :    列出行号,仅针对非空白行做行号显示,空白行不标行号
    -E  :    将结尾的断行字符 $ 显示出来
    -n  :    打印出行号,连同空白行也会有行号,与 -b 的选项不同
    -T  :    将 [tab] 按键以 ^I 显示出来
    -v  :    列出一些看不出来的特殊字符
    
  • tac(反向列示)

    同上

  • nl(添加行号打印)

    [root@MiWiFi-R4A-srv ~]# nl [-bnw] 文件
    选项与参数:
    -p  :    指定行号指定的方式,主要有两种:-b a  :    表示不论是否空行,也同样列出行号(类似 cat -n);-b t    :    如果有空行,空的那一行不要列出行号(默认值);
    -n  :    列出行号表示的方法,主要有三种:-n ln :    行号在屏幕左边显示-n rn  :    行号在自己字段的最右方显示,且不加 0;-n rz :    行号在自己字段的最右方显示,且加 0;
    -w  :    行号字段的占用字符数
    

3.2.2、可翻页检视

  • more(一页一页翻动)

    可执行的命令:

    • 空格键 : 代表向下翻一页
    • Enter : 代表向下翻 “一行”
    • /字符串 : 代表在这个显示的内容当中,向下搜索 “字符串” 这个关键词
    • :f : 立刻显示出文件名以及目前显示的行数
    • q : 代表立刻离开 more,不再显示该文件内容
    • b 或 [ctrl]-b : 代表往回翻页,不过这动作只对文件有用,对管线无用
  • less(一页一页翻动)

    可执行的指令:

    • 空格键 : 向下翻一页
    • [pagedown] : 向下翻一页
    • [pageup] : 向上翻一页
    • /字符串 : 向下搜索 “字符串” 的功能
    • ?字符串 : 向上搜索 “字符串” 的功能
    • n : 重复前一个搜索(与 / 或 ? 有关)
    • N : 反向的重复前一个搜索(与 / 或 ? 有关)
    • g : 前进到这个资料的第一行去
    • G : 前进到这个数据的最后一行(注意大小写)
    • q : 离开 less 这个程序

3.2.3、资料截取

  • head(取出前几行)

    [root@MiWiFi-R4A-srv ~]# head [-n number] 文件
    选项与参数:
    -n  :    后面接数字,代表显示几行的意思
    
  • tail(取出后面几行)

    [root@MiWiFi-R4A-srv ~]# tail [-n number] 文件
    选项与参数:
    -n  :    后面接数字,代表显示几行的意思
    -f  :    表示持续侦测后面所接的文件名,要等到按下 [ctrl]-c 才会结束
    

3.2.4、非纯文本文件:od

[root@MiWiFi-R4A-srv ~]# od [-t TYPE] 文件
选项与参数:
-t  :    后面可以接各种 “类型(TYPE)” 的输出,例如:a :    利用默认的字符来输出c :    使用 ASCII 字符来输出d[size] : 利用十进制(decimal)来输出数据,每个整数占用 size bytesf[size] : 利用浮点数(float)来输出数据,每个数占用 size byteso[size] : 利用八进制(octal)来输出数据,每个整数占用 size bytesx[size] : 利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes

3.3、修改文件时间或新建文件:touch

一个文件的时间参数:

  • modification time(mtime)

    当文件的 “内容数据” 变更时,就会更新这个时间!

  • status time(ctime)

    当该文件的 “状态” 变更时,就会更新这个时间!

  • access time(atime)

    当 “该文件的内容被取用” 时,就会变更这个读取时间!

[root@MiWiFi-R4A-srv ~]# touch [-acdmt] 文件
选项与参数:
-a  :    仅修订 access time
-c  :    仅修订文件的时间,若该文件不存在则不建立新文件
-d  :    后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m  :    仅修订 mtime
-t  :    后面可以接欲修订的时间而不用目前的时间,格式为 "YYYYMMDDhhmm"

3.4、文件默认权限:umask

[root@MiWiFi-R4A-srv tmp]# umask
0022    <== 与一般权限有关的是后边三个数字,第一组是给特殊权限用的
[root@MiWiFi-R4A-srv tmp]# umask -S
u=rwx,g=rx,o=rx

要注意的是,umask 的分数指的是 “该默认值需要减掉的权限!”。

3.5、文件的隐藏权限

  • chattr(配置文件的隐藏属性)

    [root@MiWiFi-R4A-srv ~]# chattr [+-=][ASacdisu] 文件/目录名
    选项与参数:
    +  :增加某个特殊属性
    -   :删除一个特殊属性
    =  :设定一定,且仅有后面接的属性A  :若存取此文件(或目录)时,它的访问时间atime将不会被修改,可避免I/O较慢的机器过度的存取粗盘
    S   :一般文件是异步写入磁盘的,如果加上这个S,当你进行任何文件的修改,该变更会[同步]写入磁盘
    a   :当设定这个a后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设定这个属性
    c   :将会自动将此文件压缩,在读取的时候将会自动解压缩,在存储时,也会先压缩再存储
    d   :当dump程序被执行时,设定d属性将可使该文件(或目录)不会被dump备份
    i   :它可以让一个文件[不能被删除、改名、设定链接也无法写入或新增数据!!!],只有root才能设定
    s   :如果文件被删除,将彻底移出磁盘,无法挽回
    u   :与s相反
    
  • lsattr(显示文件隐藏属性)

    [root@mysql ~]# lsattr [-adR] 文件/目录名
    选项与参数:
    -a  :将隐藏文件的属性也列出来
    -d  :如果接的是目录,仅列出目录本身的属性而非目录内的文件名
    -R  :连同子目录的数据也一并列出来
    

3.6、文件特殊权限:SUID,SGID,SBIT

  • Set UID

    当 s 这个全下出现在文件拥有者的 x 权限上时,此时被称为 Set UID,简称为 SUID 的特殊权限。

    • SUID 权限仅对二进制程序有效;
    • 执行者对于该程序需要具有 x 的可执行权限;
    • 本权限仅在执行该程序的过程中有效;
    • 执行者将具有该程序拥有者的权限。
  • Set GID

    当 s 标志在文件拥有者的 x 权限时为 SUID,那 s 在群组的 x 时则称为 Set GID,SGID。

    与 SUID 不同的是,SGID 可以针对文件或目录来设定!如果对文件来说,SGID 有如下的功能:

    • SGID 对二进制程序有用;
    • 程序执行者对于该程序来说,需具备 x 的权限;
    • ==执行者在执行的过程中会获得该程序群组的支持

    当一个目录设定了 SGID 的权限后,它将具有如下的功能:

    • 用户若对于此目录具有 r 和 x 的权限时,该用户能够进入此目录;
    • 用户在此目录下的有效群组将会变成该目录的群组;
    • 用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

    SGID 对于项目开发来说很重要!

  • Sticky Bit

    仅针对目录有效,SBIT 对于目录的作用是:

    • 当用户对于此目录具有 w,x 权限,亦即具有写入的权限时;当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

    换句话说:当甲这个用户于 A 目录是具有群组或其他人的身份,并且拥有该目录的 w 权限,这表示 “甲用户对该目录内任何人建立的目录或文件均可以进行 ‘删除/更名/移动’ 等操作。”不过,如果将 A 目录加上了 SBIT 的权限后,则甲只能针对自己建立的文件或目录进行删除/更名/移动等操作,而无法删除他人的文件。

3.6.1、SUID/SGID/SBIT 权限设定

如何配置文件使成为具有 SUID 和 SGID 的权限呢?在之前的三个数字之前加上一个数字,最前面的数字就代表这几个权限:

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT
[root@MiWiFi-R4A-srv tmp]# touch test
[root@MiWiFi-R4A-srv tmp]# chmod 4755 test; ll test        <== 使其具有 SUID 的权限
-rwsr-xr-x. 1 root root 0 Aug 25 19:53 test
[root@MiWiFi-R4A-srv tmp]# chmod 6755 test; ll test        <== 使其具有 SUID/SGID 的权限
-rwsr-sr-x. 1 root root 0 Aug 25 19:53 test
[root@MiWiFi-R4A-srv tmp]# chmod 1755 test; ll test        <== 加入 SBIT 的权限
-rwxr-xr-t. 1 root root 0 Aug 25 19:53 test
[root@MiWiFi-R4A-srv tmp]# chmod 7666 test; ll test        <== 具有空的 SUID/SGID 权限
-rwSrwSrwT. 1 root root 0 Aug 25 19:53 test

注意最后一个的大写 S,T,表示空的权限。因为,我们下达的是 766。也就是说,user、group 以及 others 都没有 x 这个可执行的标志(因为 666 嘛),所以,这个 S、T 代表的就是 “空的”。SUID 本来表示的就是 “该文件在执行的时候,具有文件拥有者的权限”,但是文件拥有者都无法执行,哪来的权限给别人使用!

除了通过数字,还可以通过符号来处理。

# 设定权限成为 -rws--x--x
[root@MiWiFi-R4A-srv tmp]# chmod u=rwxs,go=x test; ll test
-rws--x--x. 1 root root 0 Aug 25 19:53 test# 承上,加上 SGID 和 SBIT
[root@MiWiFi-R4A-srv tmp]# chmod g+s,o+t test; ll test
-rws--s--t. 1 root root 0 Aug 25 19:53 test

3.7、观察文件类型:file

[root@MiWiFi-R4A-srv tmp]# file 文件名

3.8、指令与文件的搜寻

3.8.1、脚本文件名的搜寻

  • which(寻找 “执行文件”)

    [root@MiWiFi-R4A-srv ~]# which [-a] 指令
    选项与参数:
    -a  :    将所有由 PATH 目录中可以找到的指令均列出来,而不止第一个被找到的指令名称
    

    which 这个指令是根据 “PATH” 这个环境变量所规范的路径,去搜寻 “执行文件” 的文件名!

3.8.2、文件名的搜寻