Linux---基本指令 📅 发布时间:2026/9/7 1:36:25 👁 浏览次数: 前言1.windows系统中标识文件唯一性是通过路径标识的。桌面其实也是一个文件夹只不过用图形化界面的方式显示出来方便操作。2.无论是windows还是linux一旦登录就会处在一个默认的路径下。那windows默认处在的就是桌面这个文件夹里边。3.下文所说的 文件夹 目录。基本指令pwd--- 当前所在路径 --- 类似于windows里的D:\360安全浏览器下载whoami--- 谁在访问linux系统clear--- 清屏ls--- 显示当前目录下的所有文件名 --- ls -l 等价于 llmkdir新建的文件夹名 --- 在当前目录下新建一个文件夹cd路径/当前路径下想进入的文件夹名 --- 进入指定路径(绝对/相对)/进入文件夹touch新建文件名 --- 在当前目录下新建一个普通文件细化指令问题1如果在windows里新建一个空的文件这个文件要不要占据磁盘空间答案要的文件的属性也属于文件的一部分也是数据。文件的属性指的文件创建的时间文件名字文件的大小等等。文件是由文件的内容跟文件的属性两部分组成所以空文件也要占据磁盘空间。lsls用于显示文件的属性单独的一个ls默认显示的是当前路径下的所有文件名如果ls后边加路径就可以访问该指定路径目录底下的所有文件名ls后指定目录的话默认访问的就是当前路径下的该目录。ls选项:-l--- 显示当前路径下所有文件的所有属性-a--- 显示当前路径下的隐藏文件或者文件夹注Linux中隐藏文件通常以.开头-d--- 不查看目录里边的内容只显示目录本身pwd和cd补充知识Linux中.表示当前路径..表示上一级路径。pwd是用来显示当前所处路径的/是路径分隔符cd ~ ---~表示当前用户的家目录(当前用户默认所处的路径) --- 家目录就相当于windowsC盘里的用户文件夹点进去的那个目录 --- 就是你家的详细地址注在CentOs中root账户的家目录为/root普通用户的家目录为/home/XXXcd ---- 回退到上一次所处的路径cd ..--- 回退到上一级目录底下cd .--- 进入当前路径路径不变当我们一直cd .. 到最后一定会到//叫根目录根目录是Linux路径的起始路径。就是你在哪个国家。也就是说Linux中的目录本质是以树形结构为基础的。Linux中的整个文件结构是树状结构。它是一棵多叉树。结论1这棵多叉树的叶子结点一定是普通文件或者空的文件夹。结论2路上结点(非叶子结点)本质就是文件夹。结论3在本文一开始就说到用路径标识文件唯一性这就说明路径是唯一的为什么路径是唯一的呢因为每一个结点有且仅有一个父亲结点从根目录/往下定位每一个文件或者文件夹的时候就是唯一的。结论4在任何的目录下都会隐藏.和..(上级目录)可以这样理解每一个目录都相当于是一个结点里边包含俩指针.和...就相当于是指向自己的指针..就相当于是指向其父亲结点的指针。只不过在显示的时候一个显示成.一个显示成..。这也就可以理解为什么cd ..的时候退到上一级路径它可以找到因为当前目录里有..它能让我们以指针方式回到上级目录。那根目录/里的..指向的就是自己所以再cd ..就没办法回退了。相对路径跟绝对路径假设现在要访问hello.c这个文件有两种方式可以到达。注意我现在要访问这个文件我要带上文件名不然一个文件夹里那么多文件我怎么知道你要访问哪一个但是hello.c所处的路径为/usr/bin。绝对路径/usr/bin/hello.c 相对路径../bin/hello.c绝对路径是通过根目录/作为参照点相对路径是从我当前所处的目录为参照点一旦当前所处目录发生变化那相对路径就可能会失效了。但对于一个已经确定好参照物的相对路径比如上边的../bin/hello.c就可以保证唯一性。因为当前目录的上一级目录是唯一确定的而当前目录的上一级目录是作为子多叉树的根由根结点到任何一个结点都是唯一标识。(这棵子树为图中绿色圈出部分)。综上不管是相对路径还是绝对路径都可以对指定的文件进行唯一的路径标识。更深一点理解绝对路径就是一种确定好位置的相对路径是以/根目录为参照的。绝对路径就是一种特殊的相对路径。建议配置文件的时候一般用绝对路径因为绝对路径不管怎么样都不会变。常规操作用相对路径因为绝对路径还是过于冗余过长。现在我们知道..是上一级路径.是当前路径。..就是帮我们找到上一级目录的那.的作用是什么呢.是用来执行当前路径下的程序的。程序也是一个文件要想执行一个程序就得先找到它可以用绝对路径找也可以用.这种相对路径找。假设在当前目录下有一个my.exe文件。要执行它就可以用./my.exe这种方式touchstat 文件名--- 比ls获取文件的更多属性包括文件的AMC时间具体之后说我们知道touch是可以在当前路径下创建一个普通文件并且还可以修改文件的AMC时间具体之后说mkdirmkdir -p a/b/c/d --- 在当前目录下创建一串路径abcdLinux的文件类型(浅了解具体在后边的博客里会讲)Linux操作系统的文件类型不由文件后缀决定但这并不代表Linux不用后缀用后缀可以帮助我们自己更加清楚文件的类型并且许多编译工具是区分文件后缀的。Linux里主要由两类文件ls -l 指令用来显示当前路径下所有文件的属性在属性的第一个字母标记了文件的类型d开头的是目录文件-开头的是普通文件如文本二进制可执行程序图片视频音频等动静态库。file 文件名--- 可以显示文件具体的类型。rmdirrmdir 目录名--- 用来删除空目录rmrm删除普通文件用rm 普通文件名去删除文件或者文件夹的时候对于普通账号一般不会提醒但是如果是管理员root账号它会提醒类似于rm: descend into directory a ?此时还想删除就输入y不想删除就输入n。因为Linux里是没有回收站的删除就删除了还有一个原因是root账户的权限太大了防止误操作。如果不想要提醒就rm -f 普通文件名强制删除。rm删除目录由于Linux的目录结构是一棵多叉数树是递归定义出来的而目录从本质上就是一棵子树那么删除的时候自然也要递归删除。rm -r 目录名同理强制删除用rm -rf 目录名(r是递归单词的首字母)注意rm删除目录的时候会先进入目录最深处然后类似于递归返回的时候依次删除。从下往上manman 指令名帮助我们查找某个指令的基本用法相当于查找帮助手册类似的功能。以下是man touch的结果按q退出查询。但一般现如今我们都用搜索引擎直接去搜某个指令的用法功能即可用这个指令查出来的内容相对来说比较官方可以作为一个标准去衡量用搜索引擎搜出来的内容。如果我们man man会发生什么呢往下看会看到man里边包含了7个手册默认会去一号手册(可执行程序或者是命令)里去查找如果在一号手册找不到就会去二号手册(系统调用)里去找依次往复。其中经常去查的就是前两个手册前两个手册代表的意思已经说过三号手册指的主要就是C语言的库函数(没有C要查C直接去cplusplus里去找)比如说man 3 printf的意思就是去三号手册找printf这个库函数。这里再简单说一下为什么除了前两个手册其他手册里的东西不太推荐直接在linux里边搜是因为指令或者系统调用都是万年不变不会去更新了而像那些库函数可能还会出什么新特性此时可能在linux里就搜不到了所以那些东西就直接去官方文档里边搜搜出来的肯定是最新的。cp补充知识先有一个基本认知Linux下一切皆文件。因此当我们向显示器打印的时候显示器也就是Xshell打开来的那个终端我们认为它就是一个文件而打印也称为写入因此向显示器打印就相当于是向显示器文件进行写入。同理从键盘读取数据就相当于是从键盘文件中读取数据。在验证Linux下一切皆文件这件事之前得先知道以下的知识。echo命令与printf命令都是向显示器写入数据只不过printf是格式化打印数据。接下来看几行指令并且看一看结果。由上文知道echo指令是向显示器写入数据但是现在在后边加了 hello.txt之后不仅没有在显示器上写入转而在当前目录下创建了一个hello.txt文件并且将hello 你好写入到了text.txt这个文件里边这个过程叫做输出重定向(重新确定输出的方向)cat指令是获取文件的内容。输出重定向的特点其一就是文件如果不存在就会默认新建。其二就是每次新写入数据都会清空旧数据并且重新进行写入。既然输出重定向之前会先清空文件那直接写成如下的形式就可以直接清空hello.txt文件。如果写成两个就不会清空会在后边追加叫追加重定向。cat 文件名的作用是获取文件里的数据并且打印到显示器上那如果就一个cat呢程序就会等待用户从键盘输入数据然后再打印相当于就是scanf然后再printf。单独一个cat的功能就是从键盘文件读取数据并且打印到显示器上。cat 文件名此时就是输入重定向从文件里读取数据并且显示出来。注意虽然cat 文件名这种方式也可以将文件里的数据输出到显示器上但底层跟输入重定向是不一样的具体之后的博客里会有体现。验证既然Linux下一切皆文件那当我们打开xshell之后显示出来的那个终端必然也是一个文件它一般存在路径/dev/pts之下pts就表示终端文件的意思。现在我们先打开一个终端。ptmx先不管但是0(跟stdin没关系)就表示当前这个终端文件那如果在同一个IP地址的条件下再打开一个文件呢再打开另一个终端文件之后惊喜的发现此时目录底下就多出了一个名叫1的文件这个其实就表示的是另一个登录的终端文件。那么此时/dev/pts/1表示的不就是另一个终端文件了吗终端文件的文件路径就是/dev/pts/*其中*代表的是终端文件名一般就是数字0123...当我们用echo指令打印的时候默认就会打印数据在当前这个终端文件而当输出重定向的时候就会打印到指定的终端文件里边去。cp 源文件 目标文件cp将源文件里的内容拷贝到目标文件里如果目标文件已经存在就清空原数据后再拷贝内容如果目标文件不存在就会创建并且拷贝内容过去。如果是cp 源文件 路径没有指定文件名就还是用源文件的文件名。当用cp去拷贝目录的时候因为Linux里的文件结构是树形结构所以要去递归拷贝-r如果不想要提示就再加个-f。mvmv src dstmv的用法跟cp类型作用就是剪切拷贝其中dst可以是指定目录也可以是路径或者文件名。如果dst是不存在的此时mv的功能就是剪切拷贝加改名字。总之mv的功能就是剪切拷贝和改名字。cat与tac打印指定普通文件的内容它是用来查看文件内容的而之前那个指令ls是用来查看文件属性的文件由文件内容和文件属性两个部分构成。cat -n 文件名可以在输出文件内容时自动把文件里每一行的行号带上。tac跟cat的功能一模一样只不过cat是从文件的开头向后打印文件内容而tac是从文件的末尾倒叙打印文件的内容。(tac cat字母本身就是倒了一下)还有就是关于cat的另外两个标签没什么用就先不讲解了。more和less(推荐)cat只支持查看十几二十行的那种小文件如果文件的内容过长就会导致刷屏。因此more和less命令就登场了more 文件名会打印满一屏幕就不打了按回车会往下翻按q退出但是more不支持按上/下键去上翻或者下翻。less命令的用法跟more一样但是less打印完一屏幕就不打了还支持按上/下上下自由翻阅/搜索关键字按回车后可以找到对应关键字随后按n可以找到下一个匹配的关键字的地方注意less其实跟其他工具结合起来用为最优重点就是它支持上下翻阅。head和tailhead可以查看文件的头head 文件名默认是打印文件的前10行head -数字 文件名可以查看文件的前数字行。tail跟head完全相反tail打印的是文件的后数字行默认也是打印10行。那如何查看文件中间的内容呢假设hello.txt文件有10000行现在想查看5000~5010行此时可以head -5010 hello.txt text.txt拿到hello.txt文件的前5010行然后tail -10 text.txt拿到text.txt文件的后10行这样不就拿到5000~5010行了嘛这是一种方式但是这可不是什么好方法假设文件有10亿行怎么办接下来来看点别的方法。补充知识我们可以通过|也称之为管道去连接两条指令前一个指令的结果通过|连接到下一条命令因此上边的5000~5010行的获取就可以这么写head -5010 hello.txt | tail -10就可以了通过管道将上一条指令的结果相当于作为下一条指令的操作对象。管道是有入口跟出口的用于传送资源此时的hello.txt文件就相当于是传输到管道里的资源tail -10就可以直接去管道里获取资源。至于管道的原理涉及到进程的知识后期再说现在就笼统的知道由于Linux下一切皆文件那么管道也是文件其实上边利用管道的那一行指令就相当于刚才利用text.txt的那两行指令只不过text.txt会真实存在磁盘上而管道是内存级的在磁盘上看不到详细的之后说。管道不止只能组合两条指令可以组合无数条它可以将多个指令通过管道串起来将多个指令的功能集合在一起这就叫对文本内容做流水线处理。举个例子wc -l是统计当前文本有几行。datedate用来显示当前Linux系统下的时间的看着系统的时间显然有点不方便。因此date是支持格式化获取年月日时分秒的。是固定格式%Y是年份%m是月份%d是天数%H是小时%M是分钟%S是秒每个百分号之间的-或者_是自己指定的显示格式。date %s获取到的是一个时间戳时间戳是从1970年1月1日UTC/GMT的午夜开始到现在所经过的秒数。时间戳的本质就是一个计数器。通过-d 时间戳的指令可以将指定的时间戳转化成我们指定格式的人能看得懂的时间当时间戳指定为0的时候其实表示的就是时间戳开始的时间为什么不是0时0分0秒因为世界的时间是以伦敦格林尼治为标准的该地距离北京东八区的时差是8个小时。calcal显示的是当前月份的日历cal -3查看的是当前月份前一个月和后一个月的日历cal 年份查看的是该年一整年的日历情况。findfind 路径 -name 文件名可以用来查找指定路径底下指定的文件。(*是通配符表示任意内容*.c意思就是所有以.c为后缀的文件~是家目录)find既然可以查找文件自然也可以查找指令例如从根目录开始查找指令ls由结果可知ls指令在路径/usr/bin/ls里也就是说我们所谓的大部分的指令只不过是Linux系统固定目录(/usr/bin)下的可执行程序只不过就是程序员将代码写好并且编译成了二进制可执行程序文件之后存在了/usr/bin这个目录底下而已因此直接用/usr/bin/ls就相当于是在用ls这个指令。指令跟我们自己写的代码编译运行后得到的那个.exe文件是一个东西。whichwhich可以搜索系统命令在哪个路径底下存着which 指令名就等同于find /usr/bin -name 指令名。用过上文find查找ls那条指令的人都知道find第一次查找的时候需要等待一些时间原因就是find是从/根目录开始找的但注意find不是非得从/开始查找而是上边我们指定它开始查找的路径是/。which相当于直接去/usr/bin目录底下找了。usr是用户的意思bin是二进制的意思。filefile用于查看一个文件详细类型的。aliasalias可以给指令起别名注意别名跟指令之间不能有空格即等号两边不能有空格。如果不想zhangsan再是ls -l -a的别名的时候就用alias zhangsan (空格)就可以了。不知道大家有没有发现之前说的大部分指令其实就是一个可执行文件其中ls存在/usr/bin/ls这个目录底下因此不管用ls还是/usr/bin/ls都是等效的但结果发现两个查出来的文件怎么颜色不太一样一个有标亮一个啥颜色没有用which查了一下ls之后发现ls其实是指令ls --colorauto的别名--colorauto这个选项的作用就是给文件标亮的。所以得出结论执行指令的时候会优先搜索指令的别名而不是从/usr/bin/XX里去查找指令ls跟/usr/bin/ls的作用虽然一样但此ls并非彼ls。别名是内存级的重新登录一下就没有了它不是存在/usr/bin/XX里的。系统里的别名就如上边的ls每次重新启动的时候系统会重新生成。grep和topgrep是行文本过滤工具可以从文本中筛选出我们指定的关键词。top指令获取到的东西就等同于windows里边的任务管理器。htop是top的加强款显示出来的信息更加详细。打包和压缩命令打包 把多个文件 / 文件夹合成一个大文件只做合并不减小体积大小差不多是所有文件总和。压缩 减小文件体积把单个文件或打好包的文件算法压缩占用空间变小。至于为什么要打包压缩直接去问大模型即可。zipzip lesson.zip lesson //将lesson文件打包压缩成lesson.zipzip -r lesson.zip lesson test hello //将多个文件或者文件夹一起打包压缩unzip lesson.zip //对lesson.zip进行解压解包//如果是文件夹那么在打包压缩的时候就需要加上-r递归处理。打包压缩完为了确保是否正确打包压缩可以mkdir新建一个文件夹将打包压缩后的大文件mv到新建的文件夹里去解压解包看看是否正确。unzip的时候默认是解压解包在当前目录下也可用-d标签指定解压解包到指定路径。rzszrzsz是windows端和远端Linux机器通过xshell传输文件的工具rz是从windows端传文件到远端Linux机器安装好之后就可以直接从windows端拖拽了。sz则相反。tartar czf lesson.tgz lesson//打包压缩c表示创建一个压缩文件z表示打包的同时进行压缩f后紧跟指定的压缩后的文档名。tar xzf lesson.tgz//解压制定解压到哪个目录需要用到标签-Cscpscp主要是用于两台Linux机器之间的网络数据传输的scp 压缩包名 用户名目标云服务器IP地址目标路径//将当前这台机器的压缩包传输到目标云服务器的指定路径里。passwd输入密码目标云服务器账号的密码(相当于是对你进行身份认证)密码不回显如果密码输错了ctrldel可以将历史输入的内容删除掉。bcbc是Linux里的计算器也支持浮点数运算。bc也支持管道。补充知识如何查看你的Linux机器的体系结构问这个问题其实是在问你CPU架构。用指令uname -a(或者uname -r)效果差不多主要是显示显示主机名内核版本体系结构。重点是体系结构x86一般是指32位x86_64一般是64位。热键Tab自动补全比如要输入which假设你现在输入了wh连续按Tab两下系统就会将所有wh开头的命令显示在屏幕上如果输入的是whic仅需按Tab一下就可以将which这个完整的指令补全了。如果对着屏幕直接Tab两下那么就会将系统里的指令全部打印在屏幕上如果没反应说明你的系统不支持。Ctrl c终止当前程序如果当前程序是死循环按一次可能没用就多按几下。Ctrl r可以搜索历史写过的指令输入之前输过的指令串里的某一个指令就可以搜索到之前输入过的指令。!l意思就是将上一次最近输入的以l为开头的指令执行一下其他字母同理。云服务器的关机云服务器禁止关机关是可以关但是没法开了呀其实要开也行得去你的服务器的那个网页上也有办法。禁止关机的主要理由是在公司里云服务器上可能还跑着7*24小时的命令关 了就相当于把服务停掉了。reboot的功能是重启。shell命令以及运行原理操作系统分为广义操作系统和狭义操作系统广义操作系统(像centosubuntu这些都属于)有操作系统内核外壳程序(shell命令行windows里的图形化界面)必要的应用软件。狭义的操作系统就只有操作系统内核。内核无法直接与人交互人不擅长和内核直接交互。因此在内核外还会套一层外壳程序一般就叫shell外壳这个外壳程序跟用户交互就譬如用户输入指令给外壳程序外壳再将指令给内核处理同理内核执行完会将结果交给外壳外壳再交给用户。Linux里最典型的外壳程序就是命令行全称为shell命令行(windows最常见的外壳程序就是图形化界面)。外壳程序除了叫做shell外壳也叫做命令行解释器其作用就是将使用者的命令翻译给核心处理 同时将核心的处理结果翻译给使用者。Linux里具体的shell外壳叫bash如果说shell外壳是媒婆是对所有外壳程序的一个通称那么bash就是具体的一个媒婆叫王婆。所谓的外壳程序就是一个命令---bash一个二进制文件。外壳还有一个作用就是可以变相的保护内核如果用户提出非法请求外壳程序直接拦住不让你访问内核就譬如输入了一个根本就不存在的指令外壳程序直接弹出command not found另外外壳程序在执行的时候通常会以创建子进程的方式将事情交给子进程做这样万一在执行过程之中如果出错了就仅需要再创建一个子进程再去执行就可以了不然外壳程序自己不就挂掉了没法去做命令行解释了。