Linux——入门常用基础指令
文章目录
- Linux入门常用基础指令
- 使用工具介绍
- 基础指令
- clear指令
- pwd指令
- ls指令
- cd指令
- Linux系统下的文件路径及文件存储结构
- 文件结构
- 家目录
- 绝对路径和相对路径
- tree工具
- stat指令
- which指令
- alias指令
- touch指令
- mkdir指令
- cat指令
- rm指令
- man指令
- cp指令
- 通配符 *
Linux入门常用基础指令
使用工具介绍
Linux是一个开源的操作系统,市面上有很多种版本。我们可以根据自己的需求进行选择。当然在学习的初期我是选择了Centos 7.6进行学习。
我们大部分人的电脑装的都是Windows系统,Linux是另外一个操作系统。
我们可以选择将系统重装为Linux,但是这个代价太大了。
还可以选择使用虚拟机,但是当前知识储备有限,使用虚拟机难度较大。
还可以选择使用云服务器,并且使用Xshell软件进行登录云服务器。这个代价并不是很大,所以我选择了这个。
需要注意的是:
XShell 下的复制粘贴
复制: ctrl + insert (有些电脑需要 insert 配合 fn 来按)
粘贴: shift + insert
ctrl + c / ctrl + v 是不行的。
在Xshell下,需要使用ssh [ip]的方式进行登录。
这些不是本篇文章的重点,本篇文章重点是对一些重要指令进行讲解。
基础指令
clear指令
这个很好理解,就是清屏。即使是在windows中的cmd里面也是有这个操作的。使用这个操作后会将当前窗口下的内容进行清空。
使用这个很简单,直接在当前行输入clear即可:
按下回车键,内容会自动清空。
pwd指令
语法:pwd
功能:显示当前用户所处的目录
我们可以理解为在Linux系统下,就是在文件之间切来切去,pwd指令就可以显示我们当前处于哪个目录下。就和我们在windows系统下找到我们当前在哪个目录一样,只不过我们的电脑使用了图形化界面:
就相当于这个操作一样,是很好理解的。
只不过在windows下,路径分隔符是 \ ,而Linux是 / 。所以我们在c/c++程序中写windows中文件的路径时,经常会把 \ 写成 \\ ,这是因为 \ 在c/c++程序中是转义字符的开头。为了防止编译器认为是转义字符,需要将转义字符转化为非转义字符。所以多加一个 \ 。
在这里需要谨记一点:目录 == 文件夹
ls指令
语法: ls [选项] [目录或文件]
功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。
所以,ls指令是对文件进行操作的。我们得了解一些文件的基本知识:
学习文件,就得直到文件 = 内容 + 属性。
内容很好理解,内容就是写在里面的东西。属性呢?
我们得知道,文件名也是属性的一部分,当然属性还包括像状态,修改时间,文件类型等。
哪怕是空文件,也是需要占据磁盘空间的。即使没有内容也会有属性。属性也是数据,也需要磁盘空间分配一些内存进行存储。
这节课是入门指令,所以只需要了解一些比较常用的指令即可。
1.直接输入ls
不输入查看的目录/文件就默认查看当前目录下的目录/文件的名字。这里蓝色字体的是目录(Xshell默认),黑色的这个很明显是普通文件。
我们也可以查看一下某个目录里面的文件名:
当然是可以一次性查看多个的。这里发现pos1目录是什么也没有的。
2.ll指令和ls -l指令
我们先来看ll指令:
再来看ls -l:
其实二者是一样的。当前我们先透露一下:ll其实是ls -l取得别名,可以认为是c/c++中的typedef操作,所以ll操作和ls -l操作一样。
这个-l是选项,是列出文件的详细信息。因为当前没有输入指定目录,所以默认列出当前用户所处目录下的文件的详细信息。
我们发现,目录的详细信息中,开头是字母d,意为directory(目录)。而helloworld.txt这个普通文件的开头是一个-,直接记住这是普通文件的标识即可。
3.ls -a选项
发现出现了很多以.开头的文件。还有我们自己创建的文件。开头还有.和…。
.表示的是当前目录,…表示的是上一级目录。
-a这个选项是显示指定目录的所有文件(包括隐藏文件)。这些以.开头的文件其实就是隐藏文件。
3.ls -d选项
将目录像文件⼀样显示,而不是显示其下的⽂件。 如:ls ‒d 指定目录:
是不显示其下文件的。
5.综合使用
对于这些命令的选项或者指定的操作目录,是可以输入多个的选项或目录的:
输入ls -ald就是将当前目录以文件形式显现出来,并且有详细信息。
输入ls -al就是将当前目录下所有文件显示,包括隐藏文件,并且列出详细信息。
也能对多个目录/文件一同操作:
只不过-a选项对helloworld.cpp这个文件不起作用罢了。
对于ls指令的入门操作就大概是这么一些。具体的还需要下去自行练习。
cd指令
语法: cd 目录名
功能:改变工作目录。将当前工作目录改变到指定的目录下
注意:cd只能操作目录!
Linux系统下的文件路径及文件存储结构
对于文件路径其实上面已经简单的提到过,使用pwd指令就可以查看当前用户所处的目录:
我们当前是处在root这个目录下。
使用ls -a指令可以显示出所有的隐藏文件和显示文件,我们会发现开头总是一个点和两个点,这分别代表当前目录和上级目录。我们尝试进入一直上级目录:
经过多次尝试后,发现显示的是一样的,我们查看一下当前路径:
我们当前所处目录竟然是个 \ 。其实这个就是Linux系统下文件结构的根目录!
文件结构
这里给出结论,Linux系统的文件存储结构是一个多叉树,根节点就是根目录 \ :
除了第一个 \ 以外,其他的 \ 都是用作路径分隔符。
如文件rc3.d这个文件,我们可以知道它的路径为:/etc/rc.d/rc3.d
,当然这是它的绝对路径。
其实在windows系统下也是这样一个结构,很多人会觉得c盘、d盘等磁盘才是一个根目录。实则并不是,根目录其实就是我们这个用户。然后里面有各类盘。其实磁盘也是目录。
家目录
当我们使用指令cd ~的时候,会回到家目录下。我们当前是root超级用户,所以输入该指令回到的就是路径/root下。这个家目录其实很好理解,就是登录系统后所处的位置。
系统是可以开多个用户的,每个用户在登陆的时候都是有一个指定位置,是不会重复的。只不过我们使用windows图形化界面导致这个概念被弱化了而已。
如果我们在Linux系统下开了多个用户,选择的其中一个用户(假设叫user1),那我们的家目录就是在user1默认登陆时所处的目录下。
绝对路径和相对路径
其实这个早在c语言概念——文件部分就已经讲解过,这里再次简单复习一下即可。
绝对路径就是计算机在内存中存储的文件的路径,在Linux下即从根目录 \ 向下索引寻找,直到指定文件的路径。我们很容易发现,绝对路径是唯一的。因为从根目录到指定文件有且只有一条向下的通路能够找到指定文件。
至于相对路径,就是一个文件/目录相对于另一个文件/目录的位置,即不是从根目录开始寻找的。那这样子相对路径就不是唯一的,可能会绕一大圈找到某个文件。
比如:
我想从pub目录找到rc.d目录,我们可以这样找:
cd ../../etc/rc.d
,当然我们也可以绕到根目录再往下找,再绕远一点也可以。这病是不是唯一的。计算机中存储的都是绝对路径。我们平常生活中可能会用相对路径更多一些。
tree工具
当然会有很多人问,使用相对路径那就得直到当前所有目录文件是如何放置的。总不能每一层都使用ls命令查看吧。这个时候就需要在Xshell软件上安装一个工具了:
我使用的是Centos 7.6,在命令行直接输入命令:yum install -y tree,安装这个工具,当出现complete字样时,就代表安装成功。
使用方式:tree 目录
如图所示,这样子就能显示以指定目录为根节点下的文件树状图。这就很方便了。
注意:也是只能对目录展开树状图,如果是普通文件会报错。
很多人会在根目录/下进行树状图展开,发现一直在展开停不下来,别担心,使用键 ctrl + c就可以强制停止。
stat指令
使用:stat 文件名
功能:查看指定文件的状态
我们可以看到这些文件的状态,包括修改时间等。
具体需要注意的就是Access、Modify、Change时间:
时间戳 | 简称 | 触发条件 | 查看命令(stat ) |
---|---|---|---|
Access | atime | 读取文件内容或执行 | stat -c %x 文件名 |
Modify | mtime | 修改文件内容 | stat -c %y 文件名 |
Change | ctime | 修改内容或元数据(权限、所有者等) | stat -c %z 文件名 |
简单来说就是:
Access时间是用户最后一次访问、读取、执行该文件的时间。
Modify是最后一次修改文件内写的内容的时间。
Change和Modify不是完全一样,记录的是最后一次修改元数据的时间。(权限、所有者等)。这些是后话,当前先记住区别即可。
which指令
用法:which 命令
功能:搜索系统指定的命令
我们尝试一下:
我们发现这些命令都是存储在目录bin当中的。这说明这些指令都是二进制文件。
其实可以类比我们在windows系统的的.exe文件,就是可执行的二进制文件。那我们岂不是可以直接使用二进制文件的路径来代替命令?尝试一下:
我们发现确实是可以的,所以从今往后需要对指令祛魅了,这些指令本质就是二进制文件。
alias指令
用法:alias 别名=‘原命令’
功能:给一个功能取别名
在前面我们说了,ll的用法等同于ls -l,ll只是ls -l的一个别名,我们来验证一下:
我们发现这里是使用alias指令对ls -l命令重命名了。
我们也是可以自己进行重命名的:
我们通过给ls重命名位zhangsan,发现zhangsan和ls达到的功能时一致的。这个指令是临时的,一旦断开连接就没了。
如果想要永久存在是需要进行一些配置的,这些以后再说。
touch指令
语法: touch [选项]… 文件…
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建⼀个不存在的文件。
不添加选项就是直接创建一个空文件。如touch hello.txt就是在当前目录下创建文件hello.txt,这个创建的文件是空的。
常用选项:
• -a : change only the access time
• -c : change only the modification time
很明显,Access时间被改变了。但是Change时间也被改变了,具体原因还是很复杂。当前是入门阶段,只需要了解会使用,看到不陌生就可以。
mkdir指令
语法: mkdir [选项] dirname…
功能:在当前目录下创建⼀个名为 “dirname”的目录
既然有对文件操作的指令,自然也有对目录操作的指令。mkdir即位make directory的简写,很明显是创建出一个目录。
常用选项:
• -p/--parents: 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在。
加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录。
即正常来讲,mkdir只能在当前路径下建立一个目录,但是我们想一次性完成多个目录的建立,就需要加上这个选项:
我们通过-p选项,一次性地将多个嵌套的目录构建了。
cat指令
语法: cat [选项] [文件]
功能: 查看目标文件的内容
常⽤选项:
• -b 对⾮空输出⾏编号
• -n 对输出的所有⾏编号
• -s 不输出多⾏空⾏
这些选项了解一下就可以当前,以后再说。
但是在此之前我们得直到如何往文件内写内容。这需要安装一下Linux自带地记事本nano,不同系统的可以到ai模型中询问如何安装。
直接使用指令nano 文件名就可以进入到记事本界面:
可以在内部对文件进行编辑。退出就按下ctrl + x,并输入y和回车确认。然后就编辑完成了。
我们使用cat指令对其查看:
对于其他选项下来可以自行尝试。
rm指令
使用:rm [选项] [文件/目录]
功能:删除指定文件或者目录
如果不加入选项是无法删除目录的,只能删除普通文件。对于目录的删除是有专门的指令rmdir的,但是我们可以只使用rm指令就完成操作。
先来看常用选项:
• -f 即使⽂件属性为只读(即写保护),亦直接删除
• -i 删除前逐⼀询问确认
• -r 删除⽬录及其下所有⽂件
如果要删除目录,就需要加入选项-r,这个是recursion的意思,即递归。为什么呢?在学习树这个概念的时候我们就知道,树这个结构式天然的递归结构。而Linux系统下的文件存储形式就是多叉树,那也是递归形式。所以要删除目录是需要加入选项-r的。
如果我们不加入选项-f是会一一询问是否删除该目录/文件的。只需要我们输入y或者n即可。如果想一次性删完并且不询问,那就需要加入该选项。
选项-i意为删除前需要逐一询问内部文件/目录是否删除。
切记:当前如果处于根目录/下的话,需要谨慎使用删除指令。因为根目录也是可以被删除的。一旦删除就需要重新装系统了。
man指令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助
语法: man [选项] 命令
这个也是需要下载的,所以对应不同的系统需要搜索一下如何安装到本地机器上。
常⽤选项
• -k 根据关键字搜索联机帮助
• num 只在第num章节查找
• -a 将所有章节的都显⽰出来,⽐如 man printf 它缺省从第⼀章开始搜索,找到就停⽌,⽤a选
项,当按下q退出,他会继续往后⾯搜索,直到所有章节都搜索完毕
num选项其实是数字:
解释⼀下:man⼿册分为9章(不同系统可能会有差别)
• 1 是普通的命令
• 2 是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么
头⽂件)
• 3 是库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
• 4 略
• 5 是指⽂件的格式,⽐如passwd, 就会说明这个⽂件中各个字段的含义
• 6 是给游戏留的,由各个游戏⾃⼰定义
• 7 是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明
• 8 是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig
• 9 略
man指令还可以这样使用:man man,就可以查询手册的目录:
cp指令
语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
常⽤选项
• -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
• -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
• -r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符
号链接,则⼀律视为普通⽂件处理
这些选项其实在rm指令那里就已经见识过了,这里也是一样的。
我们稍微演示一下:
如果是复制文件,就不需要加上-r选项,因为不是复制目录。使用cp指令复制文件的时候,如果最后跟的是同类型文件且不同名字,那就会在当前目录下生成一个。如果后面指定的是目录,就会复制到目录里面。
如果复制重名是会报错的。
对于目录,就需要加入递归选项进行操作:
当然也可以指定复制的路径:
对于自己复制到自己里面:
虽然提示是说无法将自己这个目录复制到自己目录内,但是仔细查看一下发现还是复制进去了。但是一般不建议这么使用。
根本原因就是复制的时候系统在做检查,如果检测到错误了就会停止,但是已经复制好的是不会回滚的,所以就会保留在那。
当然本篇文章只是讲解入门的一些指令,了解一下即可。
通配符 *
最后一个内容严格来说并不是指令。
我们现在有这样一个场景:
我们想要把pos1~pos5的目录全部删除 正常来说,我们需要使用指令rm -rf将目录依次删除,或者可以一次性删除多个,只需要我们多输入几个目录就好。
但是这样特别麻烦,也没有什么办法解决一下呢?
这就需要使用通配符*了,通配符的功能就是根据输入的部分内容作为开头,加上通配符,然后系统去找符合这些内容开头的文件。
所以我们可以这样子做:
很明显,全部给删除了。当然以p po 开头也是可以的,因为pos1~pos5开头就是这些。
如果想要一次性的将全部内容删除,也可以直接输入通配符:
只有通配符的时候,所有文件和目录都满足这个开头。所以可以全删