lts翻译成中文,扫一扫自动翻译英语免费

首页 > 教育 > 作者:YD1662023-11-14 11:58:34

Linux命令行,是开发人员日常接触的东西。但是,有很多小技巧。我在这里做个总结(长期更新)。

lts翻译成中文,扫一扫自动翻译英语免费(1)


在路径间如鱼得水

黑技术1:设立根目录

如果,你经常使用一个目录作为你的根目录,那么,你可以通过CDPATH来指定你的cd根目录。 例如,我经常到/etc目录下,来対相应的文件进行配置。比如我想从我的家目录到/etc/nginx/目录下,一般的方法是:

cd /etc/nginx/ 复制代码

有没有可以偷懒的法子呢?当然有,我们可以在.bashrc(如果你是zsh的话,就在.zshrc下)加入export CDPATH=/etc 现在,你想打开的/etc/nginx/目录下,只需要输入:

cd nginx 复制代码

懒人必备。 当然,你可以输入多个根路径,只要在每个路径下用:隔开。

export CDPATH=.:~:/etc:/var: 复制代码

黑技术2:在两个路径相互切换

当我们经常需要在一个terminal下,在两个路径之间,来回切换。这个时候,我们可以使用cd -,在两个路径之间“反复横跳”。


lts翻译成中文,扫一扫自动翻译英语免费(2)


例如:第一个路径是/etc/nginx/,第二个路径是~/project/,我们先cd /etc/nginx/下,然后,再cd ~/project/。随后,当我们需要切换另一个路径只需要cd -就可以实现。

黑技术3:将路径通过栈的方式访问

如果,遇到访问路径的过程像栈这种数据结构,那么我们可以用pushd来解决。 实现过程:

  1. 导航到相应的目录例如/tmp/push1
  2. 使用pushd命令压入目录栈
  3. 在其他路径下,使用popd命令,导航到栈顶目录。

例子:

在/tmp/目录下创建来push1,push2,push3三个目录,需求是将这三个目录分别压入目录栈,然后分别导航到相应的目录。下面将显示整个过程:

# pcdack @ pcdack-sword in /tmp/push1 [18:58:01] $ pwd /tmp/push1 # pcdack @ pcdack-sword in /tmp/push1 [18:58:15] $ pushd . /tmp/push1 /tmp ~ # pcdack @ pcdack-sword in /tmp/push1 [18:58:22] $ cd /tmp/push2 # pcdack @ pcdack-sword in /tmp/push2 [18:58:31] $ pushd . /tmp/push2 /tmp/push1 /tmp ~ # pcdack @ pcdack-sword in /tmp/push2 [18:58:37] $ cd /tmp/push3 # pcdack @ pcdack-sword in /tmp/push3 [19:00:23] $ pushd . /tmp/push3 /tmp/push2 /tmp/push1 /tmp ~ # pcdack @ pcdack-sword in /tmp/push3 [19:00:28] $ popd /tmp/push2 /tmp/push1 /tmp ~ # pcdack @ pcdack-sword in /tmp/push2 [19:00:37] $ popd /tmp/push1 /tmp ~ 复制代码

整个过程非常简单,相信大家都能看得懂。

脚本:

当然我们可以将导航与压栈操作结合起来,我们可以将下面的代码写到.bashrc或者.zshrc下来实现。

function pushcd(){ cd "$@" && eval pushd .; } 复制代码

然后,压栈和切换路径一个命令解决。

黑技术4:“优雅”的切换上级目录

如果我们身处一个特别深的目录下,例如:/dev/bus/usb/001。那么,我们如何切换到/dev/bus/目录下咧?一般的做法是cd ../..,这里只有两级目录看似还是可以接受的,但是,如果,有一天,要回退五级目录。那么一般的写法就不优雅了。所以,在这里要介绍一个黑技术。使用alias来解决问题。在我们的.bashrc或者.zshrc下输入:

alias ..="cd .." alias ..2="cd ../.." alias ..3="cd ../../.." alias ..4="cd ../../../.." alias ..5="cd ../../../../.." 复制代码

然后,我们回退两级目录将变成..2,优雅,快乐,美丽。 当然,也可以用其他表示方法:例如:cd1,cd2...

黑技术5:mkdir与cd的结合

