Fork me on GitHub

linux常用指令学习记录

前言

  • 本文主要为学习贴,用来记录一些linux上的常用指令以供参考。

文件内容查看

cat
  • cat命令常用来查看文件内容,命令格式:

    1
    # cat [-AbEnTv] FILENAME
  • 选项参数:

    1
    2
    3
    4
    5
    6
    -A:相当于vTE的整合选项,可列出一些特殊字符而不是空白而已
    -b:列出行号,仅列出非空白行的行号,空白行不显示行号
    -E:将结尾的断行字符$显示出来
    -n:列出行号,连同空白行也显示行号,与-b选项不同
    -T:将[tab]按键以 ^I 显示出来
    -v:列出一些看不出来的特殊字符
tac
  • tac命令与cat命令完全是相反的,表示由最后一行逆序显示文件内容,即从下往上阅读文件内容,用法同cat。
nl
  • nl命令在linux中用来计算文件中行号,nl在没有选项参数的情况下,默认给非空白行加上行号
  • cat -b有点类似,nl命令可以将行号做比较多的显示设计,包括位数与是否补齐0等功能。
  • nl命令的命令格式:

    1
    # nl [-bnw] FILENAME
  • 选项参数:

    1
    2
    3
    4
    5
    6
    7
    8
    -b:指定行号指定的方式,主要有两种:
    -b a:表示不论是否为空行,都显示行号,类似 cat -n
    -b t:如有有空行,则空的那行不显示行号,类似 cat -b
    -n:列出行号表示的方法,主要有三种:
    -n ln:行号在屏幕的最左方显示
    -n rn:行号在字段的最右侧显示,且不加0
    -n rz:行号在字段的最右方显示,且加0
    -w:行号字段的占用的位数
  • 注意nl -b a -n rz命令默认行号是6位数,调整位数就需要加 -w 3,表示调整为3位。

more
  • more命令是文本查看类命令,more命令查看文件可一页一页的显示文件内容,方便用户逐一阅读。启动时就加载整个文件内容。命令格式:

    1
    more [-dlfpcsu] [-num] [+/pattern] [+linenum] [file ...]
  • 参数选项:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    +n:从第n行开始显示
    -n:定义屏幕大小显示为n行
    +/STRING:在文件开始显示前搜索STRING,然后在该STRING的前两行开始显示
    -c:从顶部清屏,然后显示
    -d:提示[Press space to continue, 'q' to quit.],按空格继续,按q退出
    -l:忽略Ctrl+l(换页)字符
    -p:通过清楚窗口而不是滚屏来翻页,与-c选项类似
    -s:把连续的多个空行显示为一行
    -u:把文件内容中的下划线去掉
  • 常用操作命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Enter       代表向下翻一行
    空格键 代表向下翻一页
    /字符串 代表在这个显示的内容当中,向下搜索“字符串”这个关键字
    :f 立刻显示文件名及目前的行数
    = 输出当前的行号
    v 调用vi编辑器
    q 代表立刻离开more,不再显示文件内容
    h 显示more的快捷键及说明
    !命令 调用shell,并执行命令
    b或Ctrl-B 代表往回翻页,这个动作只对文件有用,对管线无用
less
  • less命令也是linux系统中查看文件内容的工具,功能强大,比more命令更富有弹性,它可以通过Pageup和Pagedown向前、向后翻页。而且还具有向上向下的搜素功能。命令格式:

    1
    less [option] [file ...]
  • 参数选项:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -b:<缓冲区大小> 设置缓冲区的大小
    -e:当文件显示结束后,自动离开
    -f: 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
    -g:只标志最后搜索的关键词
    -i:忽略搜索时的大小写
    -m:显示类似more命令的百分比
    -N:显示每行的行号
    -o:<文件名> 将less 输出的内容在指定文件中保存起来
    -Q:不使用警告音
    -s:显示连续空行为一行
    -S:行过长时间将超出部分舍弃
    -x <数字>:将“tab”键显示为规定的数字空格
  • 常用操作命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Enter       代表向下滚动一行
    y 代表向上滚动一行
    空格键 代表向下翻一页
    [pageup] 代表向上翻一页
    [pagedown] 代表向下翻一页
    h 显示less的快捷键及说明
    /STRING 向下搜索STRING的功能
    ?STRING 向上搜索STRING的功能
    n 重复前一个搜索(与 / 或 ? y有关)
    N 反向重复前一个搜索(与 / 或 ? y有关)
    u 代表向上翻半页
    d 代表向下翻半页
    q 退出
  • head命令用来显示文件开头的某个数量的行数至标准输出中。命令格式:

    1
    head [-cnqv] [file ...]
  • 选项参数:

    1
    2
    3
    4
    5
    6
    7
    8
    -c #:显示文件的前#个字节
    例如:命令 head -c 200 /etc/inittab 用于显示/etc/inittab 前200个字符
    -n #:显示文件的前#行
    例1:命令 head -n 15 /etc/inittab 用于显示/etc/inittab 文件前15行内容
    注意:head -# 和 head -n # 命令是一样的
    例2:命令 head -n -5 /etc/inittab 用于显示/etc/inittab 文件除最后5行的内容
    -q:不显示完整路径及文件名
    -v:显示完整路径及文件名
