2025年shell编程简单实例(shell编程总结)

shell编程简单实例(shell编程总结)p Linux 的学习对于一个程序员的重要性是不言而喻的 前端开发相比后端开发 接触 nbsp Linux nbsp 机会相对较少 因此往往容易忽视它 但是学好它却是程序员必备修养之一 p p 作者使用的是阿里云服务器 nbsp ECS nbsp 最便宜的那种 nbsp CentOS 7 7 amp p

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p>Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发,接触&nbsp;Linux&nbsp;机会相对较少,因此往往容易忽视它。但是学好它却是程序员必备修养之一。</p><p>作者使用的是阿里云服务器&nbsp;ECS&nbsp;(最便宜的那种)&nbsp;CentOS 7.7&nbsp;64位。当然你也可以在自己的电脑安装虚拟机,虚拟机中再去安装&nbsp;CentOS&nbsp;系统(这就完全免费了)。至于它的安装教程可以去谷歌搜索下,相关教程非常多。</p><p>操作系统&nbsp;Operating System&nbsp;简称&nbsp;OS&nbsp;,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。</p><p>操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGP0e2Y5x6ulXjOQIgtCcqJdAHqjAZ5dvAbXQav7WnBdAYlUFRxVBZSQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><ul><li><p>Linux&nbsp;系统内核指的是由&nbsp;Linus Torvalds&nbsp;负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。</p></li><li><p>Linux&nbsp;发行套件系统是我们常说的&nbsp;Linux&nbsp;操作系统,也即是由&nbsp;Linux&nbsp;内核与各种常用软件的集合产品。</p></li></ul><p>「总结:真正的&nbsp;Linux&nbsp;指的是系统内核,而我们常说的&nbsp;Linux&nbsp;指的是“发行版完整的包含一些基础软件的操作系统”。」</p><ol><li><p>稳定且有效率;</p></li><li><p>免费(或少许费用);</p></li><li><p>漏洞少且快速修补;</p></li><li><p>多任务多用户;</p></li><li><p>更加安全的用户与文件权限策略;</p></li><li><p>适合小内核程序的嵌入系统;</p></li><li><p>相对不耗资源。</p></li></ol><ul><li><p>「红帽企业版 Linux:」&nbsp;RHEL&nbsp;是全世界内使用最广泛的&nbsp;Linux&nbsp;系统。它具有极强的性能与稳定性,是众多生成环境中使用的(收费的)系统。</p></li><li><p>「Fedora:」&nbsp;由红帽公司发布的桌面版系统套件,用户可以免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到&nbsp;RHEL&nbsp;系统中,因此&nbsp;Fedora&nbsp;也成为&nbsp;RHEL&nbsp;系统的试验版本。</p></li><li><p>「CentOS:」&nbsp;通过把&nbsp;RHEL&nbsp;系统重新编译并发布给用户免费使用的&nbsp;Linux&nbsp;系统,具有广泛的使用人群。</p></li><li><p>「Deepin:」&nbsp;中国发行,对优秀的开源成品进行集成和配置。</p></li><li><p>「Debian:」&nbsp;稳定性、安全性强,提供了免费的基础支持,在国外拥有很高的认可度和使用率。</p></li><li><p>「Ubuntu:」&nbsp;是一款派生自&nbsp;Debian&nbsp;的操作系统,对新款硬件具有极强的兼容能力。&nbsp;Ubuntu&nbsp;与&nbsp;Fedora&nbsp;都是极其出色的&nbsp;Linux&nbsp;桌面系统,而且&nbsp;Ubuntu&nbsp;也可用于服务器领域。</p></li></ul><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGBrCzziacNL41tAQn8BOcbX6Hiba8wj9hfFO7PSFzN2Hd4RC9kL1JY71Q/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>通过执行&nbsp;ssh root@121.42.11.34&nbsp;命令,然后输入服务器连接密码就可以顺利登陆远程服务器。从现在开始我们就可以在本地电脑操作远程服务器。</p><ol><li><p>这个黑色的面板就是终端也就是&nbsp;Shell&nbsp;(命令行环境)。</p></li><li><p>ssh root@xxx&nbsp;这是一条命令,必须要在&nbsp;Shell&nbsp;中才能执行。</p></li></ol><p>Shell&nbsp;这个单词的原意是“外壳”,跟&nbsp;kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。</p><ul><li><p>Shell&nbsp;是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(&nbsp;command line interface&nbsp;,简写为&nbsp;CLI&nbsp;)。&nbsp;Shell&nbsp;接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。</p></li><li><p>Shell&nbsp;是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用&nbsp;Shell&nbsp;命令写出各种小程序,又称为&nbsp;Shell&nbsp;脚本。这些脚本都通过&nbsp;Shell&nbsp;的解释执行,而不通过编译。</p></li><li><p>Shell&nbsp;是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。</p></li></ul><p>Shell&nbsp;有很多种,只要能给用户提供命令行环境的程序,都可以看作是&nbsp;Shell&nbsp;。</p><p>历史上,主要的&nbsp;Shell&nbsp;有下面这些:</p><ul><li><p>Bourne Shell(sh)</p></li><li><p>Bourne Again shell(bash)</p></li><li><p>C Shell(csh)</p></li><li><p>TENEX C Shell(tcsh)</p></li><li><p>Korn shell(ksh)</p></li><li><p>Z Shell(zsh)</p></li><li><p>Friendly Interactive Shell(fish)</p></li></ul><p>其中&nbsp;Bash&nbsp;是目前最常用的&nbsp;Shell&nbsp;。&nbsp;MacOS&nbsp;中的默认&nbsp;Shell&nbsp;就是&nbsp;Bash&nbsp;。</p><p>通过执行&nbsp;echo $SHELL&nbsp;命令可以查看到当前正在使用的&nbsp;Shell&nbsp;。还可以通过&nbsp;cat /etc/shells&nbsp;查看当前系统安装的所有&nbsp;Shell&nbsp;种类。</p><p>进入命令行环境以后,用户会看到&nbsp;Shell&nbsp;的提示符。提示符往往是一串前缀,最后以一个美元符号&nbsp;$&nbsp;结尾,用户可以在这个符号后面输入各种命令。</p><p>执行一个简单的命令&nbsp;pwd&nbsp;:</p><pre></pre><p>命令解析:</p><ul><li><p>root:表示用户名;</p></li><li><p>iZm5e8dsxce9ufaic7hi3uZ:表示主机名;</p></li><li><p>~:表示目前所在目录为家目录,其中&nbsp;root&nbsp;用户的家目录是&nbsp;/root&nbsp;普通用户的家目录在&nbsp;/home&nbsp;下;</p></li><li><p>#:指示你所具有的权限(&nbsp;root&nbsp;用户为&nbsp;#&nbsp;,普通用户为&nbsp;$&nbsp;)。</p></li><li><p>执行&nbsp;whoami&nbsp;命令可以查看当前用户名;</p></li><li><p>执行&nbsp;hostname&nbsp;命令可以查看当前主机名;</p></li></ul><p>关于如何创建、切换、删除用户,在后面的用户与权限会具体讲解,这里先使用&nbsp;root&nbsp;用户进行演示。</p><blockquote><p>❝[备注] root 是超级用户,具备操作系统的一切权限。❞</p></blockquote><pre>command&nbsp;parameters(命令&nbsp;参数)</pre><ul><li><p>「单个参数」:ls -a(a 是英文 all 的缩写,表示“全部”)</p></li><li><p>「多个参数」:ls -al(全部文件 + 列表形式展示)</p></li><li><p>「单个长参数」:ls --all</p></li><li><p>「多个长参数」:ls --reverse --all</p></li><li><p>「长短混合参数」:ls --all -l</p></li></ul><ul><li><p>「短参数」:command -p 10(例如:ssh root@121.42.11.34 -p 22)</p></li><li><p>「长参数」:command --paramters=10(例如:ssh root@121.42.11.34 --port=22)</p></li></ul><p>在开始学习&nbsp;Linux&nbsp;命令之前,有这么一些快捷方式,是必须要提前掌握的,它将贯穿整个&nbsp;Linux&nbsp;使用生涯。</p><ul><li><p>通过上下方向键 ↑ ↓ 来调取过往执行过的&nbsp;Linux&nbsp;命令;</p></li><li><p>命令或参数仅需输入前几位就可以用&nbsp;Tab&nbsp;键补全;</p></li><li><p>Ctrl + R&nbsp;:用于查找使用过的命令(history&nbsp;命令用于列出之前使用过的所有命令,然后输入&nbsp;!&nbsp;命令加上编号(&nbsp;!2&nbsp;)就可以直接执行该历史命令);</p></li><li><p>Ctrl + L:清除屏幕并将当前行移到页面顶部;</p></li><li><p>Ctrl + C:中止当前正在执行的命令;</p></li><li><p>Ctrl + U:从光标位置剪切到行首;</p></li><li><p>Ctrl + K:从光标位置剪切到行尾;</p></li><li><p>Ctrl + W:剪切光标左侧的一个单词;</p></li><li><p>Ctrl + Y:粘贴&nbsp;Ctrl + U | K | Y&nbsp;剪切的命令;</p></li><li><p>Ctrl + A:光标跳到命令行的开头;</p></li><li><p>Ctrl + E:光标跳到命令行的结尾;</p></li><li><p>Ctrl + D:关闭&nbsp;Shell&nbsp;会话;</p></li></ul><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGibaaXRKZYnMDMiaxcc24ibrIdpGJY03AeX5Tia1fhoKCXlFiaaklcW8tdIQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>显示当前目录的路径</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGFrwA2icsCuwKic39WRqC17wcq2C3VLjvgM7hUArgViawM9GeclE1XMDKQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>查看命令的可执行文件所在路径,&nbsp;Linux&nbsp;下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序,&nbsp;which&nbsp;命令本身对应的程序也存在于&nbsp;Linux&nbsp;中。</p><p>总的来说一个命令就是一个可执行程序。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGS6HtAx3So8hkr2WGBVFVl2ic3LlppzPzcY79evk96Rplsh6b0FyCjxQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>列出文件和目录,它是&nbsp;Linux&nbsp;最常用的命令之一。</p><p>【常用参数】</p><ul><li><p>-a&nbsp;显示所有文件和目录包括隐藏的</p></li><li><p>-l&nbsp;显示详细列表</p></li><li><p>-h&nbsp;适合人类阅读的</p></li><li><p>-t&nbsp;按文件最近一次修改时间排序</p></li><li><p>-i&nbsp;显示文件的&nbsp;inode&nbsp;(&nbsp;inode&nbsp;是文件内容的标识)</p></li></ul><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGKVKGb8BPiaXMnbOSW34Q7IffcKeTPcovBj9W2ao4Dzv0uzeic7mibp8rA/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>cd&nbsp;是英语&nbsp;change directory&nbsp;的缩写,表示切换目录。</p><pre></pre><p>[注意] 输入cd /ho&nbsp;+ 单次&nbsp;tab&nbsp;键会自动补全路径 + 两次&nbsp;tab&nbsp;键会列出所有可能的目录列表。</p><p>列举目录大小信息。</p><p>【常用参数】</p><ul><li><p>-h&nbsp;适合人类阅读的;</p></li><li><p>-a&nbsp;同时列举出目录下文件的大小信息;</p></li><li><p>-s&nbsp;只显示总计大小,不显示具体信息。</p></li></ul><p>一次性显示文件所有内容,更适合查看小的文件。</p><pre>cat&nbsp;cloud-init.log</pre><p>【常用参数】</p><ul><li><p>-n&nbsp;显示行号。</p></li></ul><p>分页显示文件内容,更适合查看大的文件。</p><pre>less&nbsp;cloud-init.log</pre><p>【快捷操作】</p><ul><li><p>空格键:前进一页(一个屏幕);</p></li><li><p>b&nbsp;键:后退一页;</p></li><li><p>回车键:前进一行;</p></li><li><p>y&nbsp;键:后退一行;</p></li><li><p>上下键:回退或前进一行;</p></li><li><p>d&nbsp;键:前进半页;</p></li><li><p>u&nbsp;键:后退半页;</p></li><li><p>q&nbsp;键:停止读取文件,中止&nbsp;less&nbsp;命令;</p></li><li><p>=&nbsp;键:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;</p></li><li><p>h&nbsp;键:显示帮助文档;</p></li><li><p>/&nbsp;键:进入搜索模式后,按&nbsp;n&nbsp;键跳到一个符合项目,按&nbsp;N&nbsp;键跳到上一个符合项目,同时也可以输入正则表达式匹配。</p></li></ul><p>显示文件的开头几行(默认是10行)</p><pre>head&nbsp;cloud-init.log</pre><p>【参数】</p><ul><li><p>-n&nbsp;指定行数&nbsp;head cloud-init.log -n 2</p></li></ul><p>显示文件的结尾几行(默认是10行)</p><pre>tail&nbsp;cloud-init.log</pre><p>【参数】</p><ul><li><p>-n&nbsp;指定行数&nbsp;tail cloud-init.log -n 2</p></li><li><p>-f&nbsp;会每过1秒检查下文件是否有更新内容,也可以用&nbsp;-s&nbsp;参数指定间隔时间&nbsp;tail -f -s 4 xxx.log</p></li></ul><p>创建一个文件</p><pre>touch&nbsp;new_file</pre><p>创建一个目录</p><pre>mkdir&nbsp;new_folder</pre><p>【常用参数】</p><ul><li><p>-p&nbsp;递归的创建目录结构&nbsp;mkdir -p one/two/three</p></li></ul><p>拷贝文件和目录</p><pre></pre><p>【常用参数】</p><ul><li><p>-r&nbsp;递归的拷贝,常用来拷贝一整个目录</p></li></ul><p>移动(重命名)文件或目录,与cp命令用法相似。</p><pre></pre><p>删除文件和目录,由于&nbsp;Linux&nbsp;下没有回收站,一旦删除非常难恢复,因此需要谨慎操作</p><pre></pre><p>【常用参数】</p><ul><li><p>-i&nbsp;向用户确认是否删除;</p></li><li><p>-f&nbsp;文件强制删除;</p></li><li><p>-r&nbsp;递归删除文件夹,著名的删除操作&nbsp;rm -rf&nbsp;。</p></li></ul><p>英文&nbsp;Link&nbsp;的缩写,表示创建链接。</p><p>学习创建链接之前,首先要理解链接是什么,我们先来看看&nbsp;Linux&nbsp;的文件是如何存储的:</p><p>Linux&nbsp;文件的存储方式分为3个部分,文件名、文件内容以及权限,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过&nbsp;inode&nbsp;标识绑定到文件内容。</p><p>Linux 下有两种链接类型:硬链接和软链接。</p><p>使链接的两个文件共享同样文件内容,就是同样的&nbsp;inode&nbsp;,一旦文件1和文件2之间有了硬链接,那么修改任何一个文件,修改的都是同一块内容,它的缺点是,只能创建指向文件的硬链接,不能创建指向目录的(其实也可以,但比较复杂)而软链接都可以,因此软链接使用更加广泛。</p><pre>ln&nbsp;file1&nbsp;file2&nbsp;&nbsp;--&gt;&nbsp;创建&nbsp;file2&nbsp;为&nbsp;file1&nbsp;的硬链接</pre><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGyLe1jIibO74xetUnkTGHsHqgcXRcb2KOSgoz6lwcCJlic4Zwj05W4T8g/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>如果我们用&nbsp;rm file1&nbsp;来删除&nbsp;file1&nbsp;,对&nbsp;file2&nbsp;没有什么影响,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上删除。只有同时删除了&nbsp;file1&nbsp;与&nbsp;file2&nbsp;后,它们共同指向的文件内容才会消失。</p><p>软链接就类似&nbsp;windows&nbsp;下快捷方式。</p><pre>ln&nbsp;-s&nbsp;file1&nbsp;file2</pre><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGIFmW6BmqOicyYHbEajicTric2ZmQw63xGGWriaGUNSlf3ZXIn6szoG4kVQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>执行&nbsp;ls -l&nbsp;命名查看当前目录下文件的具体信息</p><pre></pre><p>其实&nbsp;file2&nbsp;只是&nbsp;file1&nbsp;的一个快捷方式,它指向的是&nbsp;file1&nbsp;,所以显示的是&nbsp;file1&nbsp;的内容,但其实&nbsp;file2&nbsp;的&nbsp;inode&nbsp;与&nbsp;file1&nbsp;并不相同。如果我们删除了&nbsp;file2&nbsp;的话,&nbsp;file1&nbsp;是不会受影响的,但如果删除&nbsp;file1&nbsp;的话,&nbsp;file2&nbsp;就会变成死链接,因为指向的文件不见了。</p><p>Linux&nbsp;是一个多用户的操作系统。在&nbsp;Linux&nbsp;中,理论上来说,我们可以创建无数个用户,但是这些用户是被划分到不同的群组里面的,有一个用户,名叫&nbsp;root&nbsp;,是一个很特殊的用户,它是超级用户,拥有最高权限。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGpD1uNMEJvffEXe9hXSria4LwaUV9Ach9LCaV2URibpMD7Z5ibJaovHDbQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>自己创建的用户是有限权限的用户,这样大大提高了&nbsp;Linux&nbsp;系统的安全性,有效防止误操作或是病毒攻击,但是我们执行的某些命令需要更高权限时可以使用&nbsp;sudo&nbsp;命令。</p><p>以&nbsp;root&nbsp;身份运行命令</p><pre></pre><ul><li><p>useradd&nbsp;添加新用户</p></li><li><p>passwd&nbsp;修改用户密码</p></li></ul><p>这两个命令需要&nbsp;root&nbsp;用户权限</p><pre></pre><p>删除用户,需要&nbsp;root&nbsp;用户权限</p><pre></pre><p>切换用户,需要&nbsp;root&nbsp;用户权限</p><pre></pre><p>Linux&nbsp;中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。</p><p>创建群组,用法和&nbsp;useradd&nbsp;类似。</p><pre>groupadd&nbsp;friends</pre><p>删除一个已存在的群组</p><pre>groupdel&nbsp;foo&nbsp;&nbsp;--&gt;&nbsp;删除foo群组</pre><p>查看用户所在群组</p><pre>groups&nbsp;lion&nbsp;&nbsp;--&gt;&nbsp;查看&nbsp;lion&nbsp;用户所在的群组</pre><p>用于修改用户的账户。</p><p>【常用参数】</p><ul><li><p>-l&nbsp;对用户重命名。需要注意的是&nbsp;/home&nbsp;中的用户家目录的名字不会改变,需要手动修改。</p></li><li><p>-g&nbsp;修改用户所在的群组,例如&nbsp;usermod -g friends lion&nbsp;修改&nbsp;lion&nbsp;用户的群组为&nbsp;friends&nbsp;。</p></li><li><p>-G&nbsp;一次性让用户添加多个群组,例如&nbsp;usermod -G friends,foo,bar lion&nbsp;。</p></li><li><p>-a&nbsp;-G&nbsp;会让你离开原先的群组,如果你不想这样做的话,就得再添加&nbsp;-a&nbsp;参数,意味着&nbsp;append&nbsp;追加的意思。</p></li></ul><p>用于修改文件的群组。</p><pre>chgrp&nbsp;bar&nbsp;file.txt&nbsp;--&gt;&nbsp;file.txt文件的群组修改为bar</pre><p>改变文件的所有者,需要&nbsp;root&nbsp;身份才能运行。</p><pre></pre><p>【常用参数】</p><ul><li><p>-R&nbsp;递归设置子目录和子文件,&nbsp;chown -R lion:lion /home/frank&nbsp;把&nbsp;frank&nbsp;文件夹的用户和群组都改为&nbsp;lion&nbsp;。</p></li></ul><p>修改访问权限。</p><pre>chmod&nbsp;740&nbsp;file.txt</pre><p>【常用参数】</p><ul><li><p>-R&nbsp;可以递归地修改文件访问权限,例如&nbsp;chmod -R 777 /home/lion</p></li></ul><p>修改权限的确简单,但是理解其深层次的意义才是更加重要的。下面我们来系统的学习&nbsp;Linux&nbsp;的文件权限。</p><pre></pre><p>其中&nbsp;drwxr-xr-x&nbsp;表示文件或目录的权限。让我们一起来解读它具体代表什么?</p><ul><li><p>d&nbsp;:表示目录,就是说这是一个目录,普通文件是&nbsp;-&nbsp;,链接是&nbsp;l&nbsp;。</p></li><li><p>r&nbsp;:&nbsp;read&nbsp;表示文件可读。</p></li><li><p>w&nbsp;:&nbsp;write&nbsp;表示文件可写,一般有写的权限,就有删除的权限。</p></li><li><p>x&nbsp;:&nbsp;execute&nbsp;表示文件可执行。</p></li><li><p>-&nbsp;:表示没有相应权限。</p></li></ul><p>权限的整体是按用户来划分的,如下图所示:</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGegTNkB1vLic5Omr8LY1HrDiaZ1A4MkqnE9jxvLJhd4EqPCwPXyYCYv2w/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>现在再来理解这句权限&nbsp;drwxr-xr-x&nbsp;的意思:</p><ul><li><p>它是一个文件夹;</p></li><li><p>它的所有者具有:读、写、执行权限;</p></li><li><p>它的群组用户具有:读、执行的权限,没有写的权限;</p></li><li><p>它的其它用户具有:读、执行的权限,没有写的权限。</p></li></ul><p>现在理解了权限,我们使用&nbsp;chmod&nbsp;来尝试修改权限。&nbsp;chmod&nbsp;它不需要是&nbsp;root&nbsp;用户才能运行的,只要你是此文件所有者,就可以用&nbsp;chmod&nbsp;来修改文件的访问权限。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGf1FBBxP9gEYRz0XMFDGPKg1YraqrcaRYO72Jic2L63z0FFDoD34MF6Q/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>因此要改变权限,只要做一些简单的加法就行:</p><pre></pre><ul><li><p>u&nbsp;:&nbsp;user&nbsp;的缩写,用户的意思,表示所有者。</p></li><li><p>g&nbsp;:&nbsp;group&nbsp;的缩写,群组的意思,表示群组用户。</p></li><li><p>o&nbsp;:&nbsp;other&nbsp;的缩写,其它的意思,表示其它用户。</p></li><li><p>a&nbsp;:&nbsp;all&nbsp;的缩写,所有的意思,表示所有用户。</p></li><li><p>+&nbsp;:加号,表示添加权限。</p></li><li><p>-&nbsp;:减号,表示去除权限。</p></li><li><p>=&nbsp;:等于号,表示分配权限。</p></li></ul><pre></pre><p>搜索包含关键字的所有文件和目录。后接需要查找的文件名,也可以用正则表达式。</p><pre></pre><pre></pre><p>[注意]&nbsp;locate&nbsp;命令会去文件数据库中查找命令,而不是全磁盘查找,因此刚创建的文件并不会更新到数据库中,所以无法被查找到,可以执行&nbsp;updatedb&nbsp;命令去更新数据库。</p><p>用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。</p><pre>find&nbsp;&lt;何处&gt;&nbsp;&lt;何物&gt;&nbsp;&lt;做什么&gt;</pre><ul><li><p>「何处」:指定在哪个目录查找,此目录的所有子目录也会被查找。</p></li><li><p>「何物」:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。</p></li><li><p>「做什么」:找到文件后,可以进行后续处理,如果不指定这个参数,&nbsp;find&nbsp;命令只会显示找到的文件。</p></li></ul><pre></pre><p>[注意]&nbsp;find&nbsp;命令只会查找完全符合 “何物” 字符串的文件,而&nbsp;locate&nbsp;会查找所有包含关键字的文件。</p><pre></pre><pre>find&nbsp;-name&nbsp;"*.txt"&nbsp;-atime&nbsp;-7&nbsp;&nbsp;--&gt;&nbsp;近&nbsp;7天内访问过的.txt结尾的文件</pre><pre></pre><pre></pre><p>Linux&nbsp;下软件是以包的形式存在,一个软件包其实就是软件的所有文件的压缩包,是二进制的形式,包含了安装软件的所有指令。&nbsp;Red Hat&nbsp;家族的软件包后缀名一般为&nbsp;.rpm&nbsp;,&nbsp;Debian&nbsp;家族的软件包后缀是&nbsp;.deb&nbsp;。</p><p>Linux&nbsp;的包都存在一个仓库,叫做软件仓库,它可以使用&nbsp;yum&nbsp;来管理软件包,&nbsp;yum&nbsp;是&nbsp;CentOS&nbsp;中默认的包管理工具,适用于&nbsp;Red Hat&nbsp;一族。可以理解成&nbsp;Node.js&nbsp;的&nbsp;npm&nbsp;。</p><ul><li><p>yum update | yum upgrade&nbsp;更新软件包</p></li><li><p>yum search xxx&nbsp;搜索相应的软件包</p></li><li><p>yum install xxx&nbsp;安装软件包</p></li><li><p>yum remove xxx&nbsp;删除软件包</p></li></ul><p>有时候&nbsp;CentOS&nbsp;默认的&nbsp;yum&nbsp;源不一定是国内镜像,导致&nbsp;yum&nbsp;在线安装及更新速度不是很理想。这时候需要将&nbsp;yum&nbsp;源设置为国内镜像站点。国内主要开源的镜像站点是网易和阿里云。</p><p>1、首先备份系统自带&nbsp;yum&nbsp;源配置文件&nbsp;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup</p><p>2、下载阿里云的&nbsp;yum&nbsp;源配置文件到&nbsp;/etc/yum.repos.d/CentOS7</p><pre>wget&nbsp;-O&nbsp;/etc/yum.repos.d/CentOS-Base.repo&nbsp;http://mirrors.aliyun.com/repo/Centos-7.repo</pre><p>3、生成缓存</p><pre>yum&nbsp;makecache</pre><p>Linux&nbsp;命令种类繁杂,我们凭借记忆不可能全部记住,因此学会查用手册是非常重要的。</p><pre></pre><ol><li><p>可执行程序或&nbsp;Shell&nbsp;命令;</p></li><li><p>系统调用(&nbsp;Linux&nbsp;内核提供的函数);</p></li><li><p>库调用(程序库中的函数);</p></li><li><p>文件(例如&nbsp;/etc/passwd&nbsp;);</p></li><li><p>特殊文件(通常在&nbsp;/dev&nbsp;下);</p></li><li><p>游戏;</p></li><li><p>杂项(&nbsp;man(7)&nbsp;,groff(7)&nbsp;);</p></li><li><p>系统管理命令(通常只能被&nbsp;root&nbsp;用户使用);</p></li><li><p>内核子程序。</p></li></ol><p>输入 man + 数字 + 命令/函数,可以查到相关的命令和函数,若不加数字,&nbsp;man&nbsp;默认从数字较小的手册中寻找相关命令和函数</p><pre></pre><p>man 手册核心区域解析:(以&nbsp;man pwd&nbsp;为例)</p><pre></pre><p>man&nbsp;命令像新华词典一样可以查询到命令或函数的详细信息,但其实我们还有更加快捷的方式去查询,&nbsp;command --help&nbsp;或&nbsp;command -h&nbsp;,它没有&nbsp;man&nbsp;命令显示的那么详细,但是它更加易于阅读。</p><p>全局搜索一个正则表达式,并且打印到屏幕。简单来说就是,在文件中查找关键字,并显示关键字所在行。</p><pre></pre><ul><li><p>-i&nbsp;忽略大小写,&nbsp;grep -i path /etc/profile</p></li><li><p>-n&nbsp;显示行号,grep -n path /etc/profile</p></li><li><p>-v&nbsp;只显示搜索文本不在的那些行,grep -v path /etc/profile</p></li><li><p>-r&nbsp;递归查找,&nbsp;grep -r hello /etc&nbsp;,Linux 中还有一个 rgrep 命令,作用相当于&nbsp;grep -r</p></li></ul><p>grep&nbsp;可以配合正则表达式使用。</p><pre></pre><p>对文件的行进行排序。</p><pre></pre><p>为了演示方便,我们首先创建一个文件&nbsp;name.txt&nbsp;,放入以下内容:</p><pre></pre><p>执行&nbsp;sort name.txt&nbsp;命令,会对文本内容进行排序。</p><ul><li><p>-o&nbsp;将排序后的文件写入新文件,&nbsp;sort -o name_sorted.txt name.txt&nbsp;;</p></li><li><p>-r&nbsp;倒序排序,&nbsp;sort -r name.txt&nbsp;;</p></li><li><p>-R&nbsp;随机排序,&nbsp;sort -R name.txt&nbsp;;</p></li><li><p>-n&nbsp;对数字进行排序,默认是把数字识别成字符串的,因此 138 会排在 25 前面,如果添加了&nbsp;-n&nbsp;数字排序的话,则 25 会在 138 前面。</p></li></ul><p>word count&nbsp;的缩写,用于文件的统计。它可以统计单词数目、行数、字符数,字节数等。</p><pre></pre><pre></pre><ul><li><p>第一个13,表示行数;</p></li><li><p>第二个13,表示单词数;</p></li><li><p>第三个91,表示字节数。</p></li></ul><ul><li><p>-l&nbsp;只统计行数,&nbsp;wc -l name.txt&nbsp;;</p></li><li><p>-w&nbsp;只统计单词数,&nbsp;wc -w name.txt&nbsp;;</p></li><li><p>-c&nbsp;只统计字节数,&nbsp;wc -c name.txt&nbsp;;</p></li><li><p>-m&nbsp;只统计字符数,&nbsp;wc -m name.txt&nbsp;。</p></li></ul><p>删除文件中的重复内容。</p><pre></pre><p>【注意】它只能去除连续重复的行数。</p><ul><li><p>-c&nbsp;统计重复行数,&nbsp;uniq -c name.txt&nbsp;;</p></li><li><p>-d&nbsp;只显示重复的行数,&nbsp;uniq -d name.txt&nbsp;。</p></li></ul><p>剪切文件的一部分内容。</p><pre></pre><ul><li><p>-d&nbsp;用于指定用什么分隔符(比如逗号、分号、双引号等等)&nbsp;cut -d , name.txt&nbsp;;</p></li><li><p>-f&nbsp;表示剪切下用分隔符分割的哪一块或哪几块区域,&nbsp;cut -d , -f 1 name.txt&nbsp;。</p></li></ul><p>在&nbsp;Linux&nbsp;中一个命令的去向可以有3个地方:终端、文件、作为另外一个命令的入参。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGluPPtOjN2icRYEPjOcutvWDgA8O76uUIpmLSNSTS1QGoFGGSzXAtI5g/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>命令一般都是通过键盘输入,然后输出到终端、文件等地方,它的标准用语是&nbsp;stdin&nbsp;、&nbsp;stdout&nbsp;以及&nbsp;stderr&nbsp;。</p><ul><li><p>标准输入&nbsp;stdin&nbsp;,终端接收键盘输入的命令,会产生两种输出;</p></li><li><p>标准输出&nbsp;stdout&nbsp;,终端输出的信息(不包含错误信息);</p></li><li><p>标准错误输出&nbsp;stderr&nbsp;,终端输出的错误信息。</p></li></ul><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqG9Kr1eLEQpV03oz8iaErZk2vZasT2CxXOstfEZTlUKXkeYiaiaia3VNM15w/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>把本来要显示在终端的命令结果,输送到别的地方(到文件中或者作为其他命令的输入)。</p><p>&gt;&nbsp;表示重定向到新的文件,&nbsp;cut -d , -f 1 notes.csv &gt; name.csv&nbsp;,它表示通过逗号剪切&nbsp;notes.csv&nbsp;文件(剪切完有3个部分)获取第一个部分,重定向到&nbsp;name.csv&nbsp;文件。</p><p>我们来看一个具体示例,学习它的使用,假设我们有一个文件&nbsp;notes.csv&nbsp;,文件内容如下:</p><pre></pre><p>执行命令:&nbsp;cut -d , -f 1 notes.csv &gt; name.csv&nbsp;最后输出如下内容:</p><pre></pre><p>【注意】使用&nbsp;&gt;&nbsp;要注意,如果输出的文件不存在它会新建一个,如果输出的文件已经存在,则会覆盖。因此执行这个操作要非常小心,以免覆盖其它重要文件。</p><p>表示重定向到文件末尾,因此它不会像&nbsp;&gt;&nbsp;命令这么危险,它是追加到文件的末尾(当然如果文件不存在,也会被创建)。</p><p>再次执行&nbsp;cut -d , -f 1 notes.csv &gt;&gt; name.csv&nbsp;,则会把名字追加到&nbsp;name.csv&nbsp;里面。</p><pre></pre><p>我们平时读的&nbsp;log&nbsp;日志文件其实都是用这个命令输出的。</p><p>标准错误输出</p><pre></pre><ul><li><p>当我们&nbsp;cat&nbsp;一个文件时,会把文件内容打印到屏幕上,这个是标准输出;</p></li><li><p>当使用了&nbsp;&gt; res.txt&nbsp;时,则不会打印到屏幕,会把标准输出写入文件&nbsp;res.txt&nbsp;文件中;</p></li><li><p>2&gt; errors.log&nbsp;当发生错误时会写入&nbsp;errors.log&nbsp;文件中。</p></li></ul><p>标准错误输出(追加到文件末尾)同&nbsp;&gt;&gt;&nbsp;相似。</p><p>标准输出和标准错误输出都重定向都一个地方</p><pre></pre><p>目前为止,我们接触的命令的输入都来自命令的参数,其实命令的输入还可以来自文件或者键盘的输入。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGZmUotia5jbsYhJ7Kia5dc8E2zdo3Q5u0RQzmAFibfPBljkYj6kTBCiaxxw/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>&lt;&nbsp;符号用于指定命令的输入。</p><pre></pre><p>虽然它的运行结果与&nbsp;cat name.csv&nbsp;一样,但是它们的原理却完全不同。</p><ul><li><p>cat name.csv&nbsp;表示&nbsp;cat&nbsp;命令接收的输入是&nbsp;notes.csv&nbsp;文件名,那么要先打开这个文件,然后打印出文件内容。</p></li><li><p>cat &lt; name.csv&nbsp;表示&nbsp;cat&nbsp;命令接收的输入直接是&nbsp;notes.csv&nbsp;这个文件的内容,&nbsp;cat&nbsp;命令只负责将其内容打印,打开文件并将文件内容传递给&nbsp;cat&nbsp;命令的工作则交给终端完成。</p></li></ul><p>将键盘的输入重定向为某个命令的输入。</p><pre></pre><p>把两个命令连起来使用,一个命令的输出作为另外一个命令的输入,英文是&nbsp;pipeline&nbsp;,可以想象一个个水管连接起来,管道算是重定向流的一种。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGlcvET7Nhnut1ib8mVqRLUXJDMlLGxyrx0fhG8icPiaia4TIsWgibmw4icLOQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>举几个实际用法案例:</p><pre></pre><p>流并非一个命令,在计算机科学中,流&nbsp;stream&nbsp;的含义是比较难理解的,记住一点即可:「流就是读一点数据, 处理一点点数据。其中数据一般就是二进制格式。」&nbsp;上面提及的重定向或管道,就是把数据当做流去运转的。</p><p>到此我们就接触了,流、重定向、管道等&nbsp;Linux&nbsp;高级概念及指令。其实你会发现关于流和管道在其它语言中也有广泛的应用。&nbsp;Angular&nbsp;中的模板语法中可以使用管道。&nbsp;Node.js&nbsp;中也有&nbsp;stream&nbsp;流的概念。</p><p>在&nbsp;Windows&nbsp;中通过&nbsp;Ctrl + Alt + Delete&nbsp;快捷键查看软件进程。</p><p>帮助我们快速了解系统中目前有哪些用户登录着,以及他们在干什么。</p><pre></pre><p>用于显示当前系统中的进程,&nbsp;ps&nbsp;命令显示的进程列表不会随时间而更新,是静态的,是运行&nbsp;ps&nbsp;命令那个时刻的状态或者说是一个进程快照。</p><pre></pre><ul><li><p>-ef&nbsp;列出所有进程;</p></li><li><p>-efH&nbsp;以乔木状列举出所有进程;</p></li><li><p>-u&nbsp;列出此用户运行的进程;</p></li><li><p>-aux&nbsp;通过&nbsp;CPU&nbsp;和内存使用来过滤进程&nbsp;ps -aux | less&nbsp;;</p></li><li><p>-aux --sort -pcpu&nbsp;按&nbsp;CPU&nbsp;使用降序排列,&nbsp;-aux --sort -pmem&nbsp;表示按内存使用降序排列;</p></li><li><p>-axjf&nbsp;以树形结构显示进程,&nbsp;ps -axjf&nbsp;它和&nbsp;pstree&nbsp;效果类似。</p></li></ul><p>获取进程的动态列表。</p><pre></pre><ul><li><p>top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07&nbsp;相当&nbsp;w&nbsp;命令的第一行的信息。</p></li><li><p>展示的这些进程是按照使用处理器&nbsp;%CPU&nbsp;的使用率来排序的。</p></li></ul><p>结束一个进程,&nbsp;kill + PID&nbsp;。</p><pre></pre><p>主要是切换进程的状态。我们先了解下&nbsp;Linux&nbsp;下进程的五种状态:</p><ol><li><p>状态码&nbsp;R&nbsp;:表示正在运行的状态;</p></li><li><p>状态码&nbsp;S&nbsp;:表示中断(休眠中,受阻,当某个条件形成后或接受到信号时,则脱离该状态);</p></li><li><p>状态码&nbsp;D&nbsp;:表示不可中断(进程不响应系统异步信号,即使用kill命令也不能使其中断);</p></li><li><p>状态码&nbsp;Z&nbsp;:表示僵死(进程已终止,但进程描述符依然存在,直到父进程调用&nbsp;wait4()&nbsp;系统函数后将进程释放);</p></li><li><p>状态码&nbsp;T&nbsp;:表示停止(进程收到&nbsp;SIGSTOP&nbsp;、&nbsp;SIGSTP&nbsp;、&nbsp;SIGTIN&nbsp;、&nbsp;SIGTOU&nbsp;等停止信号后停止运行)。</p></li></ol><p>默认情况下,用户创建的进程都是前台进程,前台进程从键盘读取数据,并把处理结果输出到显示器。例如运行&nbsp;top&nbsp;命令,这就是一个一直运行的前台进程。</p><p>后台进程的优点是不必等待程序运行结束,就可以输入其它命令。在需要执行的命令后面添加&nbsp;&amp;&nbsp;符号,就表示启动一个后台进程。</p><p>启动后台进程,它的缺点是后台进程与终端相关联,一旦关闭终端,进程就自动结束了。</p><pre></pre><p>使进程不受挂断(关闭终端等动作)的影响。</p><pre></pre><p>nohup&nbsp;命令也可以和&nbsp;&amp;&nbsp;结合使用。</p><pre></pre><p>使一个“后台暂停运行”的进程,状态改为“后台运行”。</p><pre></pre><p>实际案例1:</p><pre></pre><p>实际案例2:</p><pre></pre><p>显示当前终端后台进程状态。</p><pre></pre><p>fg&nbsp;使进程转为前台运行,用法和&nbsp;bg&nbsp;命令类似。</p><p>我们用一张图来表示前后台进程切换:</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqG07TnVe1JUaV2wCHabgAT4yce1CYeJGibc3z2LuoRVAiaaR2dDKnxEZdQ/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>我们可以使程序在后台运行,成为后台进程,这样在当前终端中我们就可以做其他事情了,而不必等待此进程运行结束。</p><p>一个运行起来的程序被称为进程。在&nbsp;Linux&nbsp;中有些进程是特殊的,它不与任何进程关联,不论用户的身份如何,都在后台运行,这些进程的父进程是&nbsp;PID&nbsp;为1的进程,&nbsp;PID&nbsp;为1的进程只在系统关闭时才会被销毁。它们会在后台一直运行等待分配工作。我们将这类进程称之为守护进程&nbsp;daemon&nbsp;。</p><p>守护进程的名字通常会在最后有一个&nbsp;d&nbsp;,表示&nbsp;daemon&nbsp;守护的意思,例如&nbsp;systemd&nbsp;、httpd&nbsp;。</p><p>systemd&nbsp;是一个&nbsp;Linux&nbsp;系统基础组件的集合,提供了一个系统和服务管理器,运行为&nbsp;PID 1&nbsp;并负责启动其它程序。</p><pre></pre><p>通过命令也可以看到&nbsp;PID&nbsp;为1的进程就是&nbsp;systemd&nbsp;的系统进程。</p><p>systemd&nbsp;常用命令(它是一组命令的集合):</p><pre></pre><ul><li><p>打包:是将多个文件变成一个总的文件,它的学名叫存档、归档。</p></li><li><p>压缩:是将一个大文件(通常指归档)压缩变成一个小文件。</p></li></ul><p>我们常常使用&nbsp;tar&nbsp;将多个文件归档为一个总的文件,称为&nbsp;archive&nbsp;。然后用&nbsp;gzip&nbsp;或&nbsp;bzip2&nbsp;命令将&nbsp;archive&nbsp;压缩为更小的文件。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGKxCPVLVgUQyX0zuEsNQtb2A2ZX57icyq71YSTibhAWkVzBu0LX5Y6WkA/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>创建一个&nbsp;tar&nbsp;归档。</p><pre></pre><ul><li><p>-cvf&nbsp;表示&nbsp;create(创建)+&nbsp;verbose(细节)+&nbsp;file(文件),创建归档文件并显示操作细节;</p></li><li><p>-tf&nbsp;显示归档里的内容,并不解开归档;</p></li><li><p>-rvf&nbsp;追加文件到归档,&nbsp;tar -rvf archive.tar file.txt&nbsp;;</p></li><li><p>-xvf&nbsp;解开归档,&nbsp;tar -xvf archive.tar&nbsp;。</p></li></ul><p>“压缩/解压”归档,默认用&nbsp;gzip&nbsp;命令,压缩后的文件后缀名为&nbsp;.tar.gz&nbsp;。</p><pre></pre><p>可以用&nbsp;tar&nbsp;命令同时完成归档和压缩的操作,就是给&nbsp;tar&nbsp;命令多加一个选项参数,使之完成归档操作后,还是调用&nbsp;gzip&nbsp;或&nbsp;bzip2&nbsp;命令来完成压缩操作。</p><pre></pre><p>之前讲过使用&nbsp;cat less more&nbsp;可以查看文件内容,但是压缩文件的内容是不能使用这些命令进行查看的,而要使用&nbsp;zcat、zless、zmore&nbsp;进行查看。</p><pre></pre><p>“压缩/解压”&nbsp;zip&nbsp;文件(&nbsp;zip&nbsp;压缩文件一般来自&nbsp;windows&nbsp;操作系统)。</p><pre></pre><pre></pre><p>之前我们学会了使用&nbsp;yum&nbsp;命令进行软件安装,如果碰到&nbsp;yum&nbsp;仓库中没有的软件,我们就需要会更高级的软件安装“源码编译安装”。</p><p>简单来说,编译就是将程序的源代码转换成可执行文件的过程。大多数&nbsp;Linux&nbsp;的程序都是开放源码的,可以编译成适合我们的电脑和操纵系统属性的可执行文件。</p><p>基本步骤如下:</p><ol><li><p>下载源代码</p></li><li><p>解压压缩包</p></li><li><p>配置</p></li><li><p>编译</p></li><li><p>安装</p></li></ol><p>我们来编译安装&nbsp;htop&nbsp;软件,首先在它的官网下载源码:</p><blockquote><p>❝</p><p>https://bintray.com/htop/source/htop#files</p><p>❞</p></blockquote><p>下载好的源码在本机电脑上使用如下命令同步到服务器上:</p><pre></pre><p>也可以使用&nbsp;wegt&nbsp;进行下载:</p><pre></pre><pre></pre><p>执行&nbsp;http://blog.chinaaet.com/Yklinuxzlzj06/p/configure&nbsp;,它会分析你的电脑去确认编译所需的工具是否都已经安装了。</p><p>执行&nbsp;make&nbsp;命令</p><p>执行&nbsp;make install&nbsp;命令,安装完成后执行&nbsp;ls /usr/local/bin/&nbsp;查看是否有&nbsp;htop&nbsp;命令。如果有就可以执行&nbsp;htop&nbsp;命令查看系统进程了。</p><p>查看&nbsp;ip&nbsp;网络相关信息,如果命令不存在的话, 执行命令&nbsp;yum install net-tools&nbsp;安装。</p><pre></pre><p>参数解析:</p><ul><li><p>eth0&nbsp;对应有线连接(对应你的有线网卡),就是用网线来连接的上网。&nbsp;eth&nbsp;是&nbsp;Ethernet&nbsp;的缩写,表示“以太网”。有些电脑可能同时有好几条网线连着,例如服务器,那么除了&nbsp;eht0&nbsp;,你还会看到&nbsp;eth1&nbsp;、&nbsp;eth2&nbsp;等。</p></li><li><p>lo&nbsp;表示本地回环(&nbsp;Local Loopback&nbsp;的缩写,对应一个虚拟网卡)可以看到它的&nbsp;ip&nbsp;地址是&nbsp;127.0.0.1&nbsp;。每台电脑都应该有这个接口,因为它对应着“连向自己的链接”。这也是被称之为“本地回环”的原因。所有经由这个接口发送的东西都会回到你自己的电脑。看起来好像并没有什么用,但有时为了某些缘故,我们需要连接自己。例如用来测试一个网络程序,但又不想让局域网或外网的用户查看,只能在此台主机上运行和查看所有的网络接口。例如在我们启动一个前端工程时,在浏览器输入&nbsp;127.0.0.1:3000&nbsp;启动项目就能查看到自己的&nbsp;web&nbsp;网站,并且它只有你能看到。</p></li><li><p>wlan0&nbsp;表示无线局域网(上面案例并未展示)。</p></li></ul><p>ip&nbsp;地址和主机名的互相转换。</p><pre></pre><pre></pre><p>通过非对称加密以及对称加密的方式(同&nbsp;HTTPS&nbsp;安全连接原理相似)连接到远端服务器。</p><pre></pre><p>config&nbsp;文件可以配置&nbsp;ssh&nbsp;,方便批量管理多个&nbsp;ssh&nbsp;连接。</p><p>配置文件分为以下几种:</p><ul><li><p>全局&nbsp;ssh&nbsp;服务端的配置:&nbsp;/etc/ssh/sshd_config&nbsp;;</p></li><li><p>全局&nbsp;ssh&nbsp;客户端的配置:&nbsp;/etc/ssh/ssh_config(很少修改);</p></li><li><p>当前用户&nbsp;ssh&nbsp;客户端的配置:&nbsp;~/.ssh/config&nbsp;。</p></li></ul><p>【服务端&nbsp;config&nbsp;文件的常用配置参数】</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqGK0PnDTheQVAG4Y5Df2hqgLltwn07luKbiam2YTgV1lm15nWibRzMpM7A/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><blockquote><p>❝</p><p>[注意] 修改完服务端配置文件需要重启服务&nbsp;systemctl restart sshd</p><p>❞</p></blockquote><p>【客户端&nbsp;config&nbsp;文件的常用配置参数】</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqG2NVvP8JK9ymqEgTDMwC3mP10VkkGPJBY5CR1q3dSeVbMVOwkAEiaA/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>配置当前用户的&nbsp;config&nbsp;:</p><pre></pre><p>这样配置完成后,下次登录时,可以这样登录&nbsp;ssh lion&nbsp;会自动识别为&nbsp;root&nbsp;用户。</p><blockquote><p>❝</p><p>[注意] 这段配置不是在服务器上,而是你自己的机器上,它仅仅是设置了一个别名。</p><p>❞</p></blockquote><p>ssh&nbsp;登录分两种,一种是基于口令(账号密码),另外一种是基于密钥的方式。</p><p>基于口令,就是每次登录输入账号和密码,显然这样做是比较麻烦的,今天主要学习如何基于密钥实现免密登录。</p><p>客户机生成密钥对(公钥和私钥),把公钥上传到服务器,每次登录会与服务器的公钥进行比较,这种验证登录的方法更加安全,也被称为“公钥验证登录”。</p><p>1、在客户机中生成密钥对(公钥和私钥)&nbsp;ssh-keygen(默认使用 RSA 非对称加密算法)</p><p>运行完&nbsp;ssh-keygen&nbsp;会在&nbsp;~/.ssh/&nbsp;目录下,生成两个文件:</p><ul><li><p>id_rsa.pub&nbsp;:公钥</p></li><li><p>id_rsa&nbsp;:私钥</p></li></ul><p>2、把客户机的公钥传送到服务</p><p>执行&nbsp;ssh-copy-id root@172.x.x.x(ssh-copy-id&nbsp;它会把客户机的公钥追加到服务器&nbsp;~/.ssh/authorized_keys&nbsp;的文件中)。</p><p>执行完成后,运行&nbsp;ssh root@172.x.x.x&nbsp;就可以实现免密登录服务器了。</p><p>配合上面设置好的别名,直接执行&nbsp;ssh lion&nbsp;就可以登录,是不是非常方便。</p><p>可以使我们直接从终端控制台下载文件,只需要给出文件的HTTP或FTP地址。</p><pre></pre><p>wget&nbsp;非常稳定,如果是由于网络原因下载失败,&nbsp;wget&nbsp;会不断尝试,直到整个文件下载完毕。</p><ul><li><p>-c&nbsp;继续中断的下载。</p></li></ul><p>它是&nbsp;Secure Copy&nbsp;的缩写,表示安全拷贝。&nbsp;scp&nbsp;可以使我们通过网络,把文件从一台电脑拷贝到另一台电脑。</p><p>scp&nbsp;是基于&nbsp;ssh&nbsp;的原理来运作的,&nbsp;ssh&nbsp;会在两台通过网络连接的电脑之间创建一条安全通信的管道,&nbsp;scp&nbsp;就利用这条管道安全地拷贝文件。</p><pre></pre><p>其中&nbsp;source_file&nbsp;和&nbsp;destination_file&nbsp;都可以这样表示:&nbsp;user@ip:file_name&nbsp;,&nbsp;user&nbsp;是登录名,&nbsp;ip&nbsp;是域名或&nbsp;ip&nbsp;地址。&nbsp;file_name&nbsp;是文件路径。</p><pre></pre><p>rsync&nbsp;命令主要用于远程同步文件。它可以同步两个目录,不管它们是否处于同一台电脑。它应该是最常用于“增量备份”的命令了。它就是智能版的&nbsp;scp&nbsp;命令。</p><pre></pre><pre></pre><ul><li><p>-a&nbsp;保留文件的所有信息,包括权限,修改日期等;</p></li><li><p>-r&nbsp;递归调用,表示子目录的所有文件也都包括;</p></li><li><p>-v&nbsp;冗余模式,输出详细操作信息。</p></li></ul><p>默认地,&nbsp;rsync&nbsp;在同步时并不会删除目标目录的文件,例如你在源目录中删除一个文件,但是用&nbsp;rsync&nbsp;同步时,它并不会删除同步目录中的相同文件。如果向删除也可以这么做:&nbsp;rsync -arv --delete Images/ backups/&nbsp;。</p><p>关闭系统,需要&nbsp;root&nbsp;身份。</p><pre></pre><p>重启系统,需要&nbsp;root&nbsp;身份。</p><pre></pre><p>直接运行即可关机,不需要&nbsp;root&nbsp;身份。</p><p>Vim&nbsp;是从&nbsp;vi&nbsp;发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和&nbsp;Emacs&nbsp;并列成为类&nbsp;Unix&nbsp;系统用户最喜欢的编辑器。</p><ul><li><p>交互模式</p></li><li><p>插入模式</p></li><li><p>命令模式</p></li><li><p>可视模式</p></li></ul><p>也成为正常模式,这是&nbsp;Vim&nbsp;的默认模式,每次运行&nbsp;Vim&nbsp;程序的时候,就会进入这个模式。</p><p>例如执行&nbsp;vim name.txt&nbsp;则会进入交互模式。</p><p>交互模式特征:</p><ul><li><p>在这个模式下,你不能输入文本;</p></li><li><p>它可以让我们在文本间移动,删除一行文本,复制黏贴文本,跳转到指定行,撤销操作,等等。</p></li></ul><p>这个模式是我们熟悉的文本编辑器的模式,就是可以输入任何你想输入的内容。进入这个模式有几种方法,最常用的方法是按字母键&nbsp;i&nbsp;(&nbsp;i、I、a、A、o、O&nbsp;都可以进入插入模式,只是所处的位置不同),退出这种模式,只需要按下&nbsp;Esc&nbsp;键。</p><ul><li><p>i, I&nbsp;进入输入模式&nbsp;Insert mode&nbsp;:&nbsp;i&nbsp;为“从目前光标所在处输入”,&nbsp;I&nbsp;为“在目前所在行的第一个非空格符处开始输入”;</p></li><li><p>a, A&nbsp;进入输入模式&nbsp;Insert mode&nbsp;:&nbsp;a&nbsp;为“从目前光标所在的下一个字符处开始输入”,&nbsp;A&nbsp;为“从光标所在行的最后一个字符处开始输入”;</p></li><li><p>o, O&nbsp;进入输入模式&nbsp;Insert mode&nbsp;:&nbsp;o&nbsp;为“在目前光标所在的下一行处输入新的一行”;&nbsp;O&nbsp;为在目前光标所在处的上一行输入新的一行。</p></li></ul><p>命令模式也称为底线命令模式,这个模式下可以运行一些命令例如“退出”,“保存”,等动作。</p><p>也可以用这个模式来激活一些&nbsp;Vim&nbsp;配置,例如语法高亮,显示行号,等。甚至还可以发送一些命令给终端命令行,例如&nbsp;ls、cp&nbsp;。</p><p>为了进入命令模式,首先要进入交互模式,再按下冒号键。</p><p>用一张图表示三种模式如何切换:</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/icRxcMBeJfcicKhibkjEZIcArlQuW3u4ibqG5a5VicZXF93J3oheq73Ime7Eibic7yb5mpl158CCa8kia7kn3H9C7HQw4A/640?wx_fmt=jpeg&amp;tp=wxpic&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><br></p><p>在终端命令行中输入&nbsp;vim&nbsp;回车后&nbsp;Vim&nbsp;就会被运行起来,也可以用&nbsp;Vim&nbsp;来打开一个文件,只需要在&nbsp;vim&nbsp;后面再加文件名。如&nbsp;vim file.name&nbsp;,如果文件不存在,那么会被创建。</p><p>进入文件之后,此时处于交互模式,可以通过输入&nbsp;i&nbsp;进入插入模式。</p><p>在&nbsp;Vim&nbsp;的交互模式下,我们可以在文本中移动光标。</p><ul><li><p>h&nbsp;向左移动一个字符</p></li><li><p>j&nbsp;向下移动一个字符</p></li><li><p>k&nbsp;向上移动一个字符</p></li><li><p>i&nbsp;向右移动一个字符</p></li></ul><p>当然也可以使用四个方向键进行移动,效果是一样的。</p><ul><li><p>「行首:」&nbsp;在交互模式下,为了将光标定位到一行的开始位置,只需要按下数字键&nbsp;0&nbsp;即可,键盘上的&nbsp;Home&nbsp;键也有相同效果。</p></li><li><p>「行末:」&nbsp;在交互模式下,为了将光标定位到一行的末尾,只需要按下美元符号键&nbsp;$&nbsp;即可,键盘上的&nbsp;End&nbsp;键也有相同效果。</p></li></ul><p>在交互模式下,按字母键&nbsp;w&nbsp;可以一个单词一个单词的移动。</p><p>在交互模式下,按下冒号键&nbsp;:&nbsp;进入命令模式,再按下&nbsp;q&nbsp;键,就可以退出了。</p><p>如果在退出之前又修改了文件,就直接想用&nbsp;:q&nbsp;退出&nbsp;Vim&nbsp;,那么&nbsp;Vim&nbsp;会显示一个红字标明错误信息。此时我们有两个选择:</p><ol><li><p>保存并退出&nbsp;:wq&nbsp;或&nbsp;:x&nbsp;;</p></li><li><p>不保存且退出&nbsp;:q!&nbsp;。</p></li></ol><p>在交互模式下,将光标定位到一个你想要删除的字符上,按下字母键&nbsp;x&nbsp;你会发现这个字符被删除了。</p><p>也可以一次性删除多个字符,只需要在按&nbsp;x&nbsp;键之前输入数字即可。</p><ul><li><p>「删除一行」:连按两次&nbsp;d&nbsp;来删除光标所在的那一行。</p></li><li><p>「删除多行」:例如先输入数字&nbsp;2&nbsp;,再按下&nbsp;dd&nbsp;,就会删除从光标所在行开始的两行。</p></li><li><p>「删除一个单词」:将光标置于一个单词的首字母处,然后按下&nbsp;dw&nbsp;。</p></li><li><p>「删除多个单词」:例如先按数字键&nbsp;2&nbsp;再按&nbsp;dw&nbsp;就可以删除两个单词了。</p></li><li><p>「从光标所在位置删除至行首」:&nbsp;d0&nbsp;。</p></li><li><p>「从光标所在位置删除至行末」:&nbsp;d$&nbsp;。</p></li></ul><ul><li><p>「复制行」:按两次&nbsp;y&nbsp;会把光标所在行复制到内存中,和&nbsp;dd&nbsp;类似,&nbsp;dd&nbsp;用于“剪切”光标所在行。</p></li><li><p>「复制单词」:&nbsp;yw&nbsp;会复制一个单词。</p></li><li><p>「复制到行末」:&nbsp;y$&nbsp;是复制从光标所在处到行末的所有字符。</p></li><li><p>「复制到行首」:&nbsp;y0&nbsp;是复制光标所在处到行首的所有字符。</p></li></ul><p>如果之前用&nbsp;dd&nbsp;或者&nbsp;yy&nbsp;剪切复制过来的,可以使用&nbsp;p&nbsp;来粘贴。同样也可以使用&nbsp;数字+p&nbsp;来表示复制多次。</p><p>在交互模式下,将光标置于想要替换的字符上。按下&nbsp;r&nbsp;键,接着输入你要替换的字符即可。</p><p>如果要撤销最近的修改,只需要按下&nbsp;u&nbsp;键,如果想要撤销最近四次修改,可以按下4,再按下&nbsp;u&nbsp;。</p><p>取消撤销,也就是重做之前的修改使用&nbsp;ctrl + r&nbsp;。</p><p>Vim&nbsp;编辑的文件中,每一行都有一个行号,行号从1开始,逐一递增。</p><p>行号默认是不显示,如果需要它显示的话,可以进入命令模式,然后输入&nbsp;set nu&nbsp;,如果要隐藏行号的话,使用&nbsp;set nonu&nbsp;。</p><ul><li><p>跳转到指定行:&nbsp;数字+gg&nbsp;,例如&nbsp;7gg&nbsp;,表示跳转到第7行。</p></li><li><p>要跳转到最后一行,按下&nbsp;G&nbsp;。</p></li><li><p>要跳转到第一行,按下&nbsp;gg&nbsp;。</p></li></ul><p>处于交互模式下,按下&nbsp;/&nbsp;键,那么就进入查找模式,输入你要查找的字符串,然后按下回车。光标就会跳转到文件中下一个查找到的匹配处。如果字符串不存在,那么会显示&nbsp;"pattern not found"&nbsp;。</p><ul><li><p>n&nbsp;跳转到下一个匹配项;</p></li><li><p>N&nbsp;跳转到上一个匹配项。</p></li></ul><blockquote><p>❝</p><p>[注意] 用斜杠来进行的查找是从当前光标处开始向文件尾搜索,如果你要从当前光标处开始,向文件头搜索则使用&nbsp;?&nbsp;,当然也可以先按下&nbsp;gg&nbsp;跳转到第一行在进行全文搜索。</p><p>❞</p></blockquote><p>替换光标所在行第一个匹配的字符串:</p><pre></pre><p>替换光标所在行所有旧字符串为新字符串:</p><pre></pre><p>替换第几行到第几行中所有字符串:</p><pre></pre><p>最常用的就是全文替换了:</p><pre></pre><p>可以用冒号&nbsp;+r&nbsp;(&nbsp;:r&nbsp;) 实现在光标处插入一个文件的内容。</p><pre></pre><p>Vim&nbsp;有一个特别便捷的功能那就是分屏,可以同时打开好几个文件,分屏之后,屏幕每一块被称为一个&nbsp;viewport&nbsp;,表示“视口”。</p><ul><li><p>横向分屏&nbsp;:sp 文件名</p></li><li><p>垂直分屏&nbsp;:vsp 文件名</p></li></ul><ul><li><p>Ctrl + w&nbsp;再加&nbsp;Ctrl + w&nbsp;,表示从一个&nbsp;viewport&nbsp;移动光标到另外一个&nbsp;viewport&nbsp;;</p></li><li><p>Ctrl + w&nbsp;再加 “方向键”,就可以移动到这个方向所处的下一个视口了;</p></li><li><p>Ctrl + w&nbsp;再加&nbsp;+&nbsp;号,表示扩大当前视口;</p></li><li><p>Ctrl + w&nbsp;再加&nbsp;-&nbsp;号,表示缩小当前视口;</p></li><li><p>Ctrl + w&nbsp;再加&nbsp;=&nbsp;号,表示平均当前视口;</p></li><li><p>Ctrl + w&nbsp;再加&nbsp;r&nbsp;键,会反向调换视口位置;</p></li><li><p>Ctrl + w&nbsp;再加&nbsp;q&nbsp;键,会关闭当前视口;</p></li><li><p>Ctrl + w&nbsp;再加&nbsp;o&nbsp;键,会关闭除当前视口以外的所有视口;</p></li></ul><p>在&nbsp;Vim&nbsp;中可以运行一些终端命令,只要先输入&nbsp;:!&nbsp;,然后接命令名称。</p><p>例如:</p><pre></pre><p>前面只讲了&nbsp;Vim&nbsp;的三种模式,其实还有一种模式叫做可视模式。</p><p>进入它的三种方式(都是从交互模式开始):</p><ul><li><p>v&nbsp;字符可视模式,进入后配合方向键选中字符后,然后再按&nbsp;d&nbsp;键可以删除选中。</p></li><li><p>V&nbsp;行可视模式,进入后光标所在行默认被选中,然后再按&nbsp;d&nbsp;键可以删除所在行。</p></li><li><p>Ctrl + v&nbsp;块可视模式,它是可视模式最有用的功能了,配合&nbsp;d&nbsp;和&nbsp;I&nbsp;键可以实现删除选中的内容和插入内容。</p></li></ul><p>同时选中多行,并在选中行头部插入内容的具体操作步骤:</p><ol><li><p>ctrl + v&nbsp;进入块可视模式</p></li><li><p>使用方向键进行选中(上下左右)假设选中5行</p></li><li><p>输入&nbsp;I&nbsp;键进行多行同时插入操作</p></li><li><p>插入完成后连续按两下&nbsp;esc&nbsp;键,实现多行同时插入相同字符</p></li></ol><p>进入可视模式之后的操作键:</p><ul><li><p>d&nbsp;键,表示删除选中;</p></li><li><p>I&nbsp;键,表示在选中之前插入;</p></li><li><p>u&nbsp;键,表示选中变为小写;</p></li><li><p>U&nbsp;键,表示选中变为大写;</p></li></ul><p>在&nbsp;Vim&nbsp;被启动后,可以运行一些指令来激活一些选项参数,但是这些选项参数的配置在退出&nbsp;Vim&nbsp;时会被忘记,例如前面讲解的激活行号。如果希望所在的配置是永久性的,那么需要在家目录(&nbsp;cd ~&nbsp;)创建一个&nbsp;Vim&nbsp;的配置文件&nbsp;.vimrc&nbsp;。</p><pre></pre><p>Vim&nbsp;配置非常丰富,我们可以通过个性化配置把&nbsp;Vim&nbsp;打造成属于自己的&nbsp;IDE&nbsp;等等。在&nbsp;github&nbsp;上也可以搜索到一些强大的&nbsp;Vim&nbsp;配置文件。</p><p>相信通过本文的学习,你应该会对&nbsp;Linux&nbsp;有一个更加全面的认识。</p><p><br></p> 

讯享网
小讯
上一篇 2025-06-01 09:54
下一篇 2025-04-30 16:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/190797.html