Linux 操作命令

路是脚踏出来的,历史是人写出来的。人的每一步行动都在书写自己的历史。

Linux 基础命令

  • open:打开文件操作,如环境配置文件。

    shell 复制代码
    open ~/.zshrc
  • vi:vi (visual interface), linux 中最经典的文本编辑器 vim(vi improved)是 vi 发展出来的一个文本编辑器,支持代码补全、编译、错误跳转等方便编程的功能非常丰富。

    shell 复制代码
    vim /etc/hosts
  • echo:输出、查看相关常量值,打印一个值。

    shell 复制代码
    # 查看当前系统正在使用的 shell
    echo $SHELL
    # 查看当前进程正在使用的 shell
    echo $0
  • cat / more / less:获取输出文件里的相关内容。cat 是一次性显示整个文件的内容,more 和 less一般用于显示文件内容超过一屏的内容,并且提供翻页(空格)、单行加载(回车键)的功能。more 比 cat 强大,提供分页显示的功能,less 比 more 更强大,提供翻页,跳转,查找等命令。而且 more 和 less 都支持:用空格显示下一页,按键 B 显示上一页。

    shell 复制代码
    # 查看系统 hosts 文件内容
    more /etc/hosts 
    # 查看当前系统支持的 shell 程序
    cat /etc/shells
  • touch:创建文件。

    shell 复制代码
    touch Profile
  • mkdir:创建文件夹。参数 -p 确保目录名称存在,如果目录不存在的就新创建一个。

    shell 复制代码
    # 若不加 -p,且原本 File 目录不存在,则产生错误。
    mkdir -p File/Test
  • rm -f *:清空文件夹内部文件。

  • sudo:Linux sudo 命令以系统管理者的身份执行指令。

    shell 复制代码
    # vim 编辑器编辑 hosts 文件
    sudo vi /etc/hosts
  • env:查看当前所有环境变量。

  • chsh -s /bin/bash:修改当前系统使用的Shell程序。

  • where:查找安装包所在位置。

    shell 复制代码
    where brew
  • cp:指令是用于复制文件或目录的指令,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。

Linux 重定向

重定向理解:

shell 重定向包含输出重定向和输入重定向。何为输入输出方向?何为标准输入输出方向?

标准输入方向:从键盘读取用户输入的数据,然后再把数据拿到程序(C语言程序、Shell 脚本程序等)中使用;这就是标准的输入方向,也就是从键盘到程序。

标准输出方向:相反,程序运行产生的数据一般都是直接呈现到显示器上,这就是标准的输出方向,也就是从程序到显示器。

其实,输入输出方向就是数据流动的方向,那么输入重定向就是改变程序数据的来源的。输出重定向就是改变程序输出屏幕到其他地方。

硬件设备和文件描述符:

计算机硬件有很多,常见的输入设备有键盘、鼠标、麦克风、手写板等,输出设备有显示器、投影仪、打印机等。不过,在 Linux 中,标准输入设备指的是键盘,标准输出设备指的是显示器。

同时,Linux 中一切皆文件,包括标准输入设备(键盘)和标准输出设备(显示器)在内的所有计算机硬件都是文件,为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。

文件描述符 文件名 类型 硬件
0 stdin 标准输入 键盘
1 stdout 标准输出 显示器
2 stderr 标准错误输出 显示器

Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接。

Shell 输出重定向:

类 型 符 号 作 用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出结果输出到指定的文件或设备中。
命令 >> 文件 以追加的方式,把命令的正确输出结果输出到指定的文件或设备中。
标准错误输出重定向 命令 2> 文件 以覆盖的方式,把命令的错误信息输出到指定的文件或设备中。
命令 2>> 文件 以追加的方式,把命令的错误信息输出到指定的文件或设备中。
正确输出和错误信息同时保存 命令 > 文件 2> &1 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 >> 文件 2> &1 以追加的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 &> 文件 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 &>> 文件 以追加的方式,把正确输出和错误信息同时保存到同一个文件中。
命令 >> 文件1 2>> 文件2 把正确的输出追加到文件1中,把错误信息追加到文件2中。

在输出重定向中,>代表的是覆盖,>> 代表的是追加。注意,在类似 命令 2> 文件这样的写法中,2 是文件描述符,它对应的是 stderr。

对于重定向中的标准输出文件,可以省略文件描述符 1 不写,而标准错误输出文件,必须要写上文件描述如 2。如果你愿意,也可以将 命令 > 文件 写作 命令 1> 文件,但这样做是多此一举。

另外还要注意,2 > 之间不能有空格,也就是说,不能将 命令 2> 文件 写作 命令 2 > 文件

Shell 输入重定向:

输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

符号 说明
命令 < 文件 将指定的文件作为命令的输入。
命令 << 分界符 从标准输入(键盘)中读取数据,直到遇见分界符才停止。
命令 < 文件1 > 文件2 将文件1作为命令的输入,并将命令的处理结果输出到文件2。

示例:

shell 复制代码
# 统计文件中有多少行文本:readme.txt
$ cat readme.txt  # 预览一下文件内容
$ wc -l < readme.txt  # 输入重定向

我们使用输入重定向符号 <<,这个符号的作用是使用特定的分界符作为命令输入的结束标志,而不使用 Ctrl+D 键。

shell 复制代码
$ wc -l << END
> 123
> 456
> 789
> qwe
> END
4
# wc 命令会一直等待用输入,直到遇见分界符 END 才结束读取

diff 命令解析

diff 是文件及目录对比命令,具体解析应用如下,其 shell 中 $? 是一个特殊的 shell 变量,用于存储上一个命令的执行状态。当一个 shell 命令执行完毕后,它会返回一个状态值,表示该命令执行的结果。

shell 复制代码
# diff 对比文件内容是否一致 > /dev/null 代表把 diff 的输出重定向到 null,不会在终端显示。
diff "${PODS_PODFILE_DIR_PATH}/Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null

# $? 代表上一句命令,也就是 diff 命令的返回值。如果是0,说明文件内容相同。不是 0 说明文件内容不一致。
if [ $? != 0 ] ; then
    # print error to STDERR
    echo "error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation." >&2
    exit 1
fi
# This output is used by Xcode 'outputs' to avoid re-running this script phase.
echo "SUCCESS" > "${SCRIPT_OUTPUT_FILE_0}"

Shell 中条件判断

shell 复制代码
if [条件语句1]; then
	# 条件成立执行语句
elif [条件语句2]; then
	# 条件成立执行语句
else
  # 以上条件都不满足时候执行
fi # 结束条件语句
相关推荐
玫瑰花开一片一片10 小时前
Flutter IOS 真机 Widget 错误。Widget 安装后系统中没有
flutter·ios·widget·ios widget
烎就是我12 小时前
100行代码swift从零实现一个iOS日历
ios·swift
鸿蒙布道师1 天前
鸿蒙NEXT开发通知工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师1 天前
鸿蒙NEXT开发网络相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
望获linux1 天前
实时操作系统在服务型机器人中的关键作用
linux·机器人·操作系统·开源软件·rtos·具身智能
余生大大1 天前
关于Safari浏览器在ios<16.3版本不支持正则表达式零宽断言的解决办法
ios·正则表达式·safari
爱分享的程序员1 天前
前端跨端框架的开发以及IOS和安卓的开发流程和打包上架的详细流程
android·前端·ios
Macle_Chen1 天前
ios开发中xxx.debug.dylib not found
ios·bug·debug.dylib
WDeLiang2 天前
Flutter 环境搭建
flutter·ios·visual studio code