tail
  • tail命令显示文件的后N行,也就是说从指定点到文件尾行的输出结果。命令格式:

    1
    tail [-cnfqsv] 文件
  • 选项参数:

    1
    2
    3
    4
    5
    6
    7
    -c #:显示文件的后#个字节的内容
    -n # 或 -#:显示文件的后#行内容
    例1:命令 tail -n 5 /etc/inittab 用于显示/etc/inittab文件的后5行内容
    例2:命令 head +n 5 /etc/inittab 用于从第5行开始显示/etc/inittab文件的内容
    -f:查看文件至尾部内容结束后不退出,刷新并更新显示最新增加的行,按Ctrl+C退出显示
    -q:不显示完整路径及文件名
    -v:显示完整路径及文件名

命令与文件查询

which
  • 寻找执行文件,查找命令的完整文件名:
    1
    2
    3
    which [-a] command # -a会将所有在PATH目录中可以找到的命令均列出,而不只第一个被找到的指令
    which ifconfig # 在非root用户下会查找不到,因为ifconfig位于/sbin/ifconfig下,而非root用户的PATH中不包含该路径,所以找不到
    which cd # 找不到,因为cd为bash的内置命令
whereis
  • 根据文件名寻找文件,查找文件的完整文件名:
    1
    2
    3
    4
    5
    whereis [-bmsu] 文件或目录名
    -b 只找二进制文件
    -m 只找在manual路径下的文件
    -s 只找source源文件
    -u 查找不在上述选项中的其他特殊文件
locate+updatedb
  • locate会根据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名,即所有包含该关键字的文件都将被输出
  • 但是因为数据库的更新一般为一天一次,所以如果需要查找新的内容,需要用updatedb指令更新数据库,updatedb会根据/etc/updatedb.conf去查找硬盘内的文件名,并更新数据库文件。
    1
    2
    3
    locate [-ir] keyword
    -i 忽略大小写差异
    -r keyword可以为正则表达式
find
  • 查找文件,磁盘查找,支持通配符:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    find [PATH] [option] [action]
    find / -mtime 0 # 查找24小时内被修改过的文件
    find /etc -mtime 3 # 查找3天前的24小时内被修改的文件
    find / -mtime +3 # 查找3天前(不含3天本身)被更改的文件
    find / -mtime -3 # 查找3天内被更改的文件
    find / -user name # 查找用户名为name的文件
    find / -group name # 查找群组名为group的文件
    find / -nouser # 查找不属于任何用户的文件,可能出现于网络文件,或是已经被删除的用户创建的文件
    find / -name filename # 查找文件名为filename的文件
    find / -type TYPE # 查找某一类文件,f:正规文件,b:设备文件,d:目录,l:连接文件,s:socket,p:FIFO

压缩与打包

  • 常见压缩扩展名有:
    1
    2
    3
    4
    5
    6
    *.Z: compress程序压缩文件
    *.gz: gzip程序压缩文件
    *.bz2: bzip2程序压缩的文件
    *.tar: tar程序打包的文件,但没有被压缩
    *.tar.gz: tar程序打包的文件,其中经过gzip的压缩
    *.tar.bz2: tar程序打包的文件,其中经过bzip2压缩