在日常的开发中,我们经常需要创建一个文件夹,并且,导航到这个目录。但是,为了优(tou)雅(lan)。我们可以把两个命令和在一起。创建一个新的命令mkdircd。把下面的代码添加到.bashrc或者.zshrc下:

function mkdircd(){ mkdir -p "$@" && eval cd "\"\$$#\""; } 复制代码

这样就OK了。

原来你是这样的剪切板

我们经常在terminal中,使用系统剪切板。比如,将一个命令的输出复制到剪切板,然后,粘贴到浏览器或其他地方等等的用途。首先,我们需要一个软件叫xsel。在各大发行版本中的包管理中都有,比如在arch中pacman -S xsel就可以安装了。

使用

1.将命令输出到剪切板,比如,我想将ls的结果复制到剪切板中,那么输入下面的命令就可以了:

ls | xsel -i -b 复制代码

为了更加方便调用,我们可以.zshrc或者.bashrc填入如下代码:

alias to_clipboard="sel -i -b" 复制代码

那么,刚刚的例子就变成了:

ls | to_clipboard 复制代码

当然,我们也可以集成查看剪切板内容的命令,在.zshrc或是.bashrc中添加:

alias clipboard="xsel -b -o" 复制代码

当我们在terminal中输入clipboard时,就会将剪切板的内容输出。

压缩文件自如操作

黑技术1:万能解压命令

在Linux中,压缩的格式有很多种类,例如,常用的有.tar.gz,zip,tar.bz2等等。解压命令“又臭又长”,那么,我们能不能一个命令就可以把所有的压缩格式的文件解压出来咧?当然是可以的,我们只需要将下面脚本添加到.zshrc或者.bashrc里,就可以做到一个命令解压所有:

注意:你的机器里需要预先安装了unrar,unzip命令

ex () { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1;; *.7z) 7z x $1 ;; *) echo "'$1' cannot be extracted via ex()" ;; esac else echo "'$1' is not a valid file" fi } 复制代码

黑技术2:头文字“Z”

有些时候,我们需要直接查看压缩包里的内容,而不需要解压这个压缩包,那么我们可以使用z字头命令。这个系列一共有:

  1. zgrep
  2. zcat
  3. zless
  4. zmore
  5. zdiff 这些命令其实和不带"z"的功能类似,只不过作用的对象不一样。"z"命令是专门用在压缩文件下的。 例子:

#我先创建几个文本文件 echo "this first line">first gzip first # 我们通过调用z命令来查看内容 zcat first.gz # 当然同理我们可以通过zless,zmore来查看 # zgrep需要查找的字符用\-i参数指定,比如我想查找带有`line`字眼的内容: zgrep -i line first.gz # zdiff用来对比两个归档文件的不同,与diff类似 # 我们首先创建一个新的文本 echo "this second line">second gzip second # 然后进行对比 zdiff first.gz second.gz 复制代码”智慧“的Grep命令

黑技术:使grep具有与,或,非的逻辑

grep是我们经常使用的文本搜索工具。那么,我们如何使我们的grep具有与,或,非搜索条件? 在介绍使用之前,我们先显示我们要处理的数据(employee文件)

100 张三 CEO 薪水 100k 101 李四 android工程师 薪水 10k 102 王五 IOS工程师 薪水 10k 103 刘六 Web工程师 薪水 20k 104 冯七 大数据工程师 薪水 25k 复制代码

grep并没有直接的”与“命令,需要我们使用正则表达式来模拟与命令

grep -E "字符1.*字符2" filename grep -E "字符1.*字符2|字符2.*字符1" filename 复制代码

我们要匹配要姓张,并且是CEO两个条件。那么,我们输入的命令是:

grep -E "张.*CEO" employee 复制代码

我们要找文档中姓李与姓张的人: 方法1:

grep '字符1\|字符2' filename 复制代码

grep '张\|李' employee 复制代码

方法2:

grep -E '字符1|字符2' employee 复制代码

grep -E '张|李' employee 复制代码

除去所有姓李的人

grep -v '字符1' employee 复制代码

grep -v '李' employee 复制代码回到过去的时光机


lts翻译成中文,扫一扫自动翻译英语免费(3)


黑技术1:灵活的Ctrl R

