程序员日常使用Shell命令:提高工作效率的实用技巧

作为程序员,我们每天都在与代码和工具打交道。其中,Shell是一个非常重要的工具,它可以帮助我们高效地完成各种任务。本文将列举一些程序员日常使用Shell提高效率的操作,帮助大家更好地利用Shell提高工作效率。

首先,让我们了解一下Shell的执行环境。对于Windows用户,可以使用WSL(Windows Subsystem for Linux),它为Windows平台提供了一个轻量级的Linux环境,使得我们可以直接在Windows上运行Linux命令。对于手机用户可以使用AidLux,它是基于ARM架构的跨生态(Android/鸿蒙+Linux)一站式AIoT应用开发和部署平台,非虚拟机模式提供原生Linux系统体验。而对于Linux和MAC用户,可以直接使用系统终端。

时间戳转换

在编程中,时间戳是一种常用的时间表示方式,它以秒或毫秒为单位表示从某个特定时间点(通常是1970年1月1日午夜)开始经过的时间。但是,这种形式的时间戳并不直观,因此我们可以使用date命令进行转换。例如,要将一个时间戳转换为日期和时间,可以使用以下命令:

date -d @1701267439

要获取当前的时间戳,可以使用以下命令:

date '+%s'

如果需要精确到毫秒的时间戳,可以通过以下表达式获取:

echo $(($(date '+%s') * 1000 + $(date '+%N') / 1000000))

更多用法可以通过运行 date --help 了解,--help 选项也适用于其它命令。

常用操作命令化

将常用的操作编写为脚本,可以极大地提高效率,减少重复劳动。比如在测试下单交易时,需要反复清除或重置Redis和MySQL中的数据,以避免被重复检查规则拦截。如果将清除数据的指令放入脚本文件中,我们可以通过执行该脚本文件实现一键清除。以下为一个脚本示例:

redis-cli -h 127.0.0.1 << EOF
del redis_key1
incrby redis_key2 -1
EOFmysql -h127.0.0.1 -uuser -ppassword -Ddatabase << EOF
update order set order_status='F'
where createtime>'2023-11-30 00:00:00'
and user_id=12345678;
EOF

上述示例使用 <<EOF 来表示一个命令输入的开始,EOF 表示命令输入的结束,两个标记之间的内容,是客户端工具连接到服务器后执行的语句。

使用别名简化命令输入

通过使用别名,操作将更加高效,命令输入也更加简洁。比如,我们经常需要连接到Redis以查看数据,可以为连接不同的Redis服务器设置不同的别名:

alias redis='redis-cli -h 127.0.0.1 --raw'
alias redisuat='redis-cli -h 192.168.10.100 -p 6179 -c -a password'

计算器

虽然桌面系统通常都有计算器应用程序,但Shell中的计算器功能更加灵活和易用。它不仅可以帮助您进行基本的数学计算,还可以轻松地处理更复杂的计算,并且可以轻松查看计算历史记录。例如,要计算两个数的乘积,可以使用以下命令(注意:星号(*)需要转义,否则会当成通配符处理;运算符两边要有空格):

expr 123 \* 456

要计算字符串的长度,可以使用以下命令:

expr length 'this is a string'

对于更复杂的计算,可以使用bc(Basic Calculator)命令。例如,要以两位小数的精度计算浮点数,可以按照以下步骤进行:

首先,执行bc命令进入bc计算器:

bc

然后,设置精度为2位小数:

scale=2

接着输入要计算的表达式:

1024/3

最后,按回车键得到计算结果:

341.33

要退出bc计算器,请输入 quit。此外,bc还可以进行进制转换。例如,要将一个十六进制数转换为二进制数:

ibase=16
obase=2
ff
0
FF
11111111

通过以上示例可以发现,在当前版本bc中输入16进制数时只认可大写。

下载文件

使用wget命令可以将http资源直接下载到目标机器,避免了从本地中转的麻烦。以下为一个下载示例,通过 -O 选项可以指定下载文件保存的文件名:

wget 'https://xxx.com/yyy.tar.gz' -O zzz.tar.gz

如果有一定规律的多个URL需要下载到目标机器,可以使用循环生成URL来实现这一目标。以下是一个使用循环和wget命令下载多个文件的示例(本例仅输出wget命令的内容以直观展示结果,实际使用时去掉前面的echo即可执行该wget命令):

for i in {1..15}; do\echo wget https://xxhost:80/xxx-$(printf "%02d" $i).gz;\
done

以上示例使用$()执行子shell,printf表示格式化输出。

查找文件

如果想要查找某个特定的文件,可以使用find命令。例如,要查找当前目录及其子目录中名为file.txt的文件,可以使用以下命令:

find . -name file.txt

如果想在文件中查找特定的关键字,可以使用grep命令。例如,要查找文件file.txt中包含关键字"hello"的行,可以使用以下命令(当被查找关键字中没有空格或特殊字符时,引号可以省略):

