Linux常用基础指令

目录

该如何看待Linux下的各种命令呢??

外壳程序shell(命令行解释器)有什么意义?

ls

pwd

. 和 ..

路径分隔符 /

cd

mkdir(make directory)

mkdir -p d1/d2/d3/.../dn

tree 

touch

rmdir

rm

rm -i

rm -r(-r表示递归)

rm -rf (-r表示递归,-f表示强制)

clear

  *

man(manual)

nano

cp

cp -r

mv

cat

tac

echo

more(出场率不高,了解即可)

less (出场率不高,了解即可)

head

tail

管道:| 

常用热键

jobs

fg N

date

find

which

alias

whereis(不常用)

grep

xargs

 zip(下载指令:yum install zip)

unzip(下载指令:yum install unzip)

tar 

bc(不常用)

uname

修改用户密码


该如何看待Linux下的各种命令呢??

其实这些命令本质上就是可执行程序。比如说我们自己在Linux系统机器下写的文件是文本文件,计算机只认识二进制,我们编译链接生成了可执行的二进制文件后,然后调用这个文件的方式就是    ./文件名( . 代表当前路径,/ 是路径分隔符,通过这样找到可执行文件),完成对应的功能。你看是不是和我们输入命令的其中一种方式一样,如/usr/bin/ls。所以说,命令本质上就是一些可执行文件。甚至如果你把自己写好的程序放到系统中,那么你自己写的程序也就变成了一条命令。

外壳程序shell(命令行解释器)有什么意义?

1.将使用者的命令翻译给核心( kernel )即操作系统处理。
2.同时,将核心的处理结果翻译给使用者。

使用Linux机器时,我们会产生一个疑惑,为什么要用xshell这种软件去使用Linux机器?其实shell外壳程序本质是作为用户和操作系统交互的中间软件层。为什么要这么做呢?为了保护操作系统,因为是人就会犯错,会带来不安全因素,所以操作系统设计者不会让人直接访问操作系统。外壳程序会判断你的操作是否合法,如果合法,就向操作系统请求执行,如果不合法,直接驳回请求,比如xshell下输入指令,如果指令合法,才会被执行。

简单来说,外壳程序就是用户和操作系统交互的界面,如Windows机器下的图形化界面(GUI)也是外壳程序,图形化界面的鼠标点击就相当于xshell界面输入指令。xshell对于Linux机器的意义就相当于图形化界面对于Windows机器的意义。

注意这里的shell是一个泛型的概念,而不是一个具体的程序,而xshell是一个具体的软件。

ls

1,ls-l,或者ll。

空文件也要占用磁盘空间,因为虽然文件内容什么也没有,但文件的属性,如文件名称,创建时间,大小都是需要记录的数据, 需要空间存储。

所以第一个指令ls-l或者说ll就是用来显示文件的具体信息。

2,ls-l-a

在windows下有些文件是隐藏的,linux下也有,创建文件或目录的时候在文件名前加一个点就是创建隐藏文件。如:mkdir .catalogue。这个文件普通的ls或者ls-l是观察不到的,所以

ls-l-a就是用来查看隐藏文件的指令。隐藏文件的常见用途:隐藏配置文件。

3,ls-l-a-i或者ls-ali

用于查看文件的inode编号,就像我们有自己的名字,同时也有身份证号,inode编号就对应身份证号。

4,ls -i

显示文件文件的inode编号,就像我们有自己的名字,同时也有身份证号,inode编号就对应身份证号。

5,ls -d,显示当前所在的目录(路径),会显示一个蓝色的点 . ,一般和 -l 一起使用,如ls -ld。

pwd

用于显示当前路径(password)。

. 和 ..

每个目录下都有隐藏的 .  和  .. ,由于文件由点 开头,所以一定是隐藏文件,又因为点 . 是蓝色,所以这两个文件都是隐藏的目录文件。一个点 . 用来表示当前路径,两个点 .. 用来表示直接上级路径。 ./ 也可以表示当前路径,对应的 ../ 也可以表示上级路径。

两个点 .. 被用来切换路径,作用很明显。那一个点 . 有什么用呢?

可以限定我们要执行的程序在什么位置,假如当前路径有一个绿色的可执行文件code,我们运行程序的指令应为 ./code  。注意code.c是源文件不是可执行文件。

路径分隔符 /

几乎所有系统的目录结构本质上都是一颗多叉树,Linux也不例外。

Linux用 / 表示路径分隔符,如/name/,中间的name一定是个普通文件或者目录文件。

在Linux下,路径退到不能再退最开始 / 也是路径分隔符的一种,但我们更喜欢叫它根目录,而不是路径分隔符。注意根目录 / 也是一个目录。这块有点特殊,一般目录都是用一个名称表示,而根目录却用一个路径分隔符表示。不是根目录的文件不可以用路径分隔符/表示。

注意Linux和Windows的路径分隔符不一样,Windows是用 \ 表示,而Linux是反斜杠 / 。

我们常说Linux机器是作为服务器后端的,能体现在哪里呢?举个简单的例子:

URL即网址后面是一个 / ,而 / 是Linux下的目录分隔符,所以最开始的 /mp_blog 就是Linux机器的某一个目录,而128340570就是目录下的资源。也就是说,我们一般是windows机器,而浏览这个网址的时候就是在网络请求访问一个Linux机器。

cd

1.cd用于切换路径,格式为:cd+绝对路径/相对路径。

2.cd ~,作用是返回到当前用户的家目录。如果是root用户,cd~后,家目录就是/root。pwd观察当前所在路径也是/root。Linux的家目录可以理解为Windows下C盘的用户目录。

3.cd -,作用是跳转到上一次我所在的路径中。

mkdir(make directory)

创建一个目录文件,目录文件用蓝色标明。

mkdir -p d1/d2/d3/.../dn

创建一串的目录文件,或者说创建一串路径,如创建d1目录文件,d1里又有d2目录文件......

dn-1目录文件下又有dn目录文件。

tree 

打印指定目录下的所有路径。

touch

创建普通(非目录)文件,用白色标明。

如果touch一个已经存在的文件,可以修改文件属性里的时间属性,表示文件最近的一次修改时间。

可以同时创建多个普通文件,如touch file1 file2 file3 file4.

rmdir

只能删除一个空目录。

rm

只能删除(非目录)普通文件。

rm -i

只能删除一个(非目录)普通文件。和rm的区别是rm -i会提示你是否真的要删除,相当于一个保险,有人可能会问:这不是自问自答吗?其实不是,因为是人就会有失误,直接rm可能会有误删的情况,用rm-i删除文件就是为了减少误删的情况。

rm -r(-r表示递归)

删除目录文件,但shell为了安全,shell界面会不断提示你要不要删除目录中的子文件。也可以用于删除(非目录)普通文件。

rm -rf (-r表示递归,-f表示强制)

强制删除目录文件,不会额外提示。也可以用于删除(非目录)普通文件。通常我们说的删库跑路就是rm -rf \    。由于Linux中没有回收站,不像Windows删除了可以从回收站恢复,所以Linux删除就是删除了,虽然Linux也可以恢复,但操作复杂。

clear

清除shell界面上的草稿。

  *

* 是一种通配符,也就是说 * 可以表示任意文本。常用于这些场景,比如:rm -rf file.*,表示file.c,或者file.txt这些所有file.xx文件都会被删除。如果直接rm -rf *,当前目录的所有文件将直接被删除。

man(manual)

字面意思:说明书,用于查找不明白的指令的功能。如 man pwd就可以查看pwd的功能,甚至可以man man,看man有什么用。

man手册打开后按上下键就可以翻阅,退出按q。

云服务器上的man手册是精简版,需要手动下载完整版,指令为:yum install -y man-pages

nano

是Linux下的记事本。可以写一些代码,但没有语法提示。

nano只可以操作普通(非目录)文件,格式为:nano 文件名。

下载指令:yum install -y nano

cp

作用为拷贝,但只能拷贝(非目录)普通文件。用法:cp 文件  路径 。

cp -r

作用为拷贝目录文件,但也可以拷贝普通文件,用法:cp 文件  路径。 

mv

1.可以用于移动一个文件到一个路径下。这个文件可以是目录文件也可以是普通文件。

格式为:mv file1 加路径。

2.可以将一个目录文件或者普通文件重命名。注意只能操作当前目录下的文件。

如mv a.txt b.txt ,表示将a.txt重命名。

cat

1.cat File,只可以操作(非目录)普通文件。作用是打印文件内容。(不包括文件属性)

2.cat<File,被称作输入重定向,功能也是打印文件内容。默认向显示器打印。

3.cat File1>File2,作用是将文件1的内容写入到文件2,做一个备份。文件2不存在自动创建并写入。

4.cat<File1>File2,作用和第三条一样。
5.cat -n,和cat功能一样,只是打印的内容多了行号。

6.cat,本来是从普通文件里读取数据,然后向显示器文件写入,打印在显示器文件上,而这边cat后面没有文件,则默认向键盘文件里读取数据,然后

tac

和cat唯一不同的点就是倒着打印。

echo

1.echo “balabala”,直接在shell界面上打印balabala。

2.echo “balabala”>filename,可以直接将balabala打印到文件里,再次执行会覆盖掉文件的内容(直接删除旧内容,然后写入新内容),被称作输出重定向。如果文件不存在echo会创建一个。

3.echo “balabala”>>filename,也可以直接将balabala打印到文件里,不过不会覆盖掉文件的内容,而是在之前的基础上追加,被称作追加重定向

 对与重定向的理解,首先要记住:Linux下一切皆文件。也就是说,我们的键盘,显示器等硬件在Linux机器下看来也是一个文件。显示器文件和键盘文件是两个独立的文件,他们不在磁盘上。

那么本来echo “hello”是向显示器文件写入,打印在显示器文件上,而加入>后echo “hello”>file是向file文件写入,打印在file文件上。既然显示器文件和普通文件都是文件,那么重定向的含义也就不难理解了。

more(出场率不高,了解即可)

用于查看文本,会展示一整个shell界面的文本内容,如果文本过多没有展示完全,可以按回车键下翻,但不可往上翻,按Q退出。

less (出场率不高,了解即可)

也用于查看文本,基本和more一样,对比more可以上下翻,可以用键盘右边的方向键上下翻,也可以用回车往下翻,空格直接跳到文本末尾。ctrl+b或者g可以回到刚开始的状态。

/文本,可以用来查找指定的文本。

1.head file默认用于拿到一个普通文件file的前10行并打印在显示器文件上。

2.head -n file,拿到前n行。

tail

1.tail file默认用于拿到一个普通文件file的后10行并打印在显示器文件上。

2.tail -n file,拿到后n行。

那么如何拿到file文件里的第n1行到第n2行【n1,n2】这个区间的文本呢?

举个例子:现在要第3行到第7行【3,7】区间的文本。

方法1:首先head -7 file>temp.txt(首先输出重定向,将file的前7行输出到临时文件temp.txt中),然后tail -5 temp.txt>obj.txt(然后输出重定向,将temp.txt的后5行输出到目标文件obj.txt中)即可完成操作。方法1中需要创建临时文件,文件要写入到磁盘上,文本少还好说,文本大,假如10亿行,那将消耗很大,所以方法1不够好。方法2利用管道来改进这一点。

管道:| 

管道也是一个文件(Linux下一切皆文件),用于传输数据,一般作为中间文件产生,管道文件是一个内存级别的文件,不会刷新到磁盘上。管道有一个入口和出口,用于组合多条命令,命令组合可以实现很多功能,比如:命令A | B,就是将命令A的结果通过管道文件传输给命令B,这个非常有用。