日常开发工作的时候,我们经常遇到需要输入大量类似的,重复的命令。那么,我们能不能有一种方式可以根据几个字母,找到以前输入命令。方法当然是有的,就是Ctrl R快捷键。

这里通过例子来展示一下,如何使用Ctrl R。 首先,使用history | tail -4来看下我们要用到的后四条历史记录:

1476 cd document 1477 ls 1478 service httpd stop 1479 cd /dev/cpu/ 复制代码

情景一:重复历史命令

如果,我想重新执行cd document命令,那么,我需要轻敲键盘上的Ctrl R键,然后,输入cd就可以看到命令行自动将cd document填入到终端提示符后。这个时候只要轻敲回车,那么,就可以复现命令。

# 按Ctrl R键,然后,输入cd $bck-i-search:cd # 下面为命令行自动补全的命令 $cd document 复制代码

情景二:在历史命令的基础上更改参数

这个步骤与场景一类似,当我们找到我们需要更改的命令,然后,按左键或者右键,退出搜索模式,导航到我们需要修改的参数后,使用Ctrl w删除整个参数,修改即可。下面我用一个例子来解释。这个例子是将1478 service httpd stop的stop参数改为start。

# 按Ctrl R $bck-i-search:service # 找到相应的命令,然后按左,右导航键,退出搜索模式 $ service httpd stop # 然后我们按Ctrl-e到我们需要修改的stop参数后 $ service httpd stop # 使用Ctrl w删除参数 $ service httpd # 补成我们需要的参数 $ service httpd start 复制代码

黑技术2:history 你不知道的事

让 history 显示时间戳

通过export HISTTIMEFORMAT='%F %T就可以让history显示时间戳。当然,你可以把这句话写到你的.bashrc里去,变成全局配置。下面展示一下效果吧。

export HISTTIMEFORMAT='%F %T ' history | more ... 11 2018-04-19 12:54:15 zip STM32 HTTP/ 12 2018-04-19 12:54:15 zip STM32 HTTP.zip STM32 HTTP/ 13 2018-04-19 12:54:15 ;s 14 2018-04-19 12:54:15 man zip 15 2018-04-19 12:54:15 zip -r STMHTTP STM32 HTTP/ 16 2018-04-19 12:54:15 ls 17 2018-04-19 12:54:15 mnt_entertain 18 2018-04-19 12:54:15 cd_entertainment ... 复制代码

注意不支持zsh,zsh的相关命令是HIS_STAMPS=dd-mm-yyyy

!回到过去的时光机

使用!的步骤:

  1. 通过history找到命令的序号,也就是history命令输出前面的数字。
  2. 通过!前面得到的数字,然后,回车。就会将相应序号后面的命令补全到终端提示符后。

例子:

$history | head 10 2018-04-19 12:54:15 ls 11 2018-04-19 12:54:15 zip STM32 HTTP/ 12 2018-04-19 12:54:15 zip STM32 HTTP.zip STM32 HTTP/ 13 2018-04-19 12:54:15 ;s 14 2018-04-19 12:54:15 man zip 15 2018-04-19 12:54:15 zip -r STMHTTP STM32 HTTP/ 16 2018-04-19 12:54:15 ls 17 2018-04-19 12:54:15 mnt_entertain 18 2018-04-19 12:54:15 cd_entertainment 19 2018-04-19 12:54:15 ls # 如果我想重复第17号命令,在终端提示符输入!17然后按回车 $!17 $mnt_entertain 复制代码

去掉历史记录中重复的命令

export HISTCONTROL=ignoredups命令,就可以去除该命令以后的history记录中的重复命令。这句话好像有点绕,下面我用例子来表示:

$export HISTCONTROL=ignoredups $pwd $pwd $pwd $history | tail -3 ... 1111 pwd ... 复制代码

正如上例所示,我们输入的3个pwd命令,最后,只剩下一个pwd命令,在我们的历史记录里面。

将历史命令的参数作为新命令的参数

场景一:当两个命令相邻时


lts翻译成中文,扫一扫自动翻译英语免费(4)

