Linux 常用指令与常识

  一、基本命令  

  1.1 命令的格式

  command [-options] parameter1 parameter2 ...

  1)command 命令的名称,如变换工作目录的命令为cd

  2)[]表示可选,-h 或者可选项的全名 --help

  3)命令、选项和参数以空格区分,不论几个空格视为一个

  4)回车代表一行命令开始执行

  5)命令太长时,可以使用 \ 来转义回车键,使命令连续到下一行

  6)在Linux系统中,英文大小写含义不同

  1.2 重要的热键

  1)[Tab]

  ca[Tab][Tab] 显示开头为ca的所有指令

  ls -al ~/.bash[tab][tab] 显示以bash为开头的文件名

  date --[Tab][Tab] date命令可以使用的参数有哪些 

  2)[Ctrl] - c

  撤销正在执行的命令

  3)[Ctrl] -d 

  键盘输入结束(End of File, EOF),例如,离开命令行模式

  4)[Shift] + [Page Up] / [Page Down]

  命令行界面中,实现翻页

  1.3 Linux 在线求助 man page 

  1)man command 命令的用法

  man page大致分为以下部分

  

  man page 中常用的按键

  

  二、目录操作命令  

  2.1 FHS(Filesystem Hierarchy Standard)下的目录

   

   

   

   2.2 目录切换

  cd [相对路径或绝对路径]: 切换目录

  cd ~ : 回到家路径

  cd .. : 回到上层路径

  2.3 目录创建与删除

  mkdir [-mp] : 目录名称

  -m : 设置文件权限(711:rwx--x--x;r 4, w 2, x 1)

  -p : 递归创建没有的目录  

  rmdir [-p] : 目录名称

  -p : 连同上层空目录一起删除

  三、文件操作命令

  3.1 Linux文件属性

  ls -al 列出所有文件详细的权限与属性。ls -d 仅列出目录本身

   

  权限:d是目录,-是文件,r 可读,w 可写,x 可执行。

  第一组为文件拥有者可具备的权限;第二组为加入此用户组的账号具有的权限;第三组为非本人及本用户组的其他账号具有的权限。  

  3.2 文件特殊权限 SUID SGID SBIT

  - rwsr-xr-x,此时称为Set UID, SUID:

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

  -rwx--s--x, s在用户组时,称为set GID。SGID有如下功能:

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

  drwxrwxrwt,只针对目录有效:

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

  3.3 文件系统特性

  文件权限与文件属性放到inode中,实际数据放在数据区块中。

  超级区块:记录文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等

  inode:记录文件的属性及文件数据所在的区块号码,一个文件一个inode

  数据区块:记录文件内容

      

                              inode/block 数据存取示意图

  目录树读取

  假设读取 /etc/passwd 这个文件时:  

  1. / 的 inode:通过挂载点的信息找到 inode 号码为 128 的根目录 inode,且 inode 规范的权限让我们可以读取该 block 的内容( 有 r 与 x)
  2. / 的 block: 经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码( 33595521)
  3. etc/ 的 inode: 读取 33595521 号 inode 得知 dmtsai 具有 r 与 x 的权限,因此可以读取etc/ 的 block 内容
  4. etc/ 的 block: 经过上个步骤取得 block 号码,并找到该内容有 passwd 文件的 inode 号码 ( 36628004)
  5. passwd 的 inode: 读取 36628004 号 inode 得知 dmtsai 具有 r 的权限, 因此可以读取passwd 的 block 内容
  6. passwd 的 block: 最后将该 block 内容的数据读出来

  3.4 复制、删除与移动:cp、 rm、 mv

  cp [-adfilprsu] 源文件 目标文件

  -a : 相当于 -dr --preserve=all

  -i : 若目标文件已存在,覆盖时先进行询问

  -p : 连同文件的属性(权限、用户、时间)一起复制过去

  -r : 递归复制,用于目录的复制操作

  --preserve=all : 除了-p权限相关参数外,还包括SELinux属性,links、xattr等也复制

  rm [-fir] 文件或目录

  -f : 忽略不存在的文件,不出现警告信息

  -i : 删除前询问使用者是否操作

  -r : 递归删除   

  mv [-fiu] 源文件 目标文件

  -f : 如果目标文件存在,直接覆盖

  -i : 目标文件存在,询问是否覆盖

  -u : 目标文件存在,且source比较新,才会更新  

  3.5 文件内容查看

  less 文件名  

  空白键 :向下翻动一页
  [pagedown]:向下翻动一页
  [pageup] :向上翻动一页
  /字串 :向下搜寻“字串”的功能
  ?字串 :向上搜寻“字串”的功能
  n :重复前一个搜寻 ( 与 / 或 ? 有关 )
  N :反向的重复前一个搜寻 ( 与 / 或 ? 有关 )
  g :前进到这个数据的第一行去
  G :前进到这个数据的最后一行去 
  q :离开 less 这个程序

  head [ -n number ] 文件 取出前面几行数据

  tail -n 20 /etc/man_db.conf 显示最后20行

  tail -n +100 /etc/man_db.conf 列出100行之后的数据  

  3.6 文件的查找

  whereis [-bmsu] 文件或目录名 

  -l : 列出whereis会去查询的几个主要目录

  -b : 只找binary格式文件

  -m : 只在说明文件manual路径下的文件

  -s : 只找source源文件

  find [PATH] [option] [action] (搜索全部路径,耗时且占用磁盘资源)

  1. 与时间相关的选项,-atime(读取时间)、-ctime(状态时间)与-mtime(修改时间),以-mtime为例

  -mtime n; -mtime +n; -mtime -n n代表数字,符号表示如下图所示。

  -newer file : file为一个存在的文件,列出比file还要新的文件

   

  2. 与使用者或用户组名称有关的参数

  -uid n : 使用者账号

  -gid n : 用户组ID

  -user name : name为使用者账号名称

  -group name : name为用户组名称

  - nouser : 查找文件的拥有者不在/etc/passwd中

  - nogroup : 查找文件的拥有用户组不存在于/etc/group的文件。自行安装软件时,很可能该软件的属性当中并没有文件拥有者。

  3. 与文件权限及名称有关的参数

  -name filename

  -size [+-] SIZE : +50k 比50k大

  -type TYPE : 正规文件(f),设备文件(b, c),目录(d),链接文件(l),socket(s)及FIFO(p)等属性

  -perm mode : 刚好等于mode, 4755(-rwsr-xr-x)

  -perm -mode : 必须囊括mode, 如 -perm -0744 查找文件时,4755的文件也会被找出来

  4. 额外可进行的操作

  find / -perm 7000 -exec ls -l {} \; 

  {} 表示 find 找到的内容

  -exec 到 \; 表示 find额外需要的操作

  3.7 cat 用于连接文件并打印到标准输出设备上

  cat filename

  四、压缩文件操作

  4.1 压缩命令 gzip 

  gzip [-cdtv#] 文件名 对目录内的所有文件进行压缩

  -c : 将压缩的数据输出到屏幕上

  -d : 解压缩参数

  -t : 用来检验压缩文件的一致性,看看文件有无错误

  -v : 显示压缩比信息

  -# : #表示数字,代表压缩等级,-1最快,压缩比最差,-9最慢,压缩比最好,默认为-6

  4.2 tar 打包命令

  将多个目录或文件打包成一个大文件。

  tar [-z|-j|-J] [cv] [-f 待建立的的新文件名] filename... 打包与压缩

  tar [-z|-j|-J] [tv] [-f 既有的tar文件名] 查看文件名

  tar [-z|-j|-J] [xv] [-f 既有的tar文件名]  [-C 目录] 解压缩   

  -c :创建打包文件,可搭配 -v 来察看过程中被打包的文件名(filename)
  -t :查看打包文件的内容含有哪些文件名
  -x :解包或解压缩,可以搭配 -C (大写) 在特定目录解压 
  -z :通过 gzip 的支持进行压缩/解压缩:此时文件名最好为 *.tar.gz
  -j :通过 bzip2 的支持进行压缩/解压缩:此时文件名最好为 *.tar.bz2
  -J :通过 xz 的支持进行压缩/解压缩:此时文件名最好为 *.tar.xz 
  -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
  -f filename:
  -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

  -p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件

  -P :保留绝对路径,亦即允许备份数据中含有根目录

  --exclude=FILE:在压缩的过程中,不要将 FILE 打包

  例子: 

  压 缩:tar -j<u>c</u>v -f filename.tar.bz2 要被压缩的文件或目录名称
  查 询:tar -j<u>t</u>v -f filename.tar.bz2
  解压缩:tar -j<u>x</u>v -f filename.tar.bz2 -C 欲解压缩的目录

  tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 -- newer-mtime = “2021/08/16” /etc/* 备份/etc目录下,2021/08/16之后修改过的文件

  五、其他命令

  5.1 vim程序编辑器

  vim可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。

  vim 文件名 进入命令模式,i, o, a, r 任一个字符进入插入模式,按[ESC]回到命令模式;:, /, ? 任一个字符进入底行模式,按[ESC]回到命令模式。

  命令行模式下的常用命令:

  移动光标
      【1】控制光标移动:↑,↓,←,→

      【2】gg:移动到文件第一行

      【3】n<Enter>:n为数字,光标向下移动n行

      【4】0或功能键:移动到这一行最前面字符处

      【5】$或功能键[End]:移动到这一行最后面的字符

      【6】G:移动到文件最后一行 

  替换与查找

      【7】查找:/字符

      【8】n:向下重复前一个查找  

      【9】N:向上重复前一个查找

      【10】:n1,n2s/word1/word2/g:n1与n2行之间寻找word1字符串,替换为word2.

      【11】:1,$s/word1/word2/g:第一行与最后一行之间寻找word1字符串,替换为word2.

      【12】:1,$s/word1/word2/gc:第一行与最后一行之间寻找word1字符串,替换为word2,替换前让用户确认

  复制与粘贴

      【13】x与X:x相当于del,X相当于Backspace

      【14】dd:删除光标所在那一行

      【15】ndd:删除光标所在向下n行

      【16】yy:复制光标所在行  

      【17】nyy:复制光标向下n行

      【18】u:恢复前一个操作

      【19】Ctrl + r:重做上一个操作

      【20】. :重复前一个操作

  插入模式下的常用命令:

  插入模式下,才可以进行文字输入。
      【1】ESC 退出编辑模式到命令行模式

  底行模式下的常用命令:
      【1】:w:将编辑的数据写入硬盘文件
      【2】:q:退出vim 
      【3】:wq:保存后退出

  vim 额外功能

  1)可视区块(visual block)  

  v         字符选择,会将光标经过的地方反白选择
  V        行选择,会将光标经过的列反白选择
  [Ctrl]+v    可以用长方形的方式选择数据
  y        将反白的地方复制起来
  d             将反白的地方删除掉
  p             将刚刚复制的区块, 在光标所在处贴上

  2)多文件编辑  

  :n            编辑下一个文件
  :N      编辑上一个文件
  :files        列出目前这个 vim 的打开的所有文件

  可以使用 vim hosts /etc/hosts同时打开两个文件,使用:n, :N在文件之间切换,进行多文件编辑

  3)多窗口功能

  vim 文件名 打开一个文件,:sp {filename} 打开一个新窗口

  ctrl + w + ↓         将光标移动到下方窗口
  ctrl + w + ↑         将光标移动到上方窗口
  ctrl + w + q         关闭下方窗口

  4)vim关键词补全  

  [ctrl]+x -> [ctrl]+n 通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐
  [ctrl]+x -> [ctrl]+f  以当前目录内的“文件名”作为关键字, 予以补齐
  [ctrl]+x -> [ctrl]+o 以扩展名作为语法补充,以 vim 内置的关键字,予以补齐

  5.2 管道命令

  5.2.1 选取命令

  cut -d '分隔字符' -f (取出第几段) fields  

  cut -c 字符区间

  例子: echo ${PATH}  /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin

            1     2   3      4      5            6

  echo ${PATH}  |  cut -d ':' -f 5    结果:/home/dmtsai/.local/bin

  echo ${PATH}  |  cut -d ':' -f 3, 5    结果:/usr/local/sbin /home/dmtsai/.local/bin

  export 内容: 

  declare -x HISTCONTROL="ignoredups"
  declare -x HISTSIZE="1000"
  declare -x HOME="/home/dmtsai"
  declare -x HOSTNAME="study.centos.vbird"

  export | cut -c 12-  

  HISTCONTROL="ignoredups"
  HISTSIZE="1000"
  HOME="/home/dmtsai"
  HOSTNAME="study.centos.vbird"

  grep [-acinv] [-A] [-B] [--color=auto] '查找字符' filename  

  -a :将 binary 文件以 text 文件的方式搜寻数据
  -c :计算找到 '搜寻字串' 的次数
  -i : 忽略大小写的不同, 所以大小写视为相同
  -n :顺便输出行号
  -v :反向选择, 亦即显示出没有 '搜寻字串' 内容的那一行
  --color=auto : 可以将找到的关键字部分加上颜色的显示

  -A : 除了列出该行外,后续的n列也列出来

  -B : 除了列出该行外,前面的n列也列出来

  例子:

  last内容:  

  root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
  root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 ( 06:33)
  root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 ( 01:16)

   last | grep -v 'root' | cut -d ' ' -f1 取出含有root的行且是第一栏

  5.2.2 排序命令

  sort [-fbMnrtuk] [file or stdin]  

  -f :忽略大小写的差异,例如 A 与 a 视为编码相同
  -b :忽略最前面的空白字符部分
  -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法
  -n :使用“纯数字”进行排序( 默认是以文字体态来排序的) 
  -r :反向排序
  -u :就是 uniq ,相同的数据中,仅出现一行代表
  -t :分隔符号,默认是用 [tab] 键来分隔
  -k :以那个区间 ( field) 来进行排序的意思

  例子:cat  /etc/passwd | sort -t ':' -k 3 以第三栏排序

  5.2.3 字符转换命令

  tr [ds] SET1  ...

  -d : 删除字符SET1 

  -s : 替换掉重复的字符

  last | tr '[a-z]' '[A-Z]' 所有的小写变成大写

  join [-til2] file1 file2

  -t : join 默认以空白字符分隔数据,并且比对“第一个字段”的数据,如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个
  -i : 忽略大小写的差异;
  -1 :第一个文件要用哪个字段来分析
  -2 :第二个文件要用哪个字段来分析

   例子:  

  head -n 3 /etc/passwd /etc/shadow
  ==> /etc/passwd <==
  root:x:0:0:root:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  daemon:x:2:2:daemon:/sbin:/sbin/nologin
  ==> /etc/shadow <==
  root:$6$wtbCCce/PxMeE5wm$KE2IfSJr...:16559:0:99999:7:::
  bin:*:16372:0:99999:7:::
  daemon:*:16372:0:99999:7:::
  # 由输出的数据可以发现这两个文件的最左边字段都是相同帐号!且以 : 分隔  

  join -t  ':'  /etc/passwd  /etc/shadow | head -n 3
  root:x:0:0:root:/root:/bin/bash:$6$wtbCCce/PxMeE5wm$KE2IfSJr...:16559:0:99999:7:::
  bin:x:1:1:bin:/bin:/sbin/nologin:*:16372:0:99999:7:::
  daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:16372:0:99999:7:::

  5.3 sed工具

  sed [-nefr] [操作]  

  选项与参数:
  -n : 在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后, 则只有经过 sed 特殊处理的那一行( 或者动作)才会被列出来
  -e : 直接在命令行界面上进行 sed 的动作编辑
  -f : 直接将 sed 的动作写在一个文件内, -f filename 
  -r : sed 的动作支持的是延伸型正则表达式的语法。 ( 默认是基础正则表达式语法)
  -i : 直接修改读取的文件内容,而不是由屏幕输出。
  动作说明: [n1[,n2]]function
  n1, n2 : 一般代表“选择进行动作的行数”,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则“ 10,20[动作行为] ”function 有下面这些:
  a : 新增,sed '2a drink tea' 在第二行后加上drink tea
  c : 取代,sed '2, 5c No 2-5 number'
  d : 删除 sed '2,5d' 删除2-5行
  i : 插入,i 的后面可以接字串, 而这些字串会在上一行出现
  p : 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行 sed -n '5, 7p' 打印出5-7行
  s : 取代,通常这个 s 的动作可以搭配正则表达式 例如 sed  's/要被替换的字符/新的字符/g'  sed 's/#.*$//g' 删除注释之后的内容

  5.4 awk 数据处理工具

   awk '条件类型1{操作1} 条件类型2{操作2} ...' filename

  last -n 5 | awk '{print $1 "\t" $3}' 打印出第一栏和第三栏数据  

  变量名称 代表意义
  NF      每一行( $0)拥有的字段总数
  NR          目前awk所处理的是“第几行”数据
  FS          目前的分隔字符, 默认是空白键

  last -n 5 | awk '{print $1 "\t lines: " NR "\t columns: " NF}'

  cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'

  5.5 用户身份切换

  su [-lm] [-c命令] [username]  

  - : 代表使用 login-shell 的变量文件读取方式来登陆系统;若使用者名称没有加上去,则代表切换为 root 的身份。
  -l : 与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。
  -m : 使用目前的环境设置,而不读取新使用者的配置文件
  -c : 后面可以加上指令

posted @ 2021-09-18 16:27  慕仙白  阅读(312)  评论(0编辑  收藏  举报