当你使用管道操作符 | 将两个或多个命令连接起来时,第一个命令的标准输出会被传递给下一个命令的标准输入,这样第一个命令的输出成为了第二个命令的输入,这个过程可以连续地传递数据,允许你在命令之间无缝地传递信息,而不需要将数据保存到中间文件中。(管道本质做的事情:命令的执行结果都会打印在标准输出文件(即显示器)上,但因为管道修改了标准输出的文件描述符的指向,从指向显示器改成了指向管道文件,所以在 | 前面的命令的执行结果就只会打印在管道文件里了;命令或者说程序本来要从标准输入文件(即键盘文件)中读取数据,但因为管道修改了标准输入的文件描述符的指向,从指向键盘改成了指向管道文件,所以在 | 后面的命令就只会从管道文件中读取数据了)

方法2:利用管道  | ,直接head -7 file|tail -5即可。中间不会生成任何临时文件,只有一个内存级的管道文件,它不会写到磁盘上。这个例子中tail-5本来需要从一个普通文件获取资源,这里直接将管道的资源传输给了它。

常用热键

1.ctrl+c可以终止进程,用于处理Linux下各种奇怪的情况。

2.ctrl+z是暂停进程,并将进程挂起到后台,暂停多了会导致系统变慢,不要使用。

jobs

用于查看暂停的进程。

fg N

使第N个任务在前台运行

date

1.直接date可以显示当前时间,不过是用老外习惯的方式打印,看的不习惯。

2.下图指令可以用我们习惯的方式打印年月日,时分秒。如: 2022/12/17-14:52:10。本质是将date转化成我们指定的格式打印,就像printf函数中可以指定一个变量以%d的形式打印。

时间转化成 时间戳: date +%s
时间戳转化成 时间: date -d@时间戳

find

1.find 路径 -name 文件名(按照文件名查找文件)。目录是一棵树,查找时会从指定路径到叶子节点当中找。

which

用于在系统路径中查找指定的命令所在的路径。也就是说只在系统路径下找。

alias

在which ls的时候会看见下图:

alias是起别名的指令,上图中=左边是ls,ls本质上是=右边命令的别名,=右边的是大名。所以输入大名也是可以完成ls的功能的,如ls --color=auto。注意别名只在本次登录Linux机器有效,下一次登录就失效了。

alias使用格式,和图中一样:alias 别名=‘ 指令的大名或者别名 ’,注意不要忘记单引号‘ ’。

whereis(不常用)

用于在系统路径中查找指定的文档,如whereis ls,会在系统路径中,把所有文件名带有ls的文件都列出来,又如whereis test.c,虽然系统路径下没有test.c文件,但有test.**(通配符)文件,这些test.**文件也会罗列出来,所以whereis不是严格意义上的查找。

grep

1.grep 文本内容 文件名 。

用于在一个指定文件里查找指定的文本内容,将包含指定内容的每一行都打印在屏幕上,并且将指定内容标红。

2.grep -n 文本内容 文件名 。

和上面功能一样,但会打印对应行的行号。

3.grep -v 文本内容 文件名 。

和上面grep相反,这个只会打印不包含指定的文本内容的每一行。可以和 -n组合成grep -vn或者grep -nv,也可以分开写成grep -v -n文本内容 文件名。

4.grep -i 文本内容 文件名。

和前三点不一样,-i表示ignore(忽略的意思),grep -i表示忽略大小写问题,将大写小写视为相同,前三点中,如果每行内容大小写和指定内容对不上,是不会打印的。

5.grep可以用于管道中,如xx|grep aa,xx代表一条指令,指令运行的结果会进入管道,也就是说管道中的资源就是xx指令运行后的结果,这些资源可以看作全部打印进了一个文本文件,而 | 管道后面的grep aa就是在这个文本文件中找aa关键字。

xargs

