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

news2024/9/27 12:08:17

作为一名软件开发人员,掌握 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.coloradmin.cn/o/1538898.html

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

相关文章

Redis中的缓存穿透

缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;导致这些请求直接到了数据库上&#xff0c;对数据库造成了巨大的压力&#xff0c;可能造成数据库宕机。 常见的解决方案&#xff1a; 1&#xff09;缓存无效 key 如果缓存和数据库中都查不到某…

【漏洞复现】WordPress Plugin NotificationX 存在sql注入CVE-2024-1698

漏洞描述 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 WordPress Plugin NotificationX 存在安全漏洞,该漏洞源于对用户提供的…

校招免费资料大集合

通过以下资料&#xff0c;你可以免费获取到大量的校招资料和相关信息&#xff0c;帮助你更好地准备校园招聘。 学习交流群&#xff1a;进行计算机知识分享和交流&#xff0c;提供内推机会&#xff0c;QQ群号&#xff1a;325280438 夏沫Coding&#xff1a;致力于分享计算机干货…

STM32利用串口标准库发送字节,发送数组,发送字符串,发送数字,实现printf功能。

早晨到现在刚刚完成的功能&#xff1a;发送字节&#xff0c;发送数组&#xff0c;发送字符串&#xff0c;发送数字&#xff0c;实现printf功能。 当然这是建立在昨天学习使用串口发送数据的基础上&#xff0c;新建立的功能函数&#xff0c;咱们先来看看这次实验的结果吧&#…

AIGC:让生成式AI成为自己的外脑

前言 在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到了我们生活的方方面面。其中&#xff0c;生成式AI以其独特的魅力&#xff0c;正逐渐改变我们与世界的交互方式。AIGC&#xff08;人工智能生成内容&#xff09;作为生成式AI的重要应用…

LeetCode 热题 100 | 堆(二)

目录 1 什么是优先队列 1.1 优先队列与堆的关系 1.2 如何定义优先队列 1.3 如何使用优先队列 1.4 如何设置排序规则 2 347. 前 K 个高频元素 2.1 第 2 步的具体实现 2.2 举例说明 2.3 完整代码 3 215. 数组中的第 K 个最大元素 - v2 菜鸟做题&#xff0c;语…

cesium Clock JulianDate 日照分析

cesium在初始化的时候会自动把Clock对象挂载到容器上Clock内部以JulianDate维护时间&#xff0c;比北京时间慢8个小时&#xff0c;想显示北京时间需要计算时差JulianDate的日期部分和秒数部分是分开的 julianDayNumber&#xff1a;指整数天&#xff0c;记录从公元前4713年正午以…

基于SpringBoot实现WebSocket实时通讯的服务端和客户端

实现功能 服务端注册的客户端的列表&#xff1b;服务端向客户端发送广播消息&#xff1b;服务端向指定客户端发送消息&#xff1b;服务端向多个客户端发送消息&#xff1b;客户端给服务端发送消息&#xff1b; 效果&#xff1a; 环境 jdk&#xff1a;1.8 SpringBoot&#x…

社区热议!54.8k Star开源项目,GPT-4Free : 让GPT4免费不是梦

Hello&#xff0c;我是Aitrainee&#xff0c;GPT4Free就是最近传得沸沸扬扬的那个GPT4项目。大家都知道&#xff0c;虽然ChatGPT是免费的&#xff0c;但如果你想用到那些功能更强大的大模型&#xff0c;比如GPT-4、gemini-pro、claude&#xff0c;那就只能选择付费了。 但现在&…

在Linux搭建Emlog博客结合内网穿透实现公网访问本地个人网站

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

【2024最新版,redis7】redis底层的10种数据结构

前言&#xff1a;本文redis版本&#xff1a;7.2.4 本文语雀原文地址&#xff08;首发更新&#xff09;&#xff1a;https://www.yuque.com/wzzz/redis/xg2cp37kx1s4726y 本文CSDN转载地址&#xff1a; https://blog.csdn.net/u013625306/article/details/136842107 1. 常见的数…

烯冷新能源邀您参观2024长三角快递物流展

参加企业介绍 宁波戈雷贝拓科技有限公司&#xff08;宁波烯冷新能源科技有限公司&#xff09;宁波烯冷新能源科技有限公司于2022年初成立&#xff0c;依托中国科学院宁波材料技术与工程研究所和国家石墨烯创新中心&#xff0c;公司开发产品包括&#xff1a;新能源制冷系统和集…

Mysql学习--深入探究索引和事务的重点要点与考点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

一键入门Ubuntu22!

目录 一、安装 二、常用目录 三、常用指令 四、用户指令 五、ssh与scp 六、服务相关 七、Python与Pycharm 八、Vim编辑器 九、Ubuntu22下使用Mysql 十、Ubuntu22下使用mongodb 十一、Ubuntu22下使用redis Ubuntu是一个基于Debian的开源操作系统&#xff0c;由Canoni…

LeetCode每日一题——x 的平方根

x 的平方根OJ链接&#xff1a;69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 乍一看题目只需要算一个数的平方根&#xff0c;根据我们之前学的C语言我们能很快的想到使用sqrt&#xff0c;pow这类的<math.h>库函数&#xf…

【计算机网络篇】数据链路层(2)封装成帧和透明传输

文章目录 &#x1f95a;封装成帧和透明传输&#x1f388;封装成帧&#x1f388;透明传输&#x1f5d2;️面向字节的物理链路使用字节填充的方法实现透明传输。&#x1f5d2;️面向比特的物理链路使用比特填充的方法实现透明传输。 &#x1f6f8;练习 &#x1f95a;封装成帧和透…

【目标检测基础篇】目标检测评价指标:mAP计算的超详细举例分析以及coco数据集标准详解(AP/AP50/APsmall.....))

学习视频&#xff1a; 霹雳吧啦Wz-目标检测mAP计算以及coco评价标准 【目标检测】指标介绍&#xff1a;mAP 1 TP/FP/FN TP(True Positive) : IoU>0.5的检测框数量(同一Ground truth只计算一次)FP(False Positive) : IoU<0.5的检测框(或者是检测到同一个GT的多余检测框的…

(css)vue 自定义背景 can‘t resolve

(css)vue 自定义背景 can’t resolve 旧写法&#xff1a; background-image: url(/assets/images/step-bg.jpg);background-size: 100% 100%; 新写法&#xff1a; background-image: url(~/assets/images/step-bg.jpg);background-size: 100% 100%; 解决参考&#xff1a;https…

印刷企业实施MES管理系统如何做好需求分析

在数字化、信息化的大潮中&#xff0c;印刷企业面临着转型升级的迫切需求。MES管理系统作为连接企业资源计划ERP和现场自动化系统的桥梁&#xff0c;对于提升印刷企业的生产效率、优化资源配置、提高产品质量具有重要意义。因此&#xff0c;做好MES管理系统的需求分析&#xff…

分布式搜索引擎elasticsearch专栏二

上一篇的传送门&#xff1a; 分布式搜索引擎elasticsearch专栏一-CSDN博客 这一篇博文主要讲解elasticsearch的数据搜索功能。下面会分别使用DSL和RestClient实现搜索。 1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsea…