极大提高工作效率的 Linux 命令

作为一名软件开发人员,掌握 Linux 命令是必不可少的技能。即使你使用 Windows 或 macOS,你总会遇到需要使用 Linux 命令的场合。例如,大多数 Docker 镜像都基于 Linux 系统。要进行 DevOps 工作,你需要熟悉Linux,至少要了解一些常用命令。

自定义bash提示符

嗯,这个主题本身可以是一篇冗长的文章。不过,我们不需要学习所有的内容。在大多数情况下,我们只需要修改 PS1 变量,该变量指定在每个命令之前显示的内容。如果不修改它,提示符将显示路径,当我们深入到一个文件夹中时,这是非常不方便的。我更喜欢在提示符中只显示用户名和当前文件夹,可以通过以下命令设置:

linuxmi@linuxmi:~/www.linuxmi.com$ export PS1="[\u@\W]\$"

图片

这里,\u表示当前用户名,\W表示当前工作目录。[、]和@保持原样显示。对于$,如果当前用户不是root,则显示$,否则显示#。更多代码可以在这里找到。

请注意,如果您希望更改持久化,这个命令和下面显示的命令应添加到 ~/.bashrc中。

查找文件或文件夹

查找文件或文件夹是一个非常常见的需求,可以使用find命令来实现:

# 查找文件:find ~ -type f -name data-model.ts
# 查找文件夹:find ~ -type d -name angular15

请注意,第一个参数是要查找的目标文件或文件夹的路径。如果未指定类型,默认为文件。

这似乎有点太简单了 😏。让我们来做一些稍微复杂一点的事情。让我们找一些文件,并统计每个文件的行数:​​​​​​​

#查找所有.html文件并计算每个文件的行数:find src/app/ -name "*.html" -exec wc -l {} \;

请注意这里的魔法语法。-exec 指定了要针对每个找到的文件运行的命令。花括号 {} 是文件的占位符,而转义的分号 ; 用于防止 shell 解释该命令。我们也可以使用加号 + 来实现同样的效果:

find src/app/ -name "*.html" -exec wc -l {} +

输出结果会稍有不同。如果命令以 + 结尾,将会打印总计行数。

更改文件和文件夹的权限