标题十分绕口。这里直接上例子(注意#后面的是我对下面的命令做的解释):


# 这里我们使用cp命令来复制一个名为text的文件 $cp text text.bak # 我们想通过vim来编辑text.bak,只需要输入vim !^ $vim !^ #下面这条命令是当我们输入完上一条命令后,回车自动填充的内容 $ vim text.bak # 我们想通过vim来编辑text,只需要输入vim !!:$ $vim !!:$ #下面这条命令是当我们输入完上一条命令后,回车自动填充的内容 $ vim text 复制代码

如果有多个参数

这里假设有如下命令command1 arg1 arg2 arg3 arg4,我们需要在command2中使用command1一中的arg2参数,那么我们如何用一种优雅的方式取到arg2参数?我们可以通过!!:2的方式取到,同理,如果,我们需要arg3参数,那么可以通过!!:3,依次类推。

$command1 arg1 arg2 arg3 arg4 $command2 !!:2 #下面这条命令是当我们输入完上一条命令后,回车自动填充的内容 $command2 arg2 $command2 !!:3 #下面这条命令是当我们输入完上一条命令后,回车自动填充的内容 $command2 arg3 复制代码

场景二:当两个命令不相邻

如果,两个命令不相邻,当然也是有方法的。直接用例子来解释吧。

$history|tail -3 ... command1 arg1 arg2 arg3 arg4 ... #我们的命令command2需要参数arg2 $command2 !command1:2 #下面这条命令是当我们输入完上一条命令后,回车自动填充的内容 #command2 arg2 复制代码wget强大的下载工具


lts翻译成中文,扫一扫自动翻译英语免费(5)


黑技术1:下载限速

下载限速,主要是用在多个任务环境。因为,我们常常需要在下载的同时做一些其他的事情。例如,浏览网页。但是,wget命令默认开启全速下载,这个时候,可能影响到我们其他的任务。所以,需要让wget慢一点。wget通过--limit-rate来限制速度,举个例子:

# 使用wget下载。并且,限制速度不超过200k。 wget --limit-rate=200k http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz 复制代码

黑技术2:后台下载:

正(kai)常(che)的后台下载。

wget -b http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz 复制代码

黑技术3:模拟浏览器请求

有些下载链接必须要通过浏览器下载,我们可以通过一些设置,让wget的下载请求,像浏览器一般:

# URL-TO-DOWNLOAD是下载链接 wget --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0" URL-TO-DOWNLOAD 复制代码

黑技术4:试探下载链接是否可以下载

我们有些时候需要知道这个链接是否可以下载,然后,対不同的情况作出判断。

wget --spider http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz 复制代码

如果出现类似于下面的情况(最后以后显示存在远程文件),那么证明可以下载:

打开 Spider 模式。检查是否存在远程文件。 --2018-04-20 22:51:42-- http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz 正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1 正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:5162656 (4.9M) [application/octet-stream] 存在远程文件 复制代码

黑技术5:超过一定大小的文件退出下载

下载文件超过5MB,自动退出下载。

wget -Q5m 下载链接 复制代码文件列表“进化”

黑技术1:根据文件大小从大到小(从小到大)显示文件

当前文件夹下从大到小排列

find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n -r 复制代码

我们可以把上面的命令使用alias写入我们的.bashrc和.zshrc,命名为ls_big:

alias ls_big="find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n -r" 复制代码

当前文件夹下从小到大排列

find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n 复制代码

与上面一样,我们可以写道配置文件里

alias ls_small="find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n" 复制代码

黑技术2:根据文件的时间戳显示文件

这个需求,我们只需要使用ls -lt命令就可以来,当然,如果想要逆序输出ls -ltr

黑技术3:查看当前文件所有的隐藏文件和文件夹

文件

find . -maxdepth 1 -type f -name ".*" 复制代码

我们可以写到配置文件中:

alias ls_file_hide="find .-maxdepth -type f -name ".*"" 复制代码

文件夹

find . -maxdepth 1 -type d -name ".*" 复制代码

同理:

alias ls_file_hide="find .-maxdepth -type d -name ".*""

另外还有一些关于c Linux后台服务器开发的一些知识点分享:Linux,Nginx,MySQL,Redis,P2P,K8S,Docker,TCP/IP,协程,DPDK,webrtc,音视频等等视频。

喜欢的朋友可以后台私信【1】获取学习视频

附上一份c Linux后台服务器开发 学习课程大纲给大家


lts翻译成中文,扫一扫自动翻译英语免费(6)


栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.