例子1:像cat这种程序(指令),是需要读取的,比如说如果cat指令的后面什么也不加,则会读取从键盘输入的内容(表现和scanf一样,停止并等待输入)然后打印在显示器文件上,并无限循环这个流程。而对于ls这种程序来说是不需要读取的,比如ls直接就可以打印出当前目录下的文件。所以不可以通过获取管道资源来模拟命令行参数,如这种方式是错误的:echo “-i -a” | ls  由于ls不会读取,管道的资源就被无视了。如果想让管道资源 -i -a 作为ls的命令行参数,则要通过xargs,正确方式如:echo “-i -a” | xargs ls

例子2:当你使用管道操作符 | 将两个或多个命令连接起来时,第一个命令的标准输出会被传递给下一个命令的标准输入,这样第一个命令的输出成为了第二个命令的输入,这个过程可以连续地传递数据,允许你在命令之间无缝地传递信息,而不需要将数据保存到中间文件中,从而实现两个命令之间的数据传输。也就是说在 | 后面的命令只能从标准输入中读取在 | 前面的命令的执行结果信息。(管道本质做的事情:命令的执行结果都会打印在标准输出文件(即显示器)上,但因为管道修改了标准输出的文件描述符的指向,从指向显示器改成了指向管道文件,所以在 | 前面的命令的执行结果就只会打印在管道文件里了;命令或者说程序本来要从标准输入文件(即键盘文件)中读取数据,但因为管道修改了标准输入的文件描述符的指向,从指向键盘改成了指向管道文件,所以在 | 后面的命令就只会从管道文件中读取数据了)。

拿pidof XXX | xargs kill -9 来说明xargs的功能,因为kill -9 命令所需的参数是需要从命令行中获取,而不是从标准输入中获取,所以xargs的本质也就是把标准输入的内容转化成命令行参数,所以想要通过管道把XXX的进程ID交给kill -9的命令行参数,而不是标准输入(目前标准输入不是键盘文件而是管道文件),就得通过xargs命令。

 zip(下载指令:yum install zip)

1.zip obj.zip file,将file文件打包并压缩成obj.zip,注意这种方式不可以将目录下的子文件和子目录压缩。如果file是个目录的话,解压obj.zip会是个空目录文件。

2.zip -r obj.zip file,将目录下的子文件和子目录一起压缩。

unzip(下载指令:yum install unzip)

1.unzip obj.zip 将obj.zip解压到当前路径下。

2. unzip obj.zip -d 路径,将obj.zip解压到指定路径下。

打包并压缩的文件用红色标明,格式为xx.zip,即使指定压缩后的文件名称不带.zip,系统会自动加上.zip后缀。注意tar不会自动加.tgz,如果自己不带.tgz,那将生成一个普通非目录文件。

.tar.gz  .tgz是一种格式,即.tar.gz=.tgz。tar只是将文件打包,文件的大小没什么变化,所以生成tar包的指令不带压缩算法-z即可,如:tar -cf obj.tar file。

tar 

1.tar -czvf obj.tgz file,将file文件压缩成obj.tgz文件。c代表create,z代表压缩算法,v代表将打包解压的每一个步骤到打印到显示器上。一般不建议加上 -v,因为如果文件很大,打包解压的步骤就会很多,此时打印就会产生很大的消耗。如果tar指令一直卡着不动,就可以加 -v查看tar程序是否运行。

2.tar -xzvf obj.tgz ,将obj.tgz文件解压到当前路径下。

3.tar -xzvf obj.tgz -C 路径, 将obj.tgz文件解压到指定路径下。

4.tar -cf obj.tar file,将file文件打包成obj.tar文件,此时并没有压缩,只是打包了许多文件在一起。

5.tar -xf obj.tar,将obj.tar这个并未压缩的打包文件里的文件解包出来,即拿到包里的文件。

6. tar -tf obj.tar,将obj.tar这个打包文件里的文件全部打印到显示器上。

bc(不常用)

Linux下的计算器。一种用法就是:echo “1+2+3”| bc,可以通过管道计算出文本的结果。

uname

用于获取电脑和操作系统的相关信息。

1.uname-a  详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。
2.uname-r 只看内核信息。

修改用户密码

passwd user1 ,之后输入新密码即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值