尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Linux(一)Linux的基本指令操作和shell命令以及运行原理

Linux(一)Linux的基本指令操作和shell命令以及运行原理 1. 引言在正式学习 Linux 指令之前先花几分钟了解一下 Linux 的来龙去脉会帮助你更好地理解为什么指令是这样设计的、为什么系统是这样组织的。这一节作为「前传」只讲最核心的背景知识不涉及具体指令操作。2. 什么是 LinuxLinux 是一个开源的操作系统内核最初由芬兰人林纳斯·托瓦兹Linus Torvalds于 1991 年发布。我们平时说的「Linux 系统」实际上是 Linux 内核加上 GNU 工具集、各种应用软件共同组成的完整操作系统通常称为 GNU/Linux。简单来说内核是操作系统的核心负责管理硬件资源CPU、内存、磁盘、网络等并为上层应用提供接口。你敲下的每一条指令最终都要经过内核来调度硬件完成工作。3. 从 Unix 说起Linux 的诞生离不开 Unix。Unix 是 20 世纪 70 年代由贝尔实验室开发的多用户、多任务操作系统它奠定了现代操作系统的许多基础设计一切皆文件设备、进程、网络等都被抽象成文件统一用文件操作的方式管理。多用户多任务多个用户可以同时登录使用系统按权限隔离。模块化设计系统由许多小工具组成每个工具只做好一件事再通过管道组合完成复杂任务。Unix 后来分化出多个商业版本如 BSD、System V但因其闭源、昂贵普通人难以接触。这为 Linux 的出现埋下了伏笔。4. Linux 的诞生1991 年还在赫尔辛基大学读书的林纳斯·托瓦兹出于学习和兴趣编写了一个能在个人电脑上运行的小型内核并把它发布到网上命名为 Linux。他采用了 GNU 通用公共许可证GPL允许任何人自由使用、修改和分发源代码。这一决定引爆了开源运动。全球的开发者共同参与改进Linux 迅速成长为一个稳定、强大、免费的操作系统并逐渐从服务器走向桌面、嵌入式设备、手机Android 内核基于 Linux乃至超级计算机。5. Linux 的主要特点开源免费源代码公开可自由修改和分发成本低。稳定可靠长时间运行不易崩溃广泛用于服务器。安全权限管理严格多用户隔离病毒相对较少。多用户多任务支持多人同时使用任务并发处理。强大的命令行通过 Shell 可以高效地完成各种操作这也是本系列要重点讲解的内容。丰富的软件生态通过包管理器可以方便地安装、更新软件。6. 常见发行版Linux 内核本身不直接面向普通用户而是由各个发行版Distribution打包成完整可用的系统。常见的发行版有Ubuntu界面友好适合新手社区活跃。CentOS / Rocky Linux稳定常用于服务器。Debian稳定、自由是许多发行版的基础。Fedora较新技术前沿。Kali Linux面向安全测试。不同发行版在指令上大同小异核心指令基本通用因此学会一套换发行版也能很快上手。7. 为什么先学指令图形界面虽然直观但指令命令行才是 Linux 的灵魂指令更高效批量操作、自动化脚本都依赖它。服务器通常没有图形界面只能通过命令行远程管理。理解指令能帮助你深入理解系统的工作原理。接下来的内容我们将从最基础的指令开始一步步带你掌握 Linux 的常用操作。8、Linux基本指令1、ls指令语法ls [选项] [目录或文件]功能对于⽬录该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件将列出⽂件名以及其他信息。我们在这里使用的是超级用户root当我们输入ls的时候就可以看到我们在这个root目录下面的所有目录包括文件我们可以看到里面包括一个目录113和一个普通文件test.c补充ls-l列出⽂件的详细信息我们在后续多使用ll,ls -l的别名就是ll注意指令和后面的选项要有空格在这里我们输入了ls -l就可以看到列表当中更详细的信息 比如占多少字节以及创建的时间等等不单单只有目录或文件的名称。2、pwd命令语法: pwd功能显⽰⽤⼾当前所在的⽬录这里pwd简单来说就是我当前处在那个目录下面很好理解3、cd 指令语法:cd ⽬录名功能改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下我们可以看到一开始我们在root路径下当我们ls之后发现里面有一个113目录我们可以直接cd 113就直接进入到了113的目录下面此时我们pwd就可以直接看出我们目前所处的目录就是113的目录。补充cd 只能跟目录名不能跟普通文件与此同时我们cd 目录这里的目录可以是绝对路径也可以是相对路径这里我们既可以cd /root/113,也可以直接cd 113都是可以的。并且在介绍一下cd .和cd …比如我们在113这个目录里的某个文件当中当我们cd .就直接从某个文件返回到113这个目录下而此时当我们处在113这个目录下之后如果我们想返回上一个目录我们就可以cd …就返回到/root根目录下面当然如果我们想直接返回/root家目录我们可以直接cd ~就直接返回到家目录就不用一步一步的返回上一个目录.4、touch 指令语法touch [选项]…文件…功能touch命令参数可更改⽂档或⽬录的⽇期时间包括存取时间和更改时间或者新建⼀个不存在的⽂件。假如我们现在只有113这个处在/root家目录下的子目录如果我们想在这个113目录下新建一个普通文件此时我们就可以使用touch 文件我们可以看到我们首先cd进入113这个目录下面此时这个目录下面没有任何文件此时我们touch 一个新的文件此时我们可以看到此时113这个目录下面就存在一个新的文件test1.c5、mkdir 指令语法mkdir [选项]…dirname功能在当前⽬录下创建⼀个名为“dirname”的⽬录在上面我们学会了如何创建文件如果我们想创建一个目录呢此时我们如果想在/root家目录下面再创建一个目录我们就可以mkdir一个新的目录我们可以看到我们mkdir 111这个新的目录在/root家目录下面6、rm 指令语法rm [选项][目录或文件]功能rm命令可以同时删除⽂件或⽬录当我们想要删除文件或目录的时候我们可以直接统一使用rm -rf 文件或目录注意如果我要删除某个文件的时候必须先返回某个文件所处的目录如果想要删除某个目录必须先返回这个目录的上一个目录这样才可以删除成功。比如我们在上面的/root家目录下面新建了一个111目录和在113目录下面建了一个文件test1.c我们可以看到新建的111目录和test1.c文件已经删除完毕。7、man 指令Linux的命令有很多参数我们不可能全记住可以通过查看联机⼿册获取帮助语法man [选项] 命令比如我们上面所说的ls,如果我们想看一下ls可以跟那些参数而我们忘记了就可以man 指令就可以查看某个指令的参数8、cp 指令语法cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录功能: 复制⽂件或⽬录我们可以看到我们此时有两个文件一个是test.c和test1.c两个文件其中一个文件test.c里面展开有内容而另一个test1.c里面没有内容此时如果我们想要把test.c里面的内容复制到test1.c里面去我们此时就可以使用cp 指令此时我们再次观察就可以看出这个文件就已经复制完成了。假如我们想要把一个目录复制到另一个目录下呢该如何做呢由于目录下面有很多子目录或文件当我们想要复制时就需要使用递归而在这个指令后面添加一个-r参数我们可以看到在这里我们在/root家目录下面新建了一个111目录当我们想把113目录下面的各种子目录或着问件复制到111目录下时就可以cp -r 113 111就完成了复制粘贴小提示cp复制的是文件内容源文件不会消失而mv是移动剪切源文件会消失两者别搞混。9、mv 指令mv命令是move的缩写可以⽤来移动⽂件或者将⽂件改名move(rename)files,经常⽤来备份⽂件或者⽬录语法mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录功能:视mv命令中第⼆个参数类型的不同是⽬标⽂件还是⽬标⽬录mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。当第⼆个参数类型是⽂件时mv命令完成⽂件重命名此时源⽂件只能有⼀个也可以是源⽬录名它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。当第⼆个参数是已存在的⽬录名称时源⽂件或⽬录参数可以有多个mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。简答来说mv 指令的作用就是把目录或文件里的内容移动到另一个目录或文件当中此时我们的家目录假如是这样的此时/root家目录下面只有113目录和test.c文件接下来移动目录或文件有两种可能1移动到目标目录或文件已经创建此时就是简单的移动比如我们新建一个111目录此时原来处在/root目录下的113已经移动到了新建的111目录下面2移动到目标目录或文件没有创建呢当我们没有创建目标目录或文件时此时mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。10、cat 指令语法cat [选项] 文件功能查看⽬标⽂件的内容比如我们此时有一个test.c文件当我们想要看一下这个文件里面的内容时我们就可以cat 文件如果我们想要在输出的内容上面加上行号就可以cat -n 文件11、more 指令语法more [选项]功能more命令功能类似cat12、less 指令• less⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具应该说是linux正统查看⽂件内容的⼯具功能极其强⼤• less的⽤法⽐起more更加的有弹性在more的时候我们并没有办法向前⾯翻只能往后⾯看• 但若使⽤了less时就可以使⽤[pageup][pagedown]等按键的功能来往前往后翻看⽂件更容易⽤来查看⼀个⽂件的内容• 除此之外在less⾥头可以拥有更多的搜索功能不⽌可以向下搜也可以向上搜。语法less [参数] 文件功能less与more类似但使⽤less可以随意浏览⽂件⽽more仅能向前移动却不能向后移动⽽且less在查看之前不会加载整个⽂件。当我们输入less 指令之后就直接进入到文件当中。13、head 指令head与tail就像它的名字⼀样的浅显易懂它是⽤来显⽰开头或结尾某个数量的⽂字区块head⽤来显⽰档案的开头⾄标准输出中⽽tail想当然尔就是看档案的结尾。语法head[参数]… [⽂件]…功能head⽤来显⽰档案的开头⾄标准输出中默认head命令打印其相应⽂件的开头10⾏。比如说我们在test.c文件当中我们只想看前面的几行或着文件的某几行此时我们就可以使用head 指令因为我们这里的test.c文件里面的内容只有两行内容所以我们这里就简单的测试一下简单看一下这两个指令就可以了。比如我们想查看第一行就head -1 文件如果想看文件的最后一行就tail -1 文件。14、tail 指令tail 命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂件,tail-f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.语法tail 必要参数[⽂件]功能⽤于显⽰指定⽂件末尾内容不指定⽂件时作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。对head和tail进行知识扩展重定向和管道如果我们想查看一个文件的某几行也可以这样写我们可以把 | 理解成一个管道如果我们想要取文件的第一行或着最后一行我们就可以先把这个文件先展示到这个管道内让后在输入head 或tail 指令对管道内的内容进行操作此时就取出了第一行或最后一行15、date 指令指定格式显⽰时间date %Y:%m:%d⽤法date [OPTION]… [FORMAT]在显⽰⽅⾯使⽤者可以设定欲显⽰的格式格式设定为⼀个加号后接数个标记其中常⽤的标记列表如下• %H:⼩时(00…23)• %M:分钟(00…59)• %S:秒(00…61)• %X:相当于%H:%M:%S• %d:⽇(01…31)• %m:⽉份(01…12)• %Y:完整年份(0000…9999)• %F:相当于%Y-%m-%d当我们输入date时就会 帮我们显示当前所对应的时间如果我们想看当前所对应的准确的时间我们就可以按照上面指定格式显示时间就可以显示出我们所对应的时分秒此时按照相应的格式就显示处当前时间的时分秒。16、cal 指令cal命令可以⽤来显⽰公历阳历⽇历。公历是现在国际通⽤的历法⼜称格列历通称阳历。“阳历”⼜名“太阳历”系以地球绕⾏太阳⼀周为⼀年为西⽅各国所通⽤故⼜名“西历”。命令格式cal 参数[年份]功能⽤于查看⽇历等时间信息如只有⼀个参数则表⽰年份(1-9999)如有两个参数则表⽰⽉份和年份常⽤选项•-3显⽰系统前⼀个⽉当前⽉下⼀个⽉的⽉历•-j 显⽰在当年中的第⼏天⼀年⽇期按天算从1⽉1号算起默认显⽰当前⽉在⼀年中的天数•-y 显⽰当前年份的⽇历当我们输入cal指令就会显示出当前所处的月份的日历如果我们想看当年的日历我们可以在指令后面加上所想显示出的年份此时我们输入当年2026年就可以把一整年的日历显示出来。我们也可以显示当前月份的上个月和下个月注意这里的-3代表的是当前的月份、上一个月、和下一个月并不是本年的前三个月。17、find 指令• Linux下find命令在⽬录结构中搜索⽂件并执⾏指定的操作。• Linux下find命令提供了相当多的查找条件功能很强⼤。由于find具有强⼤的功能所以它的选项也很多其中⼤部分选项都值得我们花时间来了解⼀下。• 即使系统中含有⽹络⽂件系统(NFS)find命令在该⽂件系统中同样有效只你具有相应的权限。• 在运⾏⼀个⾮常消耗资源的find命令时很多⼈都倾向于把它放在后台执⾏因为遍历⼀个⼤的⽂件系统可能会花费很⻓的时间(这⾥是指30G字节以上的⽂件系统)。语法find pathname -options功能⽤于在⽂件树中查找⽂件并作出相应的处理可能访问磁盘常⽤选项•-name 按照⽂件名查找⽂件• 其他选项需要在查这个命令其实⽐较复杂如果我们想查看一个文件所处的路径我们就可以使用find指令对该文件进行查找就可以找到对应的路径比如我们当前的这个家目录下有这几个文件此时我们就可以找到我们想要的文件的绝对路径。18、which指令功能搜索系统指定的命令大白话讲就是说搜索我们上面所讲的这些指令的路径19、alias 指令功能设置命令的别名比如我们上面所写的ls -l它的别名就是ll20、grep 指令语法grep [选项] 搜寻字符串⽂件功能在⽂件中搜索字符串将找到的⾏打印出来常⽤选项•-i忽略⼤⼩写的不同所以⼤⼩写视为相同•-n顺便输出⾏号•-v反向选择亦即显⽰出没有’搜寻字符串’内容的那⼀⾏假如此时我们的test.c文件当中的内容是这些如果我们只想打印出我们想要的指定的内容此时我们就可以使用grep指令进行操作如果我们忽略大小写只要是我们想要的内容无论大小写我们都想打印出来我们就可以进行增加参数-i此时不管是大写还是小写我们统统打印出来如果我们想看一下我们所打印的内容处在原文本的哪一行我们就可以再新添一个参数-n这里如果有多个参数参数的顺序不同不影响最终的结果。我们还可以进行反向操做就是我们增加某个参数-v,代表除了我们所写的内容都不要打印其他的都打印看此时我们增加了参数-v之后就得到了除abcd之外文本的所有的内容。21、zip/unzip 指令语法zip 压缩⽂件.zip ⽬录或⽂件功能将⽬录或⽂件压缩成zip格式常⽤选项•-r递归处理将指定⽬录下的所有⽂件和⼦⽬录⼀并处理举例将test2⽬录压缩zip test2.zip test2/*解压到tmp⽬录unzip test2.zip -d /tmp例如我们如果想要把test.c文件打包到111目录下我们就可以先将test打包成压缩包的形式test.zip此时只需要将其test.zip文件解压让后传给111目录即可。关于rzsz这个⼯具⽤于windows机器和远端的Linux机器通过XShell传输⽂件.安装完毕之后可以通过拖拽的⽅式将⽂件上传过去.此时我们输入sz 指定文件让后回车就会要求我们发送到电脑的各个位置。相反我们也可以从桌面发生到Linux中这里我们可以直接拖拽的形式直接拉到Linux当中这里不在过多的讲解。22 tar 指令打包/解包不打开它直接看内容语法tar [-cxtzjvf] ⽂件与⽬录…区别这里的tar和zip有区别zip是即压缩又打包而这里的tar只打包不做压缩。•-c建⽴⼀个压缩⽂件的参数指令(create的意思)•-x解开⼀个压缩⽂件的参数指令•-t查看tarfile⾥⾯的⽂件•-z是否同时具有gzip的属性亦即是否需要⽤gzip压缩•-j是否同时具有bzip2的属性亦即是否需要⽤bzip2压缩•-v压缩的过程中显⽰⽂件这个常⽤但不建议⽤在背景执⾏过程•-f使⽤档名请留意在f之后要⽴即接档名喔不要再加参数•-C解压到指定⽬录此时我想把打包好的文件解压到111目录下面这里不能直接写指定目录要在目录前面加上-C因为tar以为你要从包里提取111这个文件但是包里啥都没有。区分tar:解压到别处--C大写unzip:解压到别处--d小写23、bc指令bc命令可以很⽅便的进⾏浮点运算这个指令很简单这里我们直接举几个例子就可以掌握这里输入bc指令之后就跟进入一个计算机一样24、uname‒r指令面试考过面试问怎么在Linux环境看你的体系结构和系统内核版本第一个参数-a全部信息一次性输出内核架构 主机名第二个参数-m体系结构第三个参数-r系统内核版本语法uname[选项]功能uname⽤来获取电脑和操作系统的相关信息。补充说明uname可显⽰linux主机所⽤的操作系统的版本、硬件的名称等基本信息。常⽤选项•-a或‒all详细输出所有信息依次为内核名称主机名内核版本号内核版本硬件名处理器类型硬件平台类型操作系统名称• lsb_release-a查看操作系统版本。9、shell命令以及运⾏原理Linux严格意义上说的是⼀个操作系统我们称之为“核⼼kernel“但我们⼀般⽤⼾不能直接使⽤kernel。⽽是通过kernel的“外壳”程序也就是所谓的shell来与kernel沟通。如何理解为什么不能直接使⽤kernel从技术⻆度Shell的最简单定义命令⾏解释器commandInterpreter主要包含• 将使⽤者的命令翻译给核⼼kernel处理。• 同时将核⼼的处理结果翻译给使⽤者。大白话理解如果说你是⼀个闷骚且害羞的程序员那shell就像媒婆操作系统内核就是你们村头漂亮的且有让你⼼动的MM⼩花。你看上了⼩花但是有不好意思直接表⽩那就让你你家⼈找媒婆帮你提亲所有的事情你都直接跟媒婆沟通由媒婆转达你的意思给⼩花⽽我们找到媒婆姓王所以我们叫它王婆它对应我们常使⽤的bash。当我们写一个指令例如ls,pwd,find等等指令的过程是1.shell(外壳程序)生成子进程2.子进程去跑命令执行成功子进程退出销毁返回退出状态0给shell执行失败子进程依旧正常退出销毁返回非0状态给shell3.不管成功还是失败子进程都会销毁子进程死活不会破坏shell4.shell拿到子进程返回的状态码让后打印命令提示符等待下一条输入比如当我们输入cat指令之后创建cat子进程cat发现找到文件子进程退出销毁返回状态码是0让后shell接收这个状态码为0的返回值打印信息此时shell本身完好等待下一条指令的输入。
返回列表