gzip
  • gzip可以解开compress、zip与gzip等软件所压缩的文件。
  • gzip还可以用来压缩文件,使用gzip压缩后,源文件会被删除,被替代为.gz的压缩文件。
    1
    2
    3
    4
    5
    6
    7
    gzip [-cdtv#] 文件名
    -c: 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
    -d: 解压缩的参数
    -t: 可以用来校验一个压缩文件的一致性
    -v: 显示压缩比等信息
    -#: 压缩等级,-1最快,-9最慢但压缩程度最高,默认-6
    gzip -d filename # 会将压缩文件解压缩,并删除压缩文件
tar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tar [-j|-z] [cv] [-f 新建的文件名] filename #压缩
tar [-j|-z] [xv] [-f 打包文件名] [-C 目录] #解压缩
-c: 新建打包文件,可配合v查看过程中被打包的文件名
-x: 解打包或解压缩功能,可以搭配-C在特定目录中解开
-j: 通过bzip2的支持进行压缩和解压缩
-z: 通过gzip支持压缩和解压缩
-v: 将正在处理的文件名显示出来
-C: 在特定目录中解压缩
-p: 保留备份数据的原本权限和属性
-P: 保留绝对路径,一般情况下都是相对路径,防止数据覆盖
--exclude=FILE: 在压缩过程中不要讲FILE打包进去
--newer: 打包ctime和mtime在日期后面的文件
--newer-mtime:打包mtime在日期后面的文件
tar -zcv -f filename.tar.gz filename #压缩打包为filename.tar.gz
tar -zxv -f filename.tart.gz -C 欲解压缩的目录 filename

变量读取与声明

read
  • 从控制台读取输入:
    1
    2
    3
    read [-pt] variable
    -p: 可以加上提示符
    -t: 等待输入的秒数
declare
1
2
3
4
5
6
7
8
declare [-aixr] variable
-a: 声明为数组
-i: 声明为整数
-x: 声明为环境变量,用法同export
-r: 声明为只读变量

declare -i sum=100+200+300 #如果不声明为整数,则会默认为字符串
declare +r sum #等同于取消操作

选取命令

cut
1
2
3
4
5
cut -d '分隔符' -f fields #根据分隔符将每一行分割并取出下标为fields的值
cur -c 字符范围 #将每一行字符范围内的内容切割出来

export | cut -c 12- #将export文件的每一行从第12个字符开始以后所有内容切割出来
echo ${PATH} | cut -d ':' -f 3,5 #将path内容按照:分割开来并取第三个和第五个值
  • cut在处理多空格分隔的行时会比较吃力:
grep
  • 分析一行,当该行中有我们想要的信息,就将该行输出:
    1
    2
    3
    4
    5
    6
    7
    grep [-acinv] [--color=auto] '关键词' 文件名
    -a: 将binary文件以text文件的方式进行查找
    -c: 打印出现的次数
    -i: 忽略大小写
    -n: 同时输出行号
    -v: 反向选择,即选择不存在关键字的行
    --color=auto: 将关键字加上颜色显示

排序

sort
1
2
3
4
5
6
7
8
9
sort [-fbMnrtuk] file/stdin
-f: 忽略大小写
-b:忽略最前面的空格
-M:以月份来排序
-n:使用纯数字来排序,默认为文字类型
-r:倒序
-u:相同数据中,只显示一行
-t:分隔符,默认为tab
-k:第几段数据作为排序标准
wc
  • 统计文件的行数和子树:
    1
    2
    3
    4
    wc [-lwm] filename
    -l: 仅列出行
    -w:仅列出多少字
    -m: 多少字
uniq
  • 去重:
    1
    2
    3
    uniq [-ic]
    -i: 大小写无关
    -c: 计数统计
tee
  • 双重重定向,将一份输出同时输出到文件和标准输出流:
    1
    2
    tee [-a] filename
    -a: 添加到文件后面
xargs
  • 读入stdin数据,并且以某种分割字符将其分割成参数。该命令适合于不支持管道的命令来支持管道操作:
    1
    2
    3
    4
    5
    xargs [-0epn] command
    -0: 将特殊字符还原成一般字符
    -e: EOF,当xargs分析到这个参数时会停止解析
    -p:在执行每个命令的参数时,都会询问用户
    -n: 后面接次数,要使用几个参数的意思
------ 本文结束 ------