记录一些 Linux 命令

 一些常用的 Linux 命令及相关技巧

参考网站

常用终端命令

更新软件

Ubuntu/Debian

1
2
3
4
# 更新源列表
sudo apt update
# 更新已安装软件
sudo apt upgrade

注意:在 Ubuntu18.04 以后应尽量使用 apt,而不是 apt-getapt 在运行时可以给出更多的提示。

CentOS

1
2
3
4
# 升级所有包同时也升级软件和系统内核
sudo yum -y update
# 只升级所有包,不升级软件和系统内核
sudo yum -y upgrade

Arch Linux/Manjaro

1
2
# 先同步软件数据库(y),再更新系统(u)
sudo pacman -Syu

文件管理

  • ls:列出目录内容(list);加参数 -l 可查看详细信息(包括权限)

  • cd:改变目录(change directory)。特别地,cd - 等价于 cd $OLDPWD,可以进入刚才(上一次)所在的目录

  • rm:删除目录或文件(remove)
    参数:-f 强制删除文件或目录;-r-R:递归处理,如果删除中含有目录,则必须加上此选项。

  • rmdir:删除目录(remove directory)

  • mkdir:创建目录(make directory)

  • mv:移动(重命名)目录或文件(move)

  • touch:创建新的空文件

  • cp:复制目录或文件(copy)

  • find

    1
    2
    3
    # -name:指定文件名关键字;默认区分大小写,使用 -iname 可以忽略大小写
    # 搜索范围包含了起始目录及其所有子目录;可以使用"."(当前目录)
    find /home -name "*.txt"
    

    直接使用 findfind . 可以列出当前目录及其所有子目录下的所有文件,相当于递归版的 ls

  • locate
    find 的功能类似,但 locate 会预先建立一个索引数据库,直接在该索引中搜索,因此查询速度较快。updatedb 命令可以用来强制更新索引数据库。

    1
    2
    3
    4
    # 查找和 pwd 相关的所有文件
    locate pwd
    # 搜索 etc 目录下所有以 sh 开头的文件
    locate /etc/sh
    
  • nano:字符终端文本编辑器

  • vi / vim:Vim 编辑器

  • 运行当前目录下的文件时,需使用相对路径 ./test.sh,而非直接使用文件名 test.sh

文本处理

  • grep
    global search regular expression (RE) and print out the line(全面搜索正则表达式并把行打印出来)的缩写。可以用于搜索或提取文本中的字符串,其默认输出为匹配到的字符串所在的一整行,可以通过 -o 参数使其只输出匹配到的内容本身

    1
    2
    3
    4
    5
    # -n/--line-number:打印匹配结果所在行号
    grep -n 'word' aaa.txt
    # -i/--ignore-case:忽略大小写(默认大小写敏感)
    # -R/-r  --recursive:递归搜索,加入该参数可以不指定文件而是指定目录(若不指定默认为当前目录"."),搜索范围包含了此目录及其所有子目录
    grep -ri 'listen' .
    

    进阶用法:

    1
    2
    3
    4
    # 在系统进程中搜索 nginx
    ps -ef | grep nginx
    # 在当前目录下递归搜索 nginx.conf 文件
    find / | grep nginx.conf
    

    以上两个命令都用到了 |,这是「管道命令符」,它会将前一个命令的标准输出作为后一个命令的标准输入。此外,还可以用 xargs 在命令之间传递参数,可以参考这里

  • sed
    stream editor(流式文本编辑器)的缩写。

  • awk
    AWK 是一种处理文本的编程语言,是一个强大的文本分析工具。其名称来自它的三位创始人 Alfred Aho, Peter Weinberger 和 Brian Kernighan 的姓氏首字母。

下载

  • wget

    1
    2
    3
    4
    # -O:以指定的文件名保存
    wget -O file.zip http://example.com/large.file
    # -i/--input-file:下载在文件中出现的所有链接
    wget -i file.txt
    
  • curl

    1
    2
    # -o/--output:把输出写到指定名称的文件中
    curl http://jaywcjlove.gitee.io/test.iso -o filename.iso
    

