• Linux - 常用基础指令


    目录

    part 1

    ls

    tree

    stat

    part 2

    clear

    pwd

    echo

    cd

     cal

    date

    part 3

    touch

    mkdir

    rmdir

    rm

    cp

    mv

    part 4

    cat

    more

    less

    head

    tail

    part 5

    find

    which

    locate

    grep

    part 6

    chmod

    chown

    chgrp

    sudo

    su

    part 7

    uname

    id

    man手册

    --help选项

    part 8

    tar

    zip/unzip

    指令别名

    重定向和管道

    注意事项


    part 1

    ls

    • 使用格式:ls [选项] [目录或文件...]

    标准选项: [-CFRacdilqrtu1]

    • 功能介绍:对于目录,列出该目录下的所有子目录与文件。对于文件,列出文件名以及其他信息。没指定具体的内容时,默认是当前目录。
    • 常用选项:

    -a 列出目录下的所有文件,包括以 . 开头的隐含文件。

    -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录

    -i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
    -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
    -l 列出文件的详细信息。
    -n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
    -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
    -r 对目录反向排序。
    -t 以时间排序。
    -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
    -R 列出所有子目录下的文件。(递归)
    -1 一行只输出一个文件。

    tree

    • 使用格式:tree [参数]
    • 功能介绍:以树状图形式列出目录内容。可能系统没有安装tree指令,此时需要手动安装一下:sudo yum install tree
    • 常用选项:

    -a  显示所有文件和目录

    -C  使用彩色显示

    -d  仅显示目录名

    -D  显示文件更改时间

    stat

    • 使用格式:stat [参数] 文件名
    • 功能介绍:用于显示文件的状态信息。stat和ls的区别在于,ls是列出当前目录所有文件的部分信息,而stat是列出指定文件的详细信息,例如时间戳的详略对比等。
    • 常用选项:

    -c  设置显示格式

    -f  显示文件系统信息

    -L  支持符号链接

    -t  设置以简洁方式显示

    part 2

    clear

    • 使用格式:clear
    • 功能介绍:清除终端界面已有内容。执行clear命令后终端界面会向后翻一页,实现了“清除”当前屏幕上已有内容的效果
    • 常用选项:略

    pwd

    • 使用格式:pwd
    • 功能介绍:显示出当前目录的路径,默认从根目录开始
    • 常用选项:略

    echo

    • 使用格式:echo[OPTION]... [STRING]...
    • 功能介绍:显示一行文本。STRING既可以加双引号也可以不加双引号。
    • 常用选项:

    -n  不输出行尾的换行符.

    -e  允许对下面列出的加反斜线转义的字符进行解释.

    -E  禁止对在STRINGs中的那些序列进行解释.

    --help  显示帮助并退出(须单独运行)

    --version  输出版本信息并退出(须单独运行)

    在没有 -E 的情况下,可承认并可以内置替换以下序列:\NNN  字符的ASCII代码为NNN(八进制)

    \\    反斜线

    \a    报警符(BEL)

    \b    退格符

    \c    禁止尾随的换行符

    \f    换页符

    \n    换行符

    \r    回车符

    \t    水平制表符

    \v    纵向制表符

    cd

    • 使用格式:cd [选项]  [DIR 目录]
    • 功能介绍:改变当前目录至 DIR 目录。默认 DIR 目录是家目录。
    • 常用选项:

    -L    强制跟随符号链接: 在处理 ’..' 之后解析 DIR 中的符号链接。
    -P    使用物理目录结构而不跟随符号链接: 在处理 '..' 之前解析 DIR 中的符号链接。
    -e    如果使用了 -P 参数,但不能成功确定当前工作目录时,返回非零的返回值。
    -@    在支持拓展属性的系统上,将一个有这些属性的文件当作有文件属性的目录。

    其中,cd指令默认情况下跟随符号链接,如同指定 `-L'。

    特别的,cd后面直接跟-,表示返回刚才的目录,即

    cd -

     cal

    • 使用格式:cal [ -mjy ] [日份] [ 月份 ] [ 年份 ]
    • 功能介绍:显示系统月历与日期信息。简单好用,无需过多介绍。
    • 常用选项:

    -1  显示本月的日历

    -3  显示最近三个月的日历

    -C  使用校准模式

    -h  显示帮助信息

    -j  显示在当年中的第几天

    -l  单月份输出日历

    -m  将星期一作为每月的第一天

    -s  将星期天作为每月的第一天

    -V  显示版本信息

    -y  显示当年的日历

    date

    • 使用格式:       

    date [OPTION]... [+FORMAT]
    date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
    简而言之,就是:date [选项] [参数]

    • 功能介绍:用来显示或设定系统的日期与时间
    • 常用选项:

    -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;  

    -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;  

    -u:显示GMT;  

    • 常见参数说明:<+/-时间日期格式>:指定显示时使用的日期时间格式

    如下只列出部分参数,具体可以自行查询man手册

    %H 小时,24小时制(00~23)

    %I 小时,12小时制(01~12)  

    %k 小时,24小时制(0~23)  

    %l 小时,12小时制(1~12)   

    %Z 显示时区,日期域(CST)  

    %a 星期的简称(Sun~Sat)  

    %A 星期的全称(Sunday~Saturday)  

    %B 月的全称(January~December)  

    %c 日期和时间(Tue Nov 20 14:12:58 2012)  

    %m  月份(01~12)  

    %y  年的最后两个数字(00)

    %Y  年(用 4 位表示)

    • 用法示例:

    格式化输出年月日,时分秒和[am,pm]

    date +%F_%T%P

    输出5天前的日期

    date -d "5 day ago" +"%Y_%m_%d" 

    加减操作

    1. date +%Y%m%d #显示前天年月日
    2. date -d “+1 day” +%Y%m%d #显示前一天的日期
    3. date -d “-1 day” +%Y%m%d #显示后一天的日期
    4. date -d “-1 month” +%Y%m%d #显示上一月的日期
    5. date -d “+1 month” +%Y%m%d #显示下一月的日期
    6. date -d “-1 year” +%Y%m%d #显示前一年的日期
    7. date -d “+1 year” +%Y%m%d #显示下一年的日期

    part 3

    touch

    • 使用格式:touch  [参数]  文件名
    • 功能介绍:用于创建空文件或修改时间戳。如果文件不存在,则会创建出一个空内容的普通文件(也可以理解为创建一个空的普通文件);如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作。
    • 常用选项:

    -a  设置文件的读取时间记录

    -c  不创建新文件

    -d  设置时间与日期

    -m  设置文件的修改时间记录

    -t  设置文件的时间记录,格式与date命令相同

    mkdir

    • 使用格式:mkdir [选项] 目录名称...
    • 功能介绍:创建目录文件。若要创建的目录已经存在,则会提示已存在而不会继续创建。要想一次性创建多层目录,则需要加入-p参数,进行递归操作。
    • 常用选项:

    -m mode  为新建立的目录设定模式,就象应用命令chmod一样,以后仍 然使用缺省模式建立新目录。

    -p  递归地创建多级目录。忽略参数对已存在的目录的覆盖,相当于用命令 umask进行了 'u+wx' 的设置。例如:已存在目录a,当用到命令mkdir a'时报错,而mkdir -p /a则不会。

    --verbose  打印出新建立的每一个目录名。与--parents联合使用最有效。

    rmdir

    • 使用格式:rmdir [参数] 目录名
    • 功能介绍:删除空目录文件。rmdir命令仅能够删除空内容的目录文件,如需删除非空目录时,则需要使用带有-R参数的rm命令进行操作。
    • 常用选项:

    -p  递归处理所有子文件,但要保证每个子目录都必须是空的。

    rm

    • 使用格式:rm [参数] 文件名
    • 功能介绍:删除目标文件,可以一次删除多个文件或递归删除目录及其内的所有子文件。
    • 常用选项:

    -d  仅删除无子文件的空目录

    -f  强制删除文件而不询问

    -i  删除文件前询问用户是否确认

    -r  递归删除目录及其内全部子文件

    -v 显示执行过程详细信息

    cp

    • 使用格式:cp [参数] 源文件名 目标文件名或路径
    • 功能介绍:用于复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。
    • 常用选项: 

    -a  功能等价于“pdr”参数组合

    -b  覆盖目标文件前先进行备份

    -d  复制链接文件时,将目标文件也建立成链接文件

    -f  若目标文件已存在,则会直接覆盖

    -i  若目标文件已存在,则会询问是否覆盖

    -l  对源文件建立硬链接,而非复制文件

    -p  保留源文件或目录的所有属性信息

    -r  递归复制所有子文件

    -s  对源文件建立软链接,而非复制文件

    -v  显示执行过程详细信息

    mv

    • 使用格式:mv [参数] 源文件名 目标文件名或目录
    • 功能介绍:对文件进行剪切移动,当源文件和目标位置在同一目录时相当于重命名操作。
    • 常用选项: 

    -b  覆盖前为目标文件创建备份

    -f  强制覆盖目标文件而不询问

    -i  覆盖目标文件前询问用户是否确认

    -n  不要覆盖已有文件

    -u  当源文件比目标文件更新时,才执行覆盖操作

    -v  显示执行过程详细信息

    part 4

    cat

    • 使用格式:cat [参数] [文件名]
    • 功能介绍:显示文件内容,默认显示在终端设备。当不指定文件时,默认接收标准输入设备的输入,并显示到终端设备。
    • 常用选项: 

    -A 等价于”-vET”参数组合

    -b 显示行数(空行不编号)

    -e 等价于”-vE”参数组合

    -E 每行结束处显示$符号

    -n 显示行数(空行也编号)

    -s 显示行数(多个空行算一个编号)

    -t 等价于”-vT”参数组合

    -T 将TAB字符显示为^I符号

    -v 使用^和M-引用,除了LFD和TAB之外

    more

    • 使用格式:more [参数] 文件名
    • 功能介绍:分页显示文本文件内容。在查看过程中,回车是向下一行,空格或z是向下一页,按q是退出。但more一个比较难受的地方在于只能向后走,不能向前翻。
    • 常用选项: 

    -c  不滚屏,先显示内容再清除旧内容

    -d  显示提醒信息,关闭响铃功能

    -f  统计实际的行数,而非自动换行的行数

    -l  将“^L”当作普通字符处理,而不暂停输出信息

    -p  先清除屏幕再显示文本文件的剩余内容

    -s  将多个空行压缩成一行显示

    -u  禁止下划线

    -数字  设置每屏显示的最大行数

    +数字  设置从第N行开始显示内容

    less

    • 使用格式:less [参数] 文件名
    • 功能介绍:分页显示文件内容。分页显示的功能与more命令很相像,但more命令只能从前向后浏览文件内容,而less命令则不仅支持more的所有快捷键,而且还能从前向后(PageDown键)和从后向前(PageUp键),还有其它快捷键可自行搜索。
    • 常用选项: 

    -e  当文件显示结束后自动退出

    -f  强制打开文件

    -m  显示阅读进度百分比

    -N  显示文件内容时带行号
    -s  将连续多个空行视为一行

    -o  将要输出的内容写入到指定文件中

    • 使用格式:head [参数] 文件名
    • 功能介绍:显示指定文件开头的内容,默认为前10行。
    • 常用选项: 

    -c  设置显示头部内容的字符数

    -n  设置显示行数

    -q  不显示文件名的头信息

    -v  显示文件名的头信息

    tail

    • 使用格式:tail [参数] 文件名
    • 功能介绍:显示指定文件末尾内容,默认显示后10行;
    • 常用选项: 

    -c  设置显示文件尾部的字符数

    -f  持续显示文件尾部最新内容

    -n  设置显示文件尾部的行数

    part 5

    find

    • 使用格式:find [路径] [参数] 查找关键字
    • 功能介绍:在指定目录下查找文件,可以使用不同的选项来过滤和限制查找的结果。
    • 参数说明: 

    path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。

    expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

    expression 中可使用的选项有二三十个之多,以下列出最常用的部份:

    -name pattern:按文件名查找,支持使用通配符 * 和 ?。
    -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
    -size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
    -mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
    -user username:按文件所有者查找。
    -group groupname:按文件所属组查找。
    find 命令中用于时间的参数如下:

    -amin n:查找在 n 分钟内被访问过的文件。
    -atime n:查找在 n*24 小时内被访问过的文件。
    -cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
    -ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
    -mmin n:查找在 n 分钟内被修改过的文件。
    -mtime n:查找在 n*24 小时内被修改过的文件。
    在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。

    例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。

    关于时间 n 参数的说明:

    +n:查找比 n 天前更早的文件或目录。

    -n:查找在 n 天内更改过属性的文件或目录。

    n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

    which

    • 使用格式:which [参数] 文件名
    • 功能介绍:用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们仅仅是想找到命令所在的路径,那么这个which命令就太合适了。
    • 常用选项: 

    -a  显示PATH变量中所有匹配的可执行文件

    -n  设置文件名长度(不含路径)

    -p  设置文件名长度(含路径)

    -V  显示版本信息

    -w  设置输出时栏位的宽度

    locate

    • 使用格式:locate [参数] 文件名
    • 功能介绍:用于快速查找文件或目录。Linux可能会显示没有locate命令,此时就需要手动安装mlocate包,然后需要更新一下数据库才(sudo updatedb)可以正常使用。

    locate和find的区别:

    它们之间的主要区别在于搜索速度和搜索方式。locate快,因为它使用一个预生成的文件数据库(通常是 /var/lib/mlocate/mlocate.db)来查找文件,但它执行的是模糊匹配。而find虽然相对较慢,但由于是实时搜索文件系统,所以执行的是精确匹配。

    • 常用选项: 

    -b  仅匹配文件名

    -c  不输出文件名

    -i  忽略大小写

    -l  限制最大查找数量

    -r 使用正则表达式

    -w 匹配完整的文件路径

    grep

    • 使用格式:grep [选项] 关键字 文件 ...
    • 功能介绍:用于在文件中查找关键字,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。
    • 常用选项: 

    -c  只显示匹配的行数

    -E  支持扩展正则表达式

    -F 匹配固定字符串的内容

    -h 搜索多文件时不显示文件名

    -i 忽略关键词大小写

    -l 只显示符合匹配条件的文件名

    -v 显示不包含匹配文本的所有行

    part 6

    chmod

    • 使用格式:chmod [选项] 权限格式 文件 ...
    • 功能介绍:用于改变文件的权限。默认只有文件的所有者和root可以设置,普通用户只能管理自己文件的权限属性。设置权限时既可以使用数字法,也可以使用字母表达式。
    • 常用选项: 

    -c  改变文件权限成功后再输出成功信息

    -f  改变文件权限失败后不显示错误信息

    -R  递归处理所有子文件

    -v  显示执行过程详细信息

    chown

    • 使用格式:chown [参数] 拥有者[:所属组] 目标文件...
    • 功能介绍:改变文件或目录的用户或用户组信息,所属组是选择性添加的,不加就是只更改文件的拥有者。一般情况下需要用sudo提权才能正常使用。
    • 常用选项: 

    -c  显示所属变更信息

    -f  若该文件拥有者无法被更改也不显示错误

    -R  递归处理所有子文件

    -v  显示执行过程详细信息

    chgrp

    • 使用格式:chgrp [参数] 目标组 文件名
    • 功能介绍:更改文件所属用户组。
    • 常用选项: 

    -c  显示调试信息

    -f  不显示错误信息

    -h  对符号链接文件做修改

    -L  遍历每个符号链接

    -P  不遍历每个符号链接

    -R  递归处理所有子文件

    -v  显示执行过程详细信息

    sudo

    • 使用格式:sudo [参数] 命令
    • 功能介绍:用于授权普通用户以管理员的身份(root用户)执行命令。不过普通用户如果想要使用sudo,还需要使root将此用户添加到“信任列表”中。具体做法是,在/etc/sudoers文件中有类似内容的地方,按照如下格式添加 user ALL=(ALL) ALL,如果担心把sudoers文件搞坏可以提前备份一下。
    • 常用选项: 略

    su

    • 使用格式:su [参数] 目标用户
    • 功能介绍:用于切换用户身份。管理员切换至任意用户身份而无须密码验证。而普通用户切换身份需要目标用户的密码验证。另外,添加单个减号(-)参数为完全的身份变更,会切换到新用户的完整环境。
    • 用法示例:

    变更至指定用户身份:

    su xiaoming

    完全变更至指定用户身份:

    su - xiaoming

    part 7

    uname

    • 使用格式:uname [参数]
    • 功能介绍:用于查看系统主机名、内核及硬件架构等信息。如果不加任何参数,默认仅显示系统内核名称,相当于-s参数。
    • 常用选项:

    -a  显示系统所有相关信息

    -i  显示硬件平台

    -m  显示计算机硬件架构

    -n  显示主机名称

    -o  显示操作系统名称

    -p  显示主机处理器类型

    -r  显示内核发行版本号

    -s  显示内核名称

    -v  显示内核版本

    id

    • 使用格式:id [参数] 用户名
    • 功能介绍:显示用户与用户组的ID
    • 常用选项:

    -g  显示用户所属基本组的ID

    -G  显示用户所属扩展组的ID

    -n  显示用户所属基本组或扩展组的名称

    -u  显示用户的ID -Z 显示用户的安全上下文

    man手册

    Linux有很多指令和指令参数,我们不可能记住所有的指令和参数。而网上搜索的资料有些不够准确,或缺乏系统性。而man命令作为权威的官方工具则很好地解决了上述两点弊病。man可以查询绝大多数指令的帮助信息,包括man自己。

    • 使用格式:man [参数] 对象
    • 常用选项:

    -K  在所有手册页中搜索字符串

    -l  格式化和显示本地手册文件
    -w  显示文件所在位置
    -a  在所有手册页中搜索关键词

    --help选项

    shell下的几乎绝大多数指令都支持一个--help参数,这通常用于获取关于命令的帮助信息和用法。当在命令后面添加--help参数时,命令会显示关于该命令的简要说明、可用选项等。

    例如:

    ls --help

    虽然man和--help都是显示帮助信息,但一般来说,man手册是一个命令的详细说明,而--help是其选项说明。要注意区分。

    part 8

    Linux下的压缩和归档格式有很多,我们这里只讲两种比较常见的tar和zip,其它的可以自行查询。

    tar

    • 用法格式:tar 参数 压缩包名 [文件或目录名]
    • 功能介绍:tar命令的功能是用于压缩和解压缩文件,能够制作出Linux系统中常见的 .tar、 .tar.gz、 .tar.bz2等格式的压缩包文件。对于RHEL7、CentOS7版本以后的系统,解压缩时可以不添加格式参数(如z或j),系统也能自动进行分析并解压。
    • 常用选项:

    需要注意的是,tar命令的-f参数之后要立即接上文件名。因此,如果要把几个参数合在一起写的话,-f一定要放在最后。

    -c  建立一个压缩文件的参数指令(create 的意思)
    -z  使用gzip压缩格式

    -j  使用bzip2压缩格式

    -f  指定压缩包文件(-f之后立即接文件名,不要再加参数)

    -t 显示压缩包的内容
    -x  解开一个压缩文件的参数指令
    -C  解压到指定目录
    -v  显示执行过程详细信息

    用法示例:

    #使用gzip压缩格式对指定目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.gz

    tar -czvf File.tar.gz /etc

    #使用bzip2压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.bz2

    tar -cjvf File.tar.bz2 /etc

    #将当前工作目录内所有以.cfg为后缀的文件打包,不进行压缩

    tar -cvf File.tar *.cfg

    #将当前工作目录内的所有以.cfg为后缀的文件打包,不进行压缩,并删除原始文件

    tar -cvf File.tar *.cfg --remove-files

    #解压指定压缩包到当前工作目录

    tar -xvf File.tar

    #解压指定压缩包到/etc目录

    tar -xvf File.tar -C /etc

    #查看某个压缩包内文件信息(无需解压)

    tar -tvf File.tar

    zip/unzip

    zip命令用于压缩文件,unzip命令用于解压文件。

    通过zip命令可以将文件打包成.zip格式的压缩包,里面会包含文件的名称、路径、创建时间、上次修改时间等等信息,与tar命令相似。

    用法格式:zip 参数 目标文件.zip 源文件...


    unzip命令用于解压缩zip格式文件,虽然Linux系统中更多地使用tar命令进行对压缩包的管理操作,但有时也会收到Windows系统常用的.zip和.rar格式的压缩包文件,unzip命令便派上了用场。直接使用unzip命令解压缩文件后,压缩包内原有的文件会被提取并输出保存到当前工作目录下。

    用法格式:unzip [参数] 压缩包名

    指令别名

    在Linux中可以通过alias命令给指令取别名。用法格式如下:

    alias [name [=newname] ]

    用法示例:

    当只有alias时,是显示系统中已有的命令别名,等同于'alias -p'操作。

    alias #等价于 alias -p

    当只有name时,是在已有别名中查找name,并显示其信息

    1. alias ll
    2. # 输出结果:alias ll='ls -l --color=auto'

    name和newname都存在时,是将name设为别名

    alias myorder = 'll -a'

    注意事项:

    1. 用户必须使用单引号将原来的命令(被取别名的命令)引起来,防止特殊字符导致错误。
    2. alias命令的作用只局限于该次登入的操作,若要每次登入都能够使用这些命令别名,需要将相应的alias命令存放到家目录的 .bashrc 中。(bash在每次启动时都会加载 .bashrc 文件的内容,每个用户的home目录都有这个文件,它用来存储并加载终端配置和环境变量。)

    重定向和管道

    这里只是简单的了解一下重定向和管道,并不是很详细的讲解。

    重定向

    首先要知道,操作系统在启动时通常会默认打开标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。当我们使用echo、cat等有输出指令时,默认是将内容打印到标准输出流的,也就是我们的终端屏幕。而如果我们想把内容打印到一个我们指定的文件中,就需要将内容重定向到指定文件中,这里用到的就是输出重定向。同理,输入重定向就是,将原来通过标准输入流获取信息的方式,改为从指定文件获取内容。如下是关于输入重定向和输出重定向的详细介绍。

    由上面的内容我们得知,重定向可分为:

    输入重定向:重新指定设备来代替键盘作为新的输入设备。

    输出重定向:重新指定设备来代替显示器作为新的输出设备。

    输出重定向

    相较于输入重定向,我们使用输出重定向的频率更高。并且,和输入重定向不同的是,输出重定向还可以细分为标准输出重定向和错误输出重定向两种,其中我们大多数情况下都是使用的标准输出重定向。标准输出重定向和错误输出重定向又分别都包含普通重定向和追加重定向(普通重定向是将目标文件内容清空再输出,追加重定向是直接在文件末尾追加写入)。现将输出重定向的使用格式整理如下。其中 > 的是普通重定向,>> 的是追加重定向。

    命令符号格式作用
    命令 > 文件将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。
    命令 2> 文件将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。
    命令 >> 文件将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。
    命令 2>> 文件将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。

    命令 >> 文件 2>&1

    或者  
    命令 &>> 文件

    将标准输出或错误输出追加写入写入到指定文件。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。

    用法示例:

    1. echo "hello Linux" > hello.txt
    2. cat man ls > ls_use.txt

    输入重定向

    输入重定向不像输入重定向那样常用,而且使用格式也较少,详见下表:

    命令符号格式作用
    命令 < 文件将指定文件作为命令的输入设备
    命令 << 分界符表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串
    命令 < 文件 1 > 文件 2将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中

    用法示例:

    1. #原理解释:先将cat的输入文件重定向为fun1(这么做虽然鸡肋,但只是起到便于理解的作用)
    2. #然后再将输出结果重定向到fun2文件中。
    3. cat < fun1 > fun2 #fun1的内容是:hello
    4. cat fun2
    5. #输出结果:hello

    管道

    我们这里说的管道是指的管道符"|"。管道是Linux中很重要的一种通信方式,是将一个指令(程序)的输出直接作为另一个指令的输入。管道符主要用于多重命令处理,前面命令的打印结果作为后面命令的输入。简单点说就是,就像工厂的流水线一样,进行完一道工序后,继续传送给下一道工序处理。

    例如显示指定文件经过排序、去重以后包含"better"的行的一系列操作可以写做如下形式

    1. # 查看文本  内容排序 内容去重  信息过滤
    2. cat hello.sh | sort | uniq | grep 'better'  target.txt

    注意事项

    1. 指令和选项之间要有空格
    2. 指令的选项可以叠加来写,例如:ls -al
    3.  指令,本质其实就是可执行程序(C、C++、其他语言)写的
    4. *表示全,例如*.txt表示所有以.txt结尾的文件(正则表达式的语法)
    5. 指令的选项参数可以加"-",也可以不加,暂且认为没有什么区别
    6. 如果想要同时运行多个指令,可以用 && 将这多条指令连接起来
    • 关于“自定义的可执行程序需要指定路径,而系统的指令却不需要”的讨论:

    一个可执行程序要运行->加载到内存,得先找到他。所以我们运行自己的可执行程序时需要有具体的路径地址,例如 ./myfun 操作。而Linux内置的指令可以在终端中直接运行而不需要指定路径,这是因为Linux系统的命令搜索路径(PATH)包含了这些内置指令所在的目录。PATH是一个环境变量,它包含了一组目录路径,系统会在这些路径中查找可执行文件。当你在终端中输入一个命令时,系统会按照PATH中的顺序查找命令的可执行文件,一旦找到了匹配的命令,就会执行它。而自定义的可执行程序肯定不在内置的PATH中,所以找不到匹配的命令,所以需要手动指定路径才能找到并执行它。

    在Linux系统中,常见的内置指令(例如lscdmkdirrm等)通常位于系统的标准命令目录中,例如/bin/usr/bin/sbin/usr/sbin等。这些目录通常都包含在PATH中,因此你可以在任何目录中直接运行这些命令,而不必指定完整的路径。

    说的通俗一点就是:可以认为Linux中的内置指令都是统一管理的,相当于“内部人员”,可以不用指定路径。而自定义的可执行程序不属于Linux统一管理的,Linux系统就找不到,如果不告诉系统要执行的程序在哪,他就找不到,就无法执行,所以必须要指定路径。

  • 相关阅读:
    Ubuntu 18.04误装Nvidia 显卡驱动后,在[OK] started LSB 处卡死
    2003-2022年80万+上市公司政府补助/政府补贴原始及汇总数据
    容联七陌携手岚时科技,解决医美机构回访3大痛点
    MySQL 安装详细步骤
    TSN标准化与虹科组网测试方案:赋能多领域以太网新发展
    测试报告。
    MAC上修改mysql的密码(每一步都图文解释哦)
    redis + celery
    C++类中若没有显示指定访问权限,默认情况下类的成员变量和成员函数是私有的
    命令行工具部署达梦数据库 DMDPC(BP 多副本架构)
  • 原文地址:https://blog.csdn.net/m0_73759312/article/details/133917741