• Linux 命令入门


    本文对常见的 Linux 命令进行介绍。

    文件目录操作

    pwd(查看当前工作目录)

    ☕️ 命令:pwd

    ⭐️ 例子:

    # 查看当前工作目录的绝对路径
    [root@localhost ~]# pwd
    /root
    

    cd(更改当前工作目录)

    ☕️ 命令:cd dirName,目录路径名可以是绝对路径,也可以是相对路径

    ⭐️ 例子:

    # 将当前工作目录更改为 /usr/bin(绝对路径,以根目录开始)
    [root@localhost ~]# cd /usr/bin
    [root@localhost bin]# pwd
    /usr/bin
    
    # 相对路径,"." 代表当前工作目录,".." 代表当前工作目录的上级目录
    [root@localhost bin]# cd ..
    [root@localhost usr]# pwd
    /usr
    [root@localhost usr]# cd ./bin
    [root@localhost bin]# pwd
    /usr/bin
    
    # 在太多数情况下,可以忽略 "./",因为这部分是隐含的
    [root@localhost usr]# cd bin
    [root@localhost bin]# pwd
    /usr/bin
    
    # 一些常用的便捷写法
    # 将当前工作目录更改为用户主目录
    cd 
    
    # 将当前工作目录切换回前一个工作目录
    cd -
    
    # 将当前工作目录更改为 user_name 的主目录,例如 cd ~bob
    cd ~user_name
    

    ls(列出目录内容)

    ☕️ 命令:ls [options][dirName],显示指定工作目录下之内容(列出工作目录所含的文件及子目录)

    ⭐️ 常用可选项:

    名称 描述
    -a 列出所有文件,包括隐藏文件(以点号开头的文件,默认不列出)
    -d 仅列出目录本身,而不是列出目录的文件数据
    -l 使用长格式显示结果
    -r 以相反的顺序显示结果。通常,ls命令按照字母升序排列显示结果
    -S 按文件大小对结果排序显示
    -t 按修改时间排序显示
    -R 以递归的方式遍历目录的文件,并依序列出

    ✏️ 例子:

    # 列出当前工作目录下的所有文件和目录
    [root@localhost ~]# ls -la
    total 28
    dr-xr-x---.  4 root root  160 Apr 24 09:51 .
    dr-xr-xr-x. 17 root root  224 Apr 23 03:36 ..
    -rw-------.  1 root root 1222 Apr 23 03:37 anaconda-ks.cfg
    -rw-------.  1 root root 2607 Apr 24 09:57 .bash_history
    -rw-r--r--.  1 root root   18 Dec 28  2013 .bash_logout
    -rw-r--r--.  1 root root  176 Dec 28  2013 .bash_profile
    -rw-r--r--.  1 root root  176 Dec 28  2013 .bashrc
    -rw-r--r--.  1 root root  100 Dec 28  2013 .cshrc
    drwxr-xr-x.  4 root root   30 Apr 24 09:51 mysql
    drwxr-----.  3 root root   19 Apr 24 03:02 .pki
    -rw-r--r--.  1 root root  129 Dec 28  2013 .tcshrc
    

    less(查看文件内容)

    ☕️ 命令:less fileName

    ⭐️ 常用可选项:

    名称 描述
    上翻页键(Page Up)或b 后翻一页
    下翻页键(Page Down)或空格 前翻一页
    上方向键 向后一行
    下方向键 向前一行
    G 移动到文本文件末尾
    1Gg 移动到文本文件开头
    /characters 向前搜索指定的字符串
    n 重复上一次搜索
    q 退出 less 命令

    ✏️ 例子:

    # 查看 /etc/passwd 文件内容
    [root@localhost ~]# less /etc/passwd
    

    mkdir(创建目录)

    ☕️ 命令:mkdir [options] dir... ,此处dir...表示一个或多个目录,后续...都表示一个或多个

    ⭐️ 常用可选项:

    名称 描述
    -p 确保所创建的目录的路径存在,不存在的就建一个

    ✏️ 例子:

    # 创建单个目录 
    mkdir dir1
    
    # 创建多个目录
    mkdir dir1 dir2 dir3
    
    # 创建多级目录,如果 /d1/d2 路径存在,直接在该路径下创建目录;如果不存在,先创建 /d1/d2 目录
    mkdir -p /d1/d2/d3
    

    cp(复制文件或目录)

    ☕️ 命令:cp [options] source dest或者cp [options] item... dir

    • 第一种命令将单个文件(或目录) source 复制到文件(或目录) dest 中
    • 第二种命令将多个文件(或目录)复制进目录 dir 中

    ⭐️ 常用可选项:

    名称 描述
    -a 在复制目录时使用,它会保留链接、文件属性,并复制目录下的所有内容,相当于-dpr
    -d 复制时保留链接,这里链接相当于 Windows 的快捷方式
    -f 覆盖已经存在的目标文件时,不给出提示
    -i -f相反,在覆盖目标文件之前给出提示确认,回答 y 时目标文件将被覆盖
    -p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
    -r 递归复制目录及其内容,复制目录时需要该选项(或-a选项)
    -u 当源文件比目标文件新或者目标文件不存在时,才执行复制操作

    ✏️ 例子:

    #  将 file1 复制到 file2,如果 file2 存在,则会被 file1 的内容覆盖;如果 file2 不存在,则创建 file2
    cp file1 file2
    
    # 将 file1 和 file2 复制到目录 dir1,dir1 必须已经存在
    cp file1 file2 dir1
    
    # 使用通配符,将 dir1 中的所有文件复制到 dir2 中,dir2 必须已经存在
    cp dir1/* dir2
    
    # 将 dir1 复制到 dir2 目录中,如果 dir2 不存在,则会创建 dir2
    cp -r dir1 dir2
    

    mv(移动或重命名文件和目录)

    ☕️ 命令:mv [options] source dest或者mv [options] item... dir

    • 第一种命令将文件(或目录) source 移动(或重命名)为 dest
    • 第二种命令将多个文件(或目录)移动到目录 dir 中

    ⭐️ 常用可选项:

    名称 描述
    -b 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份
    -f 如果指定源文件与目标文件同名,会直接覆盖目标文件,不会给出提示
    -i -f相反,在覆盖目标文件之前给出提示确认,回答 y 时目标文件将被覆盖
    -n 不要覆盖任何已存在的文件或目录
    -u 当源文件比目标文件新或者目标文件不存在时,才执行移动操作

    ✏️ 例子:

    # 将 file1 重命名为 file2 
    mv file1 file2
    
    # 将 file1 和 file2 移动到目录 dir1 中,dir1 必须已经存在
    mv file1 file2 dir1
    
    # 使用通配符,将 dir1 中的所有文件移动到 dir2 中,dir2 必须已经存在
    mv dir1/* dir2
    
    # 如果 dir2 已存在,则 dir1 移动到 dir2 中;如果不存在,则 dir1 重命名为 dir2
    mv dir1 dir2
    

    rm(删除文件或目录)

    ☕️ 命令:rm [options] item...

    ⭐️ 常用可选项:

    名称 描述
    -i 删除一个已存在的文件前,会进行提示确认,回答 y 时才删除
    -f 即使原文件属性设为只读,也可以直接删除,没有提示确认
    -r 递归删除目录及其内容

    ✏️ 例子:

    # 删除 file1
    rm -f file1
    
    # 删除 dir1 中的所有内容
    rm -rf dir1/*
    
    # 删除 dir1 和 dir2
    rm -rf dir1 dir2
    
    # 删除当前目录中以 .html 为后缀的文件
    rm -f *.html
    

    ln(创建硬/软链接)

    # 创建硬链接。硬链接和文件本身没有什么区别,只能引用文件,无法引用目录
    ln file1 linkName
    
    # 创建软链接,这里 item 可以是文件,也可以是目录。软链接类似于 Windows 的快捷方式
    ln -s item linkName
    

    which(显示可执行文件位置)

    # 显示指令 "bash" 的可执行文件位置
    [root@localhost ~]# which bash
    /usr/bin/bash
    

    I/O 重定向

    >(标准输出重定向)

    秉承着”万物皆文件“的 UNIX 主旨,终端程序(例如ls命令)从stdin(标准输入)中获取输入,将运行结果和状态消息分别发送给stdout(标准输出)和stdeer(标准错误)。通常来说,标准输入与键盘相关联,标准输出和标准错误与终端屏幕相关联,不会保存为磁盘文件。I/O重定向允许我们对输入的来源和输出的去处进行修改。

    默认情况下,标准输出会显示在终端屏幕上,>操作符可以把标准输出重定向到一个文件中。

    # 将 ls 命令的输出重定向到 ls-output.txt 文件中
    [root@localhost ~]# ls -l /usr/bin > ls-output.txt
    [root@localhost ~]# less ls-output.txt
    total 348636
    -rwxr-xr-x. 1 root root      41488 Nov 16  2020 [
    -rwxr-xr-x. 1 root root      29104 Nov  1  2021 addr2line
    -rwxr-xr-x. 1 root root         29 Nov 24 11:33 alias
    ...
    ls-output.txt
    
    # ">" 的输出重定向会覆盖文件,所以可以使用 ">" 清空文件或者创建一个新的空文件 
    > ls-output.txt
    
    # ">" 的输出重定向会覆盖文件,可以使用 ">>" 实现追加方式的写操作
    ls -l /usr/bin >> ls-output.txt
    

    2>(标准错误重定向)

    在 Shell 内部,分别使用文件描述符 0、1 和 2 来引用标准输入、标准输出和标准错误,所以可以用2>重定向标准错误:

    # 重定向标准错误到 ls-error.txt 文件中
    ls -l /usr/bin 2> ls-error.txt
    
    # 同时重定向标准错误和标准输出到 ls-output.txt 文件中
    ls -l /usr/bin &> ls-output.txt
    
    # &> 是覆盖方式写,&>> 是追加方式写
    ls -l /usr/bin &>> ls-ouput.txt
    
    # 下列命令可以丢弃错误消息,/dev/null 能够接收输入结果但不做任何处理
    ls -l /usr/bin 2> /dev/null
    

    cat(拼接文件)

    ☕️ 命令:cat fileName... ,读取一个或多个文件,并把它们写入到标准输出

    ⭐️ 常用可选项:

    名称 描述
    -n 由 1 开始对所有输出的行数编号
    -b -n相似,只不过对于空白行不编号
    -s 当遇到有连续两行以上的空白行,就代换为一行的空白行

    ✏️ 例子:

    # cat 命令能够以不分页的形式将指定文本内容写入到标准输出中
    [root@localhost ~]# cat ls-output.txt
    ...
    -rwxr-xr-x. 1 root root      41488 Nov 16  2020 [
    -rwxr-xr-x. 1 root root      29104 Nov  1  2021 addr2line
    -rwxr-xr-x. 1 root root         29 Nov 24 11:33 alias
    ...
    
    # 如果 cat 命令不指定参数,会从标准输入中读取数据,并写入到标准输出中
    # 第一行 hello world 是标准输入(从键盘输入),第二行 hello world 是标准输出
    # 通过 Ctrl-D 组合键可以告诉 cat 命令已经到达了标准输入的 EOF
    [root@localhost ~]# cat
    hello world
    hello world
    
    # 可以通过重定向标准输出,创建短小的文本内容,文本内容为标准输入中数据
    [root@localhost ~]# cat > lazy_dog.txt
    The quick brown fox jumped over the lazy dog.
    [root@localhost ~]# cat lazy_dog.txt
    The quick brown fox jumped over the lazy dog.
    
    # cat 命令能够接收多个文件,并将这些文件拼接到一个文件中
    # 例如:有多个文件 movie.mpeg.001 movie.mpeg.002 ... movie.mpeg.099
    # 下列命令将上述文件拼接到文件到 movie.mpeg 中
    cat movie.mpeg.0* > movie.mpeg
    
    # 把 file1 的文本内容加上行号后输入到 file2 中
    cat -n file1 > file2
    
    # 清空 file1 文本内容
    cat /dev/null > file1
    

    | 管道

    ☕️ 命令:command1 | command2,管道操作符|可以将一个命令的标准输出传递给另一个命令的标准输入

    ⭐️ 例子:

    # 通过管道使用 less 命令将输出结果逐页显示
    [root@localhost ~]# ls -l /usr/bin | less
    total 348636
    -rwxr-xr-x. 1 root root      41488 Nov 16  2020 [
    -rwxr-xr-x. 1 root root      29104 Nov  1  2021 addr2line
    -rwxr-xr-x. 1 root root         29 Nov 24 11:33 alias
    ...
    

    sort(排序文本行)

    ☕️ 命令:sort fileName ,将文本中的内容加以排序,并将结果写入到标准输出

    ⭐️ 例子:

    # 对 ls-output.txt 文本中的内容进行排序
    [root@localhost ~]# sort ls-output.txt
    lrwxrwxrwx. 1 root root         10 Apr 23 04:03 bashbug -> bashbug-64
    lrwxrwxrwx. 1 root root         11 Apr 23 04:03 systemd-coredumpctl -> coredumpctl
    lrwxrwxrwx. 1 root root         11 Apr 24 03:03 audit2why -> audit2allow
    ...
    
    # 将 /bin 和 /usr/bin 目录下所有可执行文件合并成一个列表,然后排序,并将结果逐页显示
    [root@localhost ~]# ls /bin /usr/bin | sort | less
    [
    [
    addr2line
    addr2line
    alias
    alias
    apropos
    apropos
    ...
    

    uniq(忽略重复行)

    ☕️ 命令:uniq [options] fileName ,将文本中的内容加以排序,并将结果写入到标准输出

    ⭐️ 常用可选项:

    名称 描述
    -d 仅显示重复出现的行列

    ✏️ 例子:

    # uniq 删除文本中重复出现的行列,前提是该文本是有序排列,所以一般与 sort 命令结合使用
    [root@localhost ~]# uniq test.txt
    1
    2
    1
    [root@localhost ~]# sort test.txt | uniq
    1
    2
    
    # uniq 会删除一个有序的数据列表中的所有重复行
    [root@localhost ~]# ls /bin /usr/bin | sort | uniq | less
    [
    addr2line
    alias
    apropos
    ...
    
    # 如果想查看有哪些重复行,使用 uniq 命令的 -d 选项
    ls /bin /usr/bin | sort | uniq -d | less
    

    wc(统计行数、单词数和字节数)

    ☕️ 命令:wc [options] fileName ,计算文件中的行数、单词数和字节数,并将结果写入到标准输出

    ⭐️ 常用可选项:

    名称 描述
    -l 显示行数(lines)
    -w 显示单词数
    -c 显示字节数(chars)

    ✏️ 例子:

    # 前三个数字分别表示行数、单词数和字节数
    [root@localhost ~]# wc test.txt
    3 3 6 test.txt
    
    # 统计行数
    [root@localhost ~]# ls /bin /usr/bin | sort | uniq | wc -l
    801
    

    grep(输出模式匹配的行)

    ☕️ 命令:grep [options] pattern item,查找文件或者目录中符合条件的行,并将结果写入到标准输出

    ⭐️ 常用可选项:

    名称 描述
    -r 当指定要查找的是目录而非文件时,必须使用该参数
    -i 匹配的时候忽略大小写(默认区分大小写)
    -v 显示不包含匹配文本的所有行

    ✏️ 例子:

    # 寻找 ls-ouput.txt 文件中包含 "zip" 的行
    [root@localhost ~]# grep zip ls-output.txt
    -rwxr-xr-x. 1 root root       3307 Jul 13  2018 gpg-zip
    -rwxr-xr-x. 1 root root       2253 Apr 10  2018 gunzip
    -rwxr-xr-x. 1 root root     100800 Apr 10  2018 gzip
    
    # 如果想寻找目录下所有文件中包含 "zip" 的行,使用 grep 命令的 -r 选项
    [root@localhost ~]# grep -r zip /usr/bin
    Binary file /usr/bin/iconv matches
    /usr/bin/xzdiff:# specified via XZ_OPT. With gzip, bzip2, and lzop it's OK to just unset the
    /usr/bin/xzdiff:      xz1=bzip2;;
    ...
    
    # 寻找包含 zip 的所有文件
    [root@localhost ~]# ls /bin /usr/bin | sort | uniq | grep zip
    gpg-zip
    gunzip
    gzip
    

    head/tail(输出文件的开头/结尾)

    ☕️ 命令:head/tail [options] fileName,查看文件的开头/结尾部分的内容,并将结果写入到标准输出

    ⭐️ 常用可选项:

    名称 描述
    -n 显示的行数,默认为 10 行

    ✏️ 例子:

    # 输出文件的前 5 行
    [root@localhost ~]# head -n 5 ls-output.txt
    total 348636
    -rwxr-xr-x. 1 root root      41488 Nov 16  2020 [
    -rwxr-xr-x. 1 root root      29104 Nov  1  2021 addr2line
    -rwxr-xr-x. 1 root root         29 Nov 24 11:33 alias
    lrwxrwxrwx. 1 root root          6 Apr 23 03:33 apropos -> whatis
    
    # 输出结果的后 5 行
    [root@localhost ~]# ls /usr/bin | tail -n 5 
    zgrep
    zless
    zmore
    znew
    zsoelim
    

    tee(读取标准输入并同时写入标准输出和文件)

    ☕️ 命令:tee [options] fileName...,从标准输入读取内容,并把它们写入到标准输出和其它文件中

    ⭐️ 常用可选项:

    名称 描述
    -a 以追加方式写入文件,而不是覆盖

    ✏️ 例子:

    # 第一行 hello world 是标准输入(从键盘输入),第二行 hello world 是标准输出
    [root@localhost ~]# tee output.txt
    hello world
    hello world
    [root@localhost ~]# cat output.txt
    hello world
    
    # 将结果写入 output.txt,并使用 grep 过滤标准输出的内容
    [root@localhost ~]# ls /usr/bin | tee output.txt | grep zip
    gpg-zip
    gunzip
    gzip
    

    权限操作

    chmod(修改文件权限)

    文件和目录的访问权限是按照读取、写入和执行来定义的,可以通过ls命令来查看:

    [root@localhost ~]# > foo.txt
    [root@localhost ~]# ls -l foo.txt
    -rw-r--r--. 1 root root 0 May  8 04:42 foo.txt
    

    列表项的前 10 个字符是文件属性,第 1 个字符是文件类型,其中-表示普通文件,d表示目录;剩下 9 个字符是文件模式,分别代表文件属主、文件属组、其他用户的读取、写入和执行权限,其中r表示读取权限,w表示写入权限,x表示执行权限。

    chmod命令可以修改文件或目录的权限,修改方式一般采用八进制表示法,每个八进制数可以描述 3 个二进制位,正好和文件的三种权限对应,例如:7(rwx)6(rw-)5(r-x)4(r--)0(---)

    # 如果修改的文件的属主不是当前用户,需要超级用户权限
    [root@localhost ~]# chmod 600 foo.txt
    [root@localhost ~]# ls -l foo.txt
    -rw-------. 1 root root 0 May  8 04:42 foo.txt
    

    chown(更改文件属主和属组)

    ☕️ 命令:chown [owner][:[group]] fileName...,该命令需要超级用户权限

    ⭐️ 例子:

    # 将文件 file1 所有权由当前属主更改为用户 bob
    chown bob file1
    
    # 将文件 file1 所有权由当前属主更改为用户 bob,将文件属组更改为 users 组
    chown bob:users file1
    
    # 将文件 file1 属组更改为 admins 组,文件属主不变
    chown :admins file1
    
    # 将文件 file1 所有权由当前属主更改为用户 bob,将文件属组更改为用户 bob 的登录组
    chown bob: file1
    

    passwd(修改密码)

    ☕️ 命令:passwd [user],修改当前用户的密码(如果拥有超级用户权限,也可以为其他用户设置密)

    ⭐️ 例子:

    # 修改当前用户的密码
    [root@localhost ~]# passwd
    Changing password for user root.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    su(切换用户)

    ☕️ 命令:su [-] [user]

    ⭐️ 常用可选项:

    名称 描述
    - 使用该选项,切换用户后的工作目录会更改为 user 的主目录
    user 指定切换的用户名称,默认为超级用户 root

    ✏️ 例子:

    # 不使用 "-" 选项,切换用户后,不改变工作目录
    [me@localhost ~]$ pwd
    /home/me
    [me@localhost ~]$ su
    Password: 
    [root@localhost me]# pwd
    /home/me
    
    # 使用 "-" 选项,切换用户后,工作目录会更改为 user 的主目录
    [me@localhost ~]$ pwd
    /home/me
    [me@localhost ~]$ su -
    Password: 
    [root@localhost ~]# pwd
    /root
    

    sudo(以其他用户身份执行命令)

    # 以超级用户 root 的权限执行命令
    [me@localhost ~]$ sudo backup_script
    Password:
    System Backup Starting...
    

    解压缩操作

    gzip/gunzip

    # 需要注意,gzip/gunzip 进行压缩或者解压缩操作时,会删除原始文件或者原始压缩包(其它几种方式不会)
    # 压缩,压缩包会使用原始的文件名加上 .gz 进行命名
    [root@localhost ~]# gzip test.txt
    [root@localhost ~]# ls
    test.txt.gz
    
    # 解压缩,将 test.txt.gz 解压出来
    [root@localhost ~]# gunzip test.txt.gz
    [root@localhost ~]# ls
    test.txt
    

    zip/unzip

    ☕️ 命令:zip/unzip [options] item

    ⭐️ 可选项:

    名称 描述
    -r zip指令选项,压缩目录时需要加上该选项
    -d unzip指令选项,指定文件解压后存放的路径(必须存在)

    ✏️ 例子:

    # 压缩,将 test 目录压缩为 test.zip,压缩包后缀为 .zip
    [root@localhost ~]# zip -r test.zip test
      adding: test/ (stored 0%)
    
    # 解压缩,将 test.zip 解压到当前路径
    [root@localhost ~]# unzip test.zip
    Archive:  test.zip
    
    # 解压缩,将 test.zip 解压到指定路径下
    [root@localhost ~]# mkdir temp
    [root@localhost ~]# unzip -d ./temp test.zip
    Archive:  test.zip
       creating: ./temp/test/
    

    tar

    ☕️ 命令:tar [options] item...

    ⭐️ 可选项:

    名称 描述
    -c 产生.tar.gz文件
    -v 显示详细信息
    -f 指定压缩后的文件名
    -z 打包的同时压缩
    -x 解压.tar.gz文件
    -C 指定文件解压后存放的路径(必须存在)

    ✏️ 例子:

    # 将 test1.txt 和 test2.txt 压缩到 test.tar.gz 文件中,压缩包后缀为 .tar.gz
    [root@localhost ~]# tar -zcvf test.tar.gz test1.txt test2.txt
    test1.txt
    test2.txt
    
    # 将 test.tar.gz 解压到当前目录
    [root@localhost ~]# tar -zxvf test.tar.gz
    test1.txt
    test2.txt
    
    # 将 test.tar.gz 解压到指定路径下(该路径必须存在)
    [root@localhost ~]# mkdir temp
    [root@localhost ~]# tar -zxvf test.tar.gz -C ./temp
    test1.txt
    test2.txt
    
    # 将 temp 目录压缩到 temp.tar.gz 文件中
    [root@localhost ~]# tar -zcvf temp.tar.gz temp
    temp/
    temp/test1.txt
    temp/test2.txt
    

    参考

    1. https://www.runoob.com/linux/linux-tutorial.html
    2. Linux命令操作——常用解压缩命令
    3. 《Linux命令行大全(第二版)》
  • 相关阅读:
    wikioi 1002 旁路
    OS X升级到10.10使用后pod故障解决方案出现
    Python challenge 3
    maven 编
    独立博客网站FansUnion.cn操作2多年的经验和教训以及未来计划
    Wakelock API详解
    智遥工作流——会签与多人审批区别
    mysql 参数optimizer_switch
    OpenRisc-31-关于在设计具有DMA功能的ipcore时的虚实地址转换问题的分析与解决
    TROUBLE SHOOTING: FRM-30425
  • 原文地址:https://www.cnblogs.com/zongmin/p/16246816.html
Copyright © 2020-2023  润新知