grep hello file.txt

也可以使用 -E 选项启用扩展正则表达式的匹配模式。例如查找包含"hello"或者包含"world"的行,或者查找包含3~5位数字的行:

grep -E "hello|world" file.txt
grep -E "[0-9]{3,5}" file.txt

如果想要在某些特定的文件中查找特定的关键字,可以通过管道(|)将上述两个命令相结合。例如,要查找当前目录及其子目录中名为file开头的.txt文件,然后在这些文件中查找包含关键字"hello"或者包含"world"的行 ,可以使用以下命令:

find . -name file\*.txt | xargs grep -E "hello|world"

上面例子中xargs的作用是将find的结果文件列表转换成小块分段传递给后面的grep命令,如果只在当前目录下查询,上述命令等价于这个命令:

grep hello file*.txt

如果想查找特定类型的文件(例如所有文本文件或所有PNG图像文件),可以使用file命令。例如,要查找当前目录及其子目录中所有文本文件,可以使用以下命令:

find . -type f -exec file {} \; | grep -i text

在上面的例子中,-exec选项用于执行指定的命令,file {} \; 是执行的命令,其中file是用于确定文件类型的命令,{}表示当前找到的文件名,\;表示命令的结束。这个示例将查找当前目录及其子目录中的所有文件,并使用file命令确定每个文件的类型。然后,通过管道将结果传递给grep -i text命令,用于过滤出类型为文本的文件。

计算摘要

文件的传递一般通过摘要值确保完整性,如md5。使用Shell命令可以方便地计算出文件摘要。例如,以下是一个使用md5sum命令计算文件摘要的示例:

md5sum file.txt

这个命令将输出文件file.txt的MD5摘要值。如果需要计算多个文件的摘要,可以使用通配符(*),如下所示:

md5sum *.txt

这个命令将计算所有扩展名为 .txt 的文件的MD5摘要值。类似地,也可以使用 shasum 命令或 sha256sum 命令或 sha512sum 命令来计算文件的摘要。

除了以上提到的命令之外,Shell还提供了许多其他有用的命令和功能,例如处理文本文件、管理进程、查看系统信息等。学习和掌握这些命令可以帮助大家更高效地进行编程和系统管理。

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

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

相关文章

[递归] 平衡矩阵

平衡矩阵 题目描述 现在有一个n阶正整数方阵&#xff08;n<7&#xff09;&#xff0c;现在可以对矩阵的任意一行进行左移&#xff0c;具体操作为&#xff1a;每次对于某一行a_i1,a_i2,…,a_in进行一次左移&#xff0c;最左边的元素移动到这一行的末尾&#xff0c;其他元素…

LinuxBasicsForHackers笔记 --文本处理

查看文件 head <file name> – 如果只想查看文件的开头部分&#xff0c;可以使用 head 命令。默认情况下&#xff0c;此命令显示文件的前10行。如果您想查看多于或少于默认的 10 行的内容&#xff0c;请在 head 命令之后、文件名之前使用破折号 (-) 开关输入所需的数量。…

springboot centos集成 OpenOffice 实现 在线预览 doc excel docx 成pdf的 并且包含中文包和英文包和安装

我的资源里面有 springboot linux 集成 OpenOffice 实现在线预览 docx doc excel img等功能&#xff0c; 报问题 &#xff1a;no suitable windowing system found, exiting. 解决方案 yum groupinstall "X Window System"如果还是报这个错 执行 yum groupinstall …

Google Guava 数学工具使用详解

文章目录 数学数值运算取整范围值比较其他 数学 在 Guava 中&#xff0c;数学&#xff08;Math&#xff09;模块提供了一些常用的数学运算功能&#xff0c;包括数值运算、取整、范围值比较等。下面详细介绍一些 Guava 数学运算的使用方法和示例。 数值运算 IntMath 类提供了处…

App测试之App日志收集及adb常用命令

文章目录 前言一、adb是什么1.APP测试收集手机日志常用的工具2.adb下载与安装3.ADT/SDK/ADB是什么4.adb连接真机 二、adb常用命令三、android系统日志文件1.logcat日志文件2.logcat日志文件分析 四、分析crash & ANR 日志1.发生crash如何分析2.发生ANR如何分析 总结扩展&am…

前端组件库开发

通常我们会使用很多组件库&#xff0c;有时候我们会去看源码比如element&#xff0c;antd&#xff0c;然后发现多少是按需导出&#xff0c;和vue.use全局注册&#xff0c;依赖于框架的拓展。 组件库的开发依赖框架的版本和node的版本&#xff0c;这个是需要说明的&#xff0c;然…

【阅读论文】时间序列异常检测:综合评价

