共计 3186 个字符,预计需要花费 8 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关 Linux Shell 命令具体有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
引言
Shell 作为 Unix 系操作系统当中最有魅力且不可或缺的组件,经过数十载的洗礼不仅没有被淘汰,而且愈加变得成熟稳健,究其原因,大概因为它是个非常稳固的粘合剂,能够把大量功能强大的组件任意配搭,总能很好很快地完成用户的任务。
本文的一些命令很可能看起来是”雕虫小技”,我们只好仰慕一下 Shell 大牛了,但是有些细节我会稍加发掘加以说明,遇到有趣的地方希望能博您一笑了。
1. 以 SUDO 运行上条命令
$ sudo !!
大家应该都知 sudo,不解释。但通常出现的情况是,敲完命令执行后报错才发现忘了 sudo。这时候,新手用户就会:按上箭头,按左箭头,盯着光标回到开始处,输入 sudo,回车;高手用户就蛋定多了,按 Ctrl-p,按 Ctrl-a,输入 sudo,回车。
这里介绍这个是天外飞仙级别的,对,就直接 sudo !!。
当然这几种解决方式效果是完全一样的,只是款不一样,嗯,不解释。
两个感叹号其实是 bash 的一个特性,称为事件引用符(event designators)。!! 其实相当于!-1,引用前一条命令,当然也可以!-2,!-50。默认情况下 bash 会在~/.bash_history 文件内记录用户执行的最近 500 条命令,history 命令可以显示这些命令。
2. 以 HTTP 方式共享当前文件夹的文件
$ python -m SimpleHTTPServer
这命令启动了 Python 的 SimpleHTTPServer 模块,考虑到 Python 在绝大多数的 Linux 发行版当中都默认安装,所以这个命令很可能是最简单的跨平台传文件的方法。
命令执行后将在本机 8000 端口开放 HTTP 服务,在其他能访问本机的机器的浏览器打开 ttp://ip:8000 即打开一个目录列表,点击即可下载。
3. 在以普通用户打开的 VIM 当中保存一个 ROOT 用户文件
:w !sudo tee %
这题目读起来纠结,其实是很常见的,常常忘记了 sudo 就直接用 vim 编辑 /etc 内的文件,(不过也不一定,vim 发现保存的文件无法保存时候会提示)等编辑好了,保存时候才发现没权限。曲线方法是先保存个临时文件,退出后再 sudo cp 回去。不过实际上在 vim 里面可以直接完成这个过程的,命令就是如此。
查阅 vim 的文档(输入:help :w),会提到命令:w!{cmd},让 vim 执行一个外部命令 {cmd},然后把当前缓冲区的内容从 stdin 传入。
tee 是一个把 stdin 保存到文件的小工具。
而 %,是 vim 当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。
所以执行这个命令,就相当于从 vim 外部修改了当前编辑的文件,好完工。
4. 切换回上一个目录
$ cd -
应该不少人都知道这个,横杆 - 代表上一个目录的路径。
实际上 cd - 就是 cd $OLDPWD 的简写,bash 的固定变量 $OLDPWD 总保存着之前一个目录的路径。
相对地,$PWD 总保存着当前目录的路径。这些变量在编写 shell 脚本时候相当有用。
5. 替换上一条命令中的一个短语
$ ^foo^bar^
又是另外一个事件引用符(event designator),可以把上一条命令当中的 foo 替换成 bar。
在需要重复运行调试一道长长的命令,需要测试某个参数时候,用这个命令会比较实用;但多数人会首先选择按上箭头提出上道命令,再移动光标去修改某参数,这样更直观,但效率上就不够使用引用符高,而且在脚本中用这个方法可以简化很多。
这道命令的原始样式应该是这样的:
!!:s/foo/bar/
本文一开始介绍过!!,后面的一段大家应该很熟悉,vim、sed 的替换操作都是这样的语法。
关于事件引用符的更多用法可以深入阅读 The Definitive Guide to Bash Command Line History
6. 快速备份一个文件
$ cp filename{,.bak}
这道命令把 filename 文件拷贝成 filename.bak,大家应该在一些比较复杂的安装教程里面见过这样的用法。其原理就在于 bash 对大括号的展开操作,filename{,.bak} 这一段会被展开成 filename filename.bak 再传给 cp,于是就有了备份的命令了。
大括号在 bash 里面是一个排列的意义,可以试试这个:
$ echo {a,b,c}{a,b,c}{a,b,c}
将输出三个集合的全排列:
aaa aab aac aba abb abc aca acb acc
baa bab bac bba bbb bbc bca bcb bcc
caa cab cac cba cbb cbc cca ccb ccc
7. 免密码 SSH 登录主机
$ ssh-copy-id remote-machine
这个命令把当前用户的公钥串写入到远程主机的~/.ssh/authorized_keys 内,这样下次使用 ssh 登录的时候,远程主机就直接根据这串密钥完成身份校验,不再询问密码了。前提是你当前用户有生成了公钥,默认是没有的,先执行 ssh-keygen 试试吧!
这个命令如果用手工完成,是这样的:
your-machine$ scp ~/.ssh/identity.pub remote-machine:
your-machine$ ssh remote-machine
remote-machine$ cat identity.pub ~/.ssh/authorized_keys
如果你想删掉远程主机上的密钥,直接打开 authorized_keys,搜索你的用户名,删除那行,即可。
8. 抓取 LINUX 桌面的视频
$ ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
我们在一些视频网站上看到别人的 3D 桌面怎么怎么酷的视频,通常就是这么来的,ffmpeg 可以直接解码 X11 的图形,并转换到相应输出格式。
ffmpeg 的通常用法是,根据一堆参数,输出一个文件,输出文件通常放 ***,下面解析下几个参数:
-f x11grab 指定输入类型。因为 x11 的缓冲区不是普通的视频文件可以侦测格式,必须指定后 ffmpeg 才知道如何获得输入。
-s wxga 设置抓取区域的大小。wxga 是 1366*768 的标准说法,也可以换成 -s 800 times;600 的写法。
-r 25 设置帧率,即每秒抓取的画面数。
-i :0.0 设置输入源,本地 X 默认在 0.0
-sameq 保持跟输入流一样的图像质量,以用来后期处理。
后记
说 Shell 是一种编程语言,可能有些尴尬,虽然很多人每天都在用 Shell,但从来没见它荣登 TIOBE 编程语言排行榜之类的,可以说毫无名分,因为很多用户没意识到它是一种语言,只当做这是一个能够很好完成任务的工具,基本得理所当然,就好像 GUI 程序的菜单、按钮一样。
掌握 Shell,通常能够让任务在数秒钟内完成,这就让 Shell 跟 C、Perl、Python 这些语言区别开来,没人否认后者更能胜任更多的任务,但是他们是在不同的层面上去做,Shell 依赖大量的系统组件黏合调用,而后者依赖各种库,各所擅长不同的应用领域,比喻就是,Shell 是混凝土,可以很方便地粘合一些建筑组件而成为稳固的高楼大厦;但同样是粘合剂,粘玻璃窗、粘书报、粘皮鞋,混凝土是绝对不合适的,Shell 并不擅长一些细致操作,比如它连浮点运算都不支持,更别提什么图形运算什么的。但这并不妨碍 Shell 来帮我们完成很多粗重任务。
上述就是丸趣 TV 小编为大家分享的 Linux Shell 命令具体有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。