解压

  • unzip

    1
    2
    # -d:指定文件解压缩后所要存储的目录
    unzip test.zip -d /tmp
    
  • tar

    1
    2
    # -x:-x/--extract/--get:从备份文件中还原文件;-f/--file=:指定备份文件
    tar -xf archive.tar
    
  • gzip/gunzip

    1
    2
    3
    4
    # -d/--decompress/----uncompress:解开压缩文件
    gzip –d /opt/etc.zip.gz
    # 与上面等价
    gunzip /opt/etc.zip.gz
    

权限更改

  • chmod
    change mode 的缩写,用于修改文件/目录的读、写、执行权限。

    1
    2
    3
    4
    5
    6
    7
    # 将文件 file1.txt 与 file2.txt 设为该文件拥有者、与其所属同一个群体者可写入,其他  人不可写入
    chmod ug+w,o-w file1.txt file2.txt
    # 赋予所有人所有权限(两条命令等价)
    chmod a=rwx file
    chmod 777 file
    # 将 /home/wwwroot/ 里的所有文件和文件夹设置为 755 权限
    chmod -R 755 /home/wwwroot/*
    

    参数:
    u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体 (group) 者,o 表示其他以外的人,a 表示这三者皆是;
    + 表示增加权限,- 表示取消权限,= 表示唯一设定权限;
    r 表示可读取,w 表示可写入,x 表示可执行,- 表示无权限;
    -R 表示递归处理(recursive),即将指令目录下的所有文件及子目录一并处理。

    3 个数字依次表示 User、Group、及 Other 的权限 。r=4(读取),w=2(写入),x=1(执行)。如:rwx 属性则 4+2+1=7;rw- 属性则 4+2=6;r-x 属性则 4+1=7。

  • chown
    change owner 的缩写,用于修改文件/目录所有者。

  • chgrp
    change group 的缩写,用于修改文件/目录所属群组。用户组配置文件为 /etc/group

文件打印(输出)

  • cat
    concatenate(连接)的缩写,所谓「连接文件并打印到标准输出设备上」。

    1
    cat /var/log/shadowsocks.log
    

    注:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。可以按 Ctrl+S 停止滚屏;按 Ctrl+Q 恢复滚屏

系统状态

  • ps
    process status 的缩写。报告当前系统的进程状态。参数:-e:显示所有进程信息,连同命令行;-f:显示UID, PPIP, C 与 STIME 栏位。

  • top
    实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,提供了互动式界面,用热键可以管理。类似于 Windows 中的任务管理器

日志查看

  • tail
    在屏幕上显示指定文件的末尾若干行,通常用于日志文件的跟踪输出

    1
    tail -f /opt/bitnami/nginx/logs/error.log
    

    -f:显示文件最新追加的内容。另有 tailf 命令,当文件改名之后它也能继续跟踪,且与 tail 的机制有一定区别。

终端控制

  • history
    显示历史命令

    常配合 ! 使用以执行特定序号的历史命令;也可配合 | grep 进行历史记录查找。其记录文件保存于 ~/.bash_history

    参数:-c:清空历史命令;history 10:显示最近的 10 条历史命令。

  • clear:终端清屏

其他命令

  • man
    manual 的缩写,用于查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。

    1
    2
    3
    4
    # 查看 grep 命令的帮助文档
    man grep
    # 查看 bash 中所有的快捷键
    man readline
    

特殊符号意义

  • .:当前目录

  • ..:当前目录的上级目录

  • ~:代表当前用户的目录,如用户 user 的主目录就是 /home/user/。特别地,root 用户的主目录为 /root/

  • /:正斜杠是路径分隔符,单独使用表示根目录

  • \:反斜杠是转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值。常用的情况:如果在 \ 之后一个换行字符(回车)立即出现,则转义字符使行得以继续,即多行执行一条命令。遇到单一命令过长时常常分行写并在每行最后使用 \ 以增加可读性

  • ;:用分号隔开一行的多个命令,每个命令按照从左到右的顺序依次执行,彼此之间不关心是否失败,所有命令都会执行

  • &:放在命令的启动参数后面(命令最后)表示设置此进程为后台进程(即不占用当前终端的IO),但关闭终端仍会终止进程。常与 nohup (关闭 session 不终止进程)一起使用,如 nohup ./test.sh &

  • &&:shell 在执行某个命令的时候,会返回一个值,保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;否则表示执行失败。&& 即逻辑与,可以连接两个命令,只有左边的命令执行成功才会执行右边的命令

  • |:管道命令符,将前一个命令的标准输出作为后一个命令的标准输入

  • ||:即逻辑与,可以连接两个命令,只有左边的命令执行失败($? != 0)才会执行右边的命令

  • >:输出重定向(覆盖原内容),如丢弃输出内容:command > /dev/null

  • >>:输出重定向(追加)

  • >&:输出重定向(合并文件),常用于重定向标准错误输出,如 ./test.sh > log.txt 2>&1,具体可以参考这里这里

  • <:输入重定向,同样也存在 <<<&。以上四条可以参考此页

  • !:引用历史命令,后直接跟数字可执行 history 对应序号的历史命令,或跟某一命令(的前几个字符)以执行最近一次使用的某命令

  • !!:引用上一条命令,类似方向上键,但可以方便地实现任意位置的扩充

  • !$:引用上一条命令的最后一个参数。感叹号的其他用法详见这里

  • ^:用于替换上一条命令的某些字串并执行。如:^foo^bar 可将上一条命令中的第一个 foobar 代替并立刻执行。要替换上一条命令的所有 foo 可以使用 !!:gs/foo/bar(这实际是 vi 的语法)。详见 COMMANDLINEFU.com 的解说

  • #:注释。特别地,#! 用在脚本的第一行以指定脚本解释器,如 #!/bin/bash

终端快捷键指令

  • Tab:命令自动补全

    一般情况下 Linux 终端中输入部分指令,按 TAB 就能自动补全。在某些系统(如 CentOS)中,可能对部分软件(如 docker)的指令没有预装命令补齐脚本,可以手动安装并刷新:

    1
    2
    3
    4
    sudo yum install -y bash-completion
    # 刷新
    source /usr/share/bash-completion/bash_completion
    source /usr/share/bash-completion/completions/docker
    
  • 上/下键:切换上/下一条历史命令

  • Ctrl + C:终止当前任务/进程

  • Ctrl + R:搜索命令行历史记录
    按下按键之后,输入关键字便可以搜索;重复按下 Ctrl + R 会向后查找匹配项;回车会执行当前匹配的命令;右方向键会将匹配项放入当前行中,不会直接执行;Ctrl + S 会向前查找匹配项。

vi/vim 编辑器命令及快捷键

注意:以下快捷键区分大小写,大写的快捷键需要按住 Shift

查找

查找到的字符串会被高亮

  • /字符串:从当前光标所在位置开始向文件尾部查找指定字符串的内容
  • ?字符串:从当前光标所在位置开始向文件头部查找指定字符串的内容
  • n:向后查找下一个
  • N:向前查找下一个(需要按住 Shift)

模式切换

  • Esc:从编辑模式切换到命令模式
  • i:在当前字符前插入文本(进入编辑模式)

撤销与恢复

在命令模式下:

  • u:撤销
  • Ctrl + r:恢复/反撤销

保存与退出

  • :wq!
    在命令模式下,执行强制保存并退出操作。其中 w 表示保存(write),q 表示退出(quit),! 表示强制执行(即使文件为只读);各符号可组合使用。

  • :x
    在命令模式下,写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间;否则不会更新文件修改时间。(而 :wq 即使文件没有被修改也强制写入,并更新文件的修改时间)

  • ZZ
    在命令模式下的保存并退出(需要按住 Shift)。

  • ZQ
    在命令模式下的退出且不保存(需要按住 Shift)。

翻页

  • Ctrl + u:向文件首翻半屏
  • Ctrl + d:向文件尾翻半屏
  • Ctrl + f:向文件尾翻一屏
  • Ctrl + b:向文件首翻一屏

修改文件换行符

在 Windows 下编写的脚本直接在 Linux 上执行,往往会因为换行符的问题(Windows 默认为 CRLF,Unix 则为 LF)而报错:

bad interpreter: No such file or directory

在 vi 命令模式中使用 :set ff,可以看到它的编码格式为 dos。

使用命令修改文件编码为 unix::set ff=unix

-------------本文结束    感谢您的阅读-------------
0%