文章目录 摘要1 异常检测范围2 时间序列和异常3 异常检测技术3.1预测方法3.2重建方法3.3编码方法3.4距离方法3.5分布方法3.6隔离树方法 4 实验评估4.1环境和设置4.2结果质量4.3运行时和内存 5 讨论致谢参考文献 摘要 在金融应用中&#xff0c;检测时间序列数据中的异常子序列是…

解决浏览器缓存问题

1.index.html文件meta标签添加属性 <meta name"viewport" content"widthdevice-width,initial-scale1.0, maximum-scale1.0, minimum-scale1.0, user-scalableno" viewport-fitcover >2.提前main.html处理逻辑再跳转到index.html页 <script>…

ubuntu下QT搭建Android开发环境

一、前言 用QT开发android和直接使用android开发的区别 使用Qt开发Android应用和直接使用Android开发工具&#xff08;例如Android Studio&#xff09;有一些区别&#xff0c;主要体现在开发工具、语言、界面设计和性能等方面&#xff1a; 开发工具&#xff1a; Qt Creat…

Python----字典练习

相关链接&#xff1a;Python---字典的增、删、改、查操作_python中字典的增删改查-CSDN博客 Python---字典---dict-CSDN博客 Python---引用变量与可变、非可变类型-CSDN博客 重点&#xff1a; 字典中的 key &#xff08;就是键&#xff09;可以是很多数据类型&#xff08;…

jmeter下载地址

Jmeter安装教程【5.5】【Windows】jmeter详细安装配置教程&#xff0c;装不好你打我_一只莽夫的博客-CSDN博客

Java线程池的使用和最佳实践

第1章&#xff1a;引言 处理并发问题时&#xff0c;如果每次都新建线程&#xff0c;那系统的压力得有多大&#xff1f;这时候&#xff0c;线程池就像一个英雄一样出现了&#xff0c;它帮我们有效地管理线程&#xff0c;提高资源利用率&#xff0c;降低开销。那么&#xff0c;为…

代理模式介绍(静态代理、jdk动态代理、cglib代理)

一、静态代理 &#xff08;一&#xff09;定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问&#xff1b; 2、涉及到的角色 &#xff08;1&#xff09;抽象主题角色&#xff1a;真实主题和代理主题的共同接口&#xff0c;便于在使用真实主题的地方都可以使用代理…

C#网络编程System.Net.WebClient 类vs System.Net.Http.HttpClient 类

目录 一、WebClient 类 1.WebClient 将数据上传到资源的方法 2.WebClient 从资源下载数据的方法 3.示例源码 4.生成效果 二、HttpClient 类 1.示例源码 2.生成效果 为什么要把两者拿出来pk呢&#xff1f;那是因为WebClient已经在.NET 6.0以后得版本被弃用了&#xff0c…

python跑ncnn(验证模型是否转换成功)

为了转ncnn模型是否成功&#xff0c;用python验证一下先 pip install ncnn分割模型的验证代码 import ncnn import cv2 import numpy as np# 创建ncnn的网络对象 net ncnn.Net()# 加载ONNX模型 net.load_param(E:\\Android_Projects\\ncnn-android-deeplabv3plus-main\\app\…

Spring学习笔记:Day1

学习策略&#xff1a; 理论与实践相结合&#xff1a;每学完一个知识点&#xff0c;尝试进行小的练习或小的项目实践。 持续反馈&#xff1a;在学习过程中&#xff0c;参与社区、论坛或与同事进行讨论&#xff0c;及时解决遇到的问题。 实际项目驱动&#xff1a;在学习后期&a…

PHP字符串面试题

PHP字符串面试题 1. 创建一个字符串变量&#xff0c;并打印输出字符串的内容。 <?php $string "Hello, World!"; echo $string; ?>2. 如何获取字符串的长度&#xff1f; <?php $string "Hello, World!"; $length strlen($string); echo …

P1530 [USACO2.4] 分数化小数 Fractions to Decimals

题目描述 写一个程序,输入一个形如 DN​ 的分数,输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。 例如,13=0.33333333…31​=0.33333333… 写成 0.(3)0.(3),41333=0.123123123…33341​=0.123123123… 写成 0.(123)0.(123),整数 x 写成 x.0。 输入…

Vue3父子组件通信

一、父组件给子组件传值 子组件 ShipHomePortDialog 1.定义变量名称 <script lang"ts" setup> const props defineProps([title]) </script> 2.在template中使用变量 <h4>{{ title }}</h4> 3.在Script代码使用 var t props.title…

鸿蒙开发笔记

最近比较火&#xff0c;本身也是做前端的&#xff0c;就抽空学习了下。对前端很友好 原视频地址&#xff1a;黑马b站鸿蒙OS视频 下载安装跟着视频或者文档就可以了。如果你电脑上安装的有node&#xff0c;但是开发工具显示你没安装&#xff0c;不用动咱们的node&#xff0c;直…