当前位置: 首页 > Linux

关于shell的一些小技巧

时间:2023-04-06 12:10:02 Linux

首先跑题了,大家总是问能不能装双系统,哪个linux发行版比较好。这里统一回答。安装双系统很简单,网上有很多教程;至于发行版本,推荐Ubuntu,不要迷恋那些看起来牛逼的小众发行版。我们的判断标准是他们是否稳定,是否有完整的社区支持,这两个Ubuntu桌面版无疑是最好的。之前遇到了蓝牙键盘适配的问题,Ubuntu社区的一个大佬直接写了个驱动,完美解决了,真是出乎意料。当然,如果你有时间爱折腾,可以随意。或者如果你有钱,你不需要担心Linux发行版。玩MacBook。它继承了Linux的优点。小而漂亮的工具,加上管道符号和重定向等漂亮的设计理念,可以使许多复杂的任务自动化。本文介绍了一些基本的Linuxshell技巧,相信可以帮助你提高工作效率!输入相似的文件名太麻烦了。花括号括起来的字符串用逗号连接,可以自动展开,非常好用。直接看例子:$echo{one,two,three}fileonefiletwofilethreefile$echo{one,two,three}{1,2,3}one1one2one3two1two2two3three1three2three3你看,卷曲中的每个字符大括号可以与后面(或之前)的字符串组合。注意花括号和其中的逗号不能用空格隔开,否则会被当作普通字符串处理。这项技术的实际用途是什么?最简单实用的是cp、mv、rm等命令的扩展参数:$cp/very/long/path/file{,.bak}#复制一份file.bak到文件$rmfile{1,3,5}.txt#删除file1.txtfile3.txtfile5.txt$mv*.{c,cpp}src/#将所有后缀为.c和.cpp的文件移动到src文件夹中。输入路径名太麻烦了。使用cd-回到刚才所在的目录,看例子:$pwd/very/long/path$cd#回到主目录看$pwd/home/labuladong$cd-#回到刚才的目录$pwd/very/long/path特别命令!$将替换为上一条命令的最后一条路径,直接看例子:#Noexecutablepermissionadded$/usr/bin/script.shzsh:permissiondenied:/usr/bin/script.sh$chmod+x!$chmod+x/usr/bin/script.shspecialcommand!\*将替换为上一条命令输入的所有文件路径,直接看例子:#创建了三个脚本文件$filescript1.shscript2.shscript3。sh#全部添加可执行权限$chmod+x!*chmod+xscript1.shscript2.shscript3.sh可以在环境变量CDPATH中添加你常用的工作目录,当cd命令在当前目录下找不到当您到达您指定的文件/目录时,它会自动在CDPATH中的目录中查找它。比如我经常去home目录,也经常去/var/log目录下找日志。我可以执行如下命令:$exportCDPATH='~:/var/log'#cd命令会在~目录和/var/log目录下扩展搜索$pwd/home/labuladong/musics$cdmysqlcd/var/log/mysql$pwd/var/log/mysql$cdmy_picturescd/home/labuladong/my_pictures这个技巧非常有用,这样你就不用经常写完整的路径名,节省很多时间。需要注意的是,以上操作都是bash支持的。当然其他主流的shell解释器支持扩展cd命令的搜索目录,但不一定是修改CDPATH变量。具体设置方法可以自行搜索。输入重复的命令使用特殊命令太麻烦了!!,可以自动替换为上次使用的命令:$aptinstallnet-toolsE:Couldnotopenlockfile-open(13:Permissiondenied)$sudo!!sudoaptinstallnet-tools[sudo]passwordforlabuladong:有些命令很长,具体参数一时想不起来怎么办?对于bash终端,可以使用Ctrl+R快捷键反向搜索历史命令。之所以叫反向搜索,是为了搜索最后输入的命令。比如按Ctrl+R后,输入sudo,bash会搜索最后一个包含sudo的命令,回车后可以运行命令:(reverse-i-search)`sudo':sudoaptinstallgit但是这个方法缺点:第一,这个功能好像只有bash支持,而我用的是zsh作为shell终端,所以不能用;第二,只能找到一个(最近的)命令,如果我想找到以前的命令,没有办法。这种情况下,我们最常用的方法是使用带有管道符的history命令和grep命令来查找历史命令:#过滤掉所有包含config字段的历史命令$history|grep'config'7352./configure7434gitconfig--global--unsethttps.proxy9609ifconfig9985clip-o|sed-z's/\n/,\n/g'|clip10433cd~/.config你使用的所有shell命令都会被记录下来,前面的数字表示是哪个命令。找到要重复使用的命令后,无需复制和粘贴命令。只需使用!+您要重复使用的命令编号即可运行该命令。拿上面的例子,我想重新运行gitconfig命令,可以这样:$!7434gitconfig--global--unsethttps.proxy#运行完成后,我觉得history加pipeline加grep打字还是太多了。您可以在shell配置文件(.bashrc、.zshrc等)中编写这样的函数:his(){history|grep"$@"}这样就不用写那么多了,只需要他的'some_keyword'搜索历史命令即可。我一般不使用bash作为终端。推荐一个很好用的shell终端zsh,也是我自己用的shell。这个终端还可以扩展各种插件,非常好用。具体配置方法可以自行搜索。其他提示1.yes命令自动输入字符y进行确认:我们在安装某些软件时,可能会出现交互问题:$sudoaptinstallXXX...XXX会占用996MB磁盘空间,继续吗?[y/n]一般情况下,我们会一路走到最后,但是如果我们要自动化安装一些软件,那就很烦人了。遇到这样的交互式问题,我们就会卡住,不得不手动处理。yes命令可以帮助我们:$yes|your_cmd会自动y一路往下,不会停下来让我们进入。你单独运行yes命令,发现它只是打印了很多字符y,并通过管道将输出连接到your_cmd的标准输入。如果your_cmd再问无聊的问题,它会从标准输入中读取数据,它会读取一个y和一个换行符,你手动输入y确认是效果。2.特殊变量$?记录最后一条命令的返回值。在Linuxshell中,遵循C语言的习惯,如果返回值为0,程序正常退出,如果不为0,则异常退出。在使用命令行的时候读取上一条命令的返回值是没有用的,但是如果你想写一些shell脚本,知道返回值就非常有用了。举一个实际的例子,比如我的Github仓库fucking-algorithm,我需要在其中所有markdown文件的底部添加上一篇、下一篇、目录三个页脚链接。有些文章已经有了页脚。没有一个部分。为了防止重复添加,我必须知道一个md文件的末尾是否已经添加。这时候我可以用$?变量用grep命令来做:#!/bin/bashfilename=$1#检查文件末尾是否包含关键字tail|grep'Nextarticle'$filename#grep找到匹配则返回0,找不到则返回非零值[$?-ne0]&&{添加页脚;}3、特殊变量$$记录了当前进程的PID。这个功能在平时使用的时候可能用处不大,但是在写shell脚本的时候也是非常有用的。比如你想在/tmp中创建一个临时文件,文件的命名一直是一件很麻烦的事情。这时,可以使用$$变量扩展当前进程的PID作为临时文件名。PID在计算机中是唯一的,永远不会重复,也不需要记住临时文件的名字。以上就是良序教程网为各位小伙伴分享的关于shell的一些小技巧。以上就是良序教程网为各位小伙伴们分享的Linux相关知识。