更改文件和文件夹的权限也是一个常见任务。我们很容易在权限代码上感到困惑。这篇文章(https://www.linuxmi.com/linux-file-permissions.html)很好地解释了权限代码和不同的组合。在这里,我们只展示最常见的几个:​​​​​​​

# 与其他人共享文件夹,以便他们可以检查文件夹中的内容:chmod 755 <path-to-your-folder>
# 与其他人共享不可执行文件:chmod 644 <path-to-your-file>
# 与其他人共享可执行文件:chmod 755 <path-to-your-file>
# 使文件只读:chmod 400 <path-to-your-file>
# 使文件可执行:chmod +x <path-to-your-file>

建议查看这篇文章中代码的含义,这太好了,不能在这里重复。

自定义 rm 命令将文件移动到回收站

如果在 Linux 系统上意外删除了一些文件,恢复它们将非常困难。因此,将 rm 命令设置为将文件或文件夹移动到回收站而不是永久删除是一种安全策略。我们可以在需要时清空回收站。

这个自定义功能可以通过别名(alias)来实现,在 Linux 上非常方便(稍后会介绍更多相关内容):

alias rm='gio trash'

使用别名可以简化输入

如果你有一个带有许多参数的长命令,或者你有一系列需要一起执行的命令,使用别名非常方便:​​​​​​​

# 为长命令设置别名:alias dc="docker compose"alias prettier="npx prettier -w"alias eslint="npx eslint --fix"alias pre="pre-commit run --files"
# 将一些命令链接在一起:alias update-container="docker-compose pull <service-name> && docker-compose stop <service-name> && yes | docker-compose rm <service-name> && docker-compose up -d <service-name>"

使用awk从输入中提取数据

awk是Linux中非常强大的工具。你甚至可以使用awk编写脚本,尽管可读性和维护性是另外一个问题。作为软件开发人员,我们通常使用awk从输入文件或前一个命令的输出中获取所需的字段。

例如,让我们ping google.com并获取每个ping的时间:

ping google.com -c 2 | grep -iE 'time=.*ms' | awk 'BEGIN {FS="="} {print $NF}'

这个命令的重要注意事项:

  • 我们使用-iE来为grep指定一个正则表达式,因此只有与模式匹配的消息将进一步处理。

  • 对于awk来说,BEGIN指定在处理文本之前要执行的命令。在这里,我们指定字段分隔符(FS)应为等号。此外,NF表示字段的数量,$NF将返回最后一个字段。如果你想进一步学习awk,这是一个很好的参考。

以上命令也可以简化如下:​​​​​​​

ping google.com -c 2 | grep -iE 'time=.*ms' | awk -F"=" '{print $NF}'ping google.com -c 2 | awk -F"=" '/time=.*ms/ {print $NF}'

在这些简化版本中,我们还可以利用 awk 的另外两个功能:

  • 可以直接使用 -F 选项指定字段分隔符。

  • 可以在 awk 中使用正则表达式模式,在花括号之前指定。

使用 xargs 链接命令

我们已经展示了使用 -exec 选项可以为 find 命令链接命令。一个更好的工具是 xargs,它可以以更灵活的方式链接任何命令。​​​​​​​

# 检查当前文件夹中每个文件的大小:ls | xargs -I % du -sh %
# 查找一些文件并将其复制到新位置:find ~/Downloads/ -name "*.jpeg" | xargs -I {} cp {} ~/Pictures/
# 将所有文件夹和子文件夹的权限更改为755:find . -type d | xargs -I {} chmod 755 {}
# 将当前文件夹和子文件夹中所有文件的权限更改为644:find . -type f | xargs -I {} chmod 644 {}

图片

请注意,-I 选项指定了一个占位符,可以在需要的任何地方使用。占位符可以是任何有效的字符串,其中 % 和 {} 是最常见的。

为脚本传递变量

有时我们需要为脚本传递一些变量。这些变量可以在运行脚本的命令之前通过命令行指定。例如:​​​​​​​

# linuxmi.shecho mysql -u ${USERNAME} -p${PASSWORD}
# 在命令行上:USERNAME=johndoe PASSWORD=12345 bash some_script.sh

对于在云环境(如Cloud Build)中运行的某些脚本,这一点尤为重要,因为变量可以自动注入。

如果脚本需要许多变量,逐个在命令行中指定会变得很麻烦。在这种情况下,可以将这些变量存储在文件中,并在运行脚本时进行引用:​​​​​​​

# variables.envUSERNAME=johndoePASSWORD=12345
# 在命令行上:env $(grep -v '^#' variables.env | xargs) bash some_script.sh

请注意,使用此命令时,变量会从目标文件中读取(注释除外),并通过xargs命令执行。env命令用于在修改的环境中运行脚本,而不是当前的Shell环境。

重定向STDOUT和STDERR

命令的输出和错误被写入标准输出(STDOUT)和标准错误(STDERR)。STDOUT和STDERR的文件描述符分别为1和2。默认情况下,STDOUT和STDERR都会输出到控制台。然而,我们可以将它们重定向到文件或空设备(/dev/null),即丢弃它们。​​​​​​​

# 让我们假设existing.txt存在,而nonexisting.txt不存在。
# 将STDOUT重定向到文件。这是最常见的用例。ls -al existing.txt 1>out.log# STDOUT的文件描述符是可选的。ls -al existing.txt >out.log
# 将STDOUT重定向到一个文件,将STDOUT重定向到另一个文件。ls -al existing.txt non-existing.txt 1>out.log 2>error.log
# 将STDOUT和STDERR都指向同一个文件:ls -al existing.txt non-existing.txt 1>combined.log 2>&1# 它可以简化为:ls -al existing.txt non-existing.txt &>combined.log
# 忽略命令的输出和错误:ls -al existing.txt non-existing.txt 1>/dev/null 2>&1ls -al existing.txt non-existing.txt &>/dev/null

请注意,不是所有的Shell都支持&>语法。它支持常用的BASH。

命令行模糊查找器

我们可以按下CTRL-R来查找我们使用过的历史命令。然而,默认情况下,当我们输入时,它只显示一个命令,不方便找到我们想要的命令。

幸运的是,fzf极大地增强了CTRL-R的功能。fzf是一个通用的命令行模糊查找器,可以模糊搜索历史命令。最重要的是,它将匹配的命令显示为列表,使得找到我们想要的命令非常方便。

图片

安装fzf非常简单:​​​​​​​

# Linux:git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf~/.fzf/install  # 您可以接受所有默认设置.
# MacOS:brew install fzf$(brew --prefix)/opt/fzf/install

图片

 

图片

如果你之前从未尝试过fzf,那么绝对值得一试,你会立刻喜欢上它 😍。

原文链接:https://www.linuxmi.com/linux-commands-for-improving-work-efficiency.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-quill-editor和vue-ueditor-wrap富文本编辑器应用

目录 一、vue-quill-editor 1.1、界面展示 1.2、代码介绍 1.2.1、安装 1.2.2、配置 1.2.3、代码应用 1.2.4、提取内容 二、vue-ueditor-wrap 2.1、界面展示 2.2、代码介绍 2.2.1、安装 2.2.2、配置 2.2.3、代码应用 一、vue-quill-editor 1.1、界面展示 文本输出…

Vue响应式原理全解析

前言 大家好&#xff0c;我是程序员蒿里行。浅浅记录一下面试中的高频问题&#xff0c;请你谈一下Vue响应式原理。 必备前置知识&#xff0c;​​Vue2​​官方文档中​​深入响应式原理​​​及​​Vue3​​官方文档中​​深入响应式系统​​。 什么是响应式 响应式本质是当…

liunx CentOS7 搭建lnmp环境 php nginx mysql

安装一些刚需软件&#xff1a;不懂请自行查询 安装一些需要的软件命令 yum install wget vim net-tools bash* lrzsz tree nmapnc lsof telnet -y 刷新命令 source /usr/share/bash-completion/bash_completion echo source /usr/share/bash-completion/bash_completion &…

UE5 C++ 3D血条 响应人物受伤 案例

一.3Dwidget 1.创建C Userwidget的 MyHealthWidget&#xff0c;声明当前血量和最大血量 UCLASS() class PRACTICEC_API UMyHealthWidget : public UUserWidget {GENERATED_BODY() public:UPROPERTY(EditAnywhere,BlueprintReadWrite,Category "MyWidget")float C…

利用API打造卓越的用户体验

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 1. 数据驱动的设计 2. 功能扩展与整合 3. 实时性与响应性 4. 个性化推荐与定制化服务 结语 我的其他博客 正文 随着数字化时代的…

npm i安装依赖报错,但是cnpm i 却安装成功

问题描述&#xff1a;在a项目中npm i 安装依赖时发生以上报错&#xff0c;但是cnpm i 却成功&#xff0c;而且在其他项目中npm i 安装其他项目依赖也能成功.... 解决办法&#xff1a;删除项目中package-lock.json文件后再npm i 即可

搭建Linux内核开发环境——保姆教程(持续更新中)

搭建Linux内核开发环境——保姆教程&#xff08;持续更新中&#xff09; git版本管理汇编器链接器调试器编辑器构建系统模拟器文档工具图形设计工具 在此文中&#xff0c;持续完善&#xff0c;搭建内核开发环境的细节&#xff0c;有需要的小伙伴儿可以持续关注下 git版本管理 …

Ruby选择结构实战

文章目录 一、Ruby选择结构实战概述二、Ruby选择结构实战案例&#xff08;一&#xff09;闰年判断1、编写程序&#xff0c;实现功能2、程序的解释说明3、运行程序&#xff0c;查看结果 &#xff08;二&#xff09;求解一元二次方程1、编写程序&#xff0c;实现功能2、程序的解释…

Linux--Flappy_bird实现

目录 void handler(int sig): mian: void init_curses() int set_timer(int ms_t); 小鸟的操作&#xff1a; void show_pipe()&#xff1a; void create_list() void clear_pipe() void move_pipe(); test_bird.c完整代码&#xff1a; 代码实现&#xff1a; #includ…

STM32 CubeMX使用介绍(含FreeRTOS生成)

文章目录 前言1. 简介1.1 什么是STM32CubeMX1.2 为什么会有STM32CubeMX的出现1.3 STM32CubeMX常用功能有哪些&#xff1f;1.4 官方资料下载地址 2. 下载和安装STM32CubeMX2.1 下载软件2.2 软件安装 3. 使用方式3.1 说明3.2 不同选择器介绍3.3 构建新的项目3.1 选择单片机的型号…

题目:出列(蓝桥OJ 3223)

问题描述&#xff1a; 解题思路&#xff1a; 先使用暴力找到规律再解。 暴力做法&#xff1a;将数据放到一个动态数组中&#xff0c;下标就表示当前编号&#xff0c;符合题意的就放到覆盖该数组中&#xff0c;依次循环&#xff0c;直到只有一个元素停。 规律&#xff1a;小于该…

爬虫(七)

1.批量爬取知网数据 lxml:是 Python 的一个功能强大且易用的 XML 和 HTML 处理库。它提供了简单又轻巧的 API,使得解析、构建和操作 XML 和 HTML 文档变得非常方便。lxml 库通常用于处理 XML 和 HTML 文档,例如解析网页、处理配置文件等。openpyxl:是 Python 中用于操作 Ex…

uniapp自定义导航栏左中右内容和图标,以及点击事件

uniapp自定义导航栏左中右内容和图标&#xff0c;以及点击事件 效果&#xff1a; 页面&#xff1a; <view class"navigation-bar"><view class"navigation-bar-left" click"navigateBack"><u-icon name"arrow-left"…

【嵌入式开发 Linux 常用命令系列 4.3 -- git add 时单独排除某个目录或者文件】

文章目录 git add 时单独排除某个目录或者文件使用 .gitignore 文件使用命令行排除文件或目录 git add 时单独排除某个目录或者文件 在使用 git add 命令时&#xff0c;如果你想要排除特定的目录或文件&#xff0c;可以使用 .gitignore 文件或使用路径规范来指定不想添加的文件…

新的变速箱滚动轴承和齿轮故障数据

变速箱是传动系统中非常关键的一部分&#xff0c;它由齿轮、传动轴、轴承和壳体等组成。变速箱的主要功用包括&#xff1a;&#xff08;1&#xff09;能够改变传动比&#xff0c;按实际情况调整驱动轮转矩和转速&#xff0c;进而满足复杂的行车要求&#xff1b;&#xff08;2&a…

机器学习金融应用技术指南

1 范围 本文件提供了金融业开展机器学习应用涉及的体系框架、计算资源、数据资源、机器学习引擎、机 器学习服务、安全管理、内控管理等方面的建议。 本文件适用于开展机器学习金融应用的金融机构、技术服务商、第三方安全评估机构等。 2 规范性引用文件 下列文件中的内容通过…

新型储能是什么,储能系统解决方案现状及趋势详细说明

新型储能是指新兴的能够存储电能并在需要时释放的储能技术。其中主要包括光伏储能和商业储能。 光伏储能是指通过光伏电池将太阳能转化为电能&#xff0c;并将其存储起来以供后续使用。光伏储能系统一般由太阳能电池板、储能装置和逆变器组成。光伏储能可以将白天产生的电能存…

Java练习题目3:输入一个学生的5门课成绩及对应的学分,计算该同学的加权平均分(WeightedAverageScore3)

每日小语 我们没有意识到惯用语言的结构有多大的力量。可以说&#xff0c;它通过语义反应机制奴役我们。 ——阿尔弗雷德科日布斯基 思考 输入5门课成绩&#xff0c;学分&#xff0c;加权平均分公式 [&#xff08;课程A成绩*课程A学分&#xff09;&#xff08;课程成绩B*课程…

Learn OpenGL 19 几何着色器

几何着色器 在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader)&#xff0c;几何着色器的输入是一个图元&#xff08;如点或三角形&#xff09;的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而&#xff0c;几何着色器最有趣的地方…

动态路由协议——OSPF

目录 一.OSPF来源 二.OSPF术语 1.area id——区域的划分 2.cost——路径开销值 3.route id 4.LSDB表 5.邻居表 6.OSPF路由表 三.OSPF工作过程 1.交互hello报文建立邻居关系 2.选举主从 3.交互LSDB摘要信息 4.LSR,LSU,LSACK同步LSDB表项 5.各自计算路由 四.OSPF交…