各位看客在看本期博客之前请放轻松心态,以免内容过长造成不适~
目录
1. ls指令
1.1 ls指令的作用
1.2 ls常用的指令选项
2. pwd指令
3. cd指令
3.1 cd ..
3.2 cd 文件路径
3.3 cd ~
3.4 cd -
4.热键Tab
4.1 使用Tab键进行命令的自动补齐
4.2 使用Tab键进行查看目录
5. tree指令
6. touch指令
7. 小工具nano
8. stat指令
9. mkdir指令
9.1 使用mkdir在当前路径下创建单个目录
9.2 使用mkdir在当前目录下创建一连串多级目录
10. rmdir指令
11. rm指令
11.1 rm指令使用方法
11.2 rm -f
11.3 rm -r
12.man指令
12.1 man指令的功能
12.2 man手册
13. cp指令
13.1 cp指令的功能
13.2 使用cp指令拷贝普通文件
13.3 使用cp指令拷贝目录
14. mv指令
14.1使用mv指令来剪切目录(文件)
14.2 使用mv指令对文件或目录进行重命名
15. cat指令
15.1 cat指令的功能
15.2 cat -n
15.3 cat -s
16. echo指令
17. 重定向
17.1 使用>进行覆盖式重定向
17.2 使用>>进行追加式重定向
17.3 使用<进行输入式重定向
18. more指令
19. less指令
20. head指令
21. tail指令
22. | (命令行管道)
23. 时间相关的指令
23.1 date指令
23.2 时间戳
23.3 cal指令
24. sort指令
25. uniq指令
26. find指令
27. which指令
28. whereis指令
29. alias指令
30. grep指令
31. top指令
32. zip和unzip指令
33. tar指令
34. bc指令
35. uname指令
36. 热键Ctrl+d和Ctrl+r
37. 关机(云服务器不建议关机)
shell命令以及运行原理
本节博客我们将要介绍一些Linux常用的基本指令,废话不多说,直接上干货:
1. ls指令
1.1 ls指令的作用
ls指令可以显示当前当前路径下的文件名
> 当前路径:即用户现在所处的路径(目录)。
举个栗子:我现在所处的路径下只有tesy.c这一个文件。
1.2 ls常用的指令选项
ls只能显示文件名,要想查看文件更多信息可以在后面加上一些命令选项。
下面是一些命令选项:
-a 列出目录下的所有文件,包括以.开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。如: ls -d指定目录-i输出文件的i节点的索引信息。如ls -ai指定文件
-i 输出文件的i节点的索引信息。如ls -ai指定文件
-k 以k字节的形式表示文件的大小。ls -alk指定文件· -I列出文件的详细信息。
-n 用数字的UID,GID代替名称。(介绍UID,GID)
-F 在每个文件名后附上一个字符以说明该文件的类型,“*"表示可执行的普通文件;""表示目录;“@"表示符号链接;“I"表示FIFOs;“="表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-1 一行只输出一个文件。
例如:
在后面加 -l形成ls -l:
这样我们看到此文件更多的属性了。
还可以加多个命令选项:
同时将多个指令合起来写也是支持的:
注:在Linux下以.开头的文件是隐藏文件
另外指令ll等价于ls -l:
2. pwd指令
这个指令非常简单,可以显示用户当前所在路径(目录)
例如:
显示我当前在root目录之下
3. cd指令
cd指令可以进入到指定目录
3.1 cd ..
在Linux环境下每个目录都有着.和..的标识:
.表示当前目录
..表示当前目录的上级目录
所以我们可以直接使用cd ..进入到上级目录:
注:/是Linux的路径的分隔符,就如windows下的\一样。
/是Linux的根目录,在我们返回到/之后就无法再进入到上级目录了。
3.2 cd 文件路径
当然我们也可以直接给cd指令后面加路径,直接进入到我们想要的路径底下:
直接给绝对路径(从根目录的位置定位文件的路径,具有唯一性):
或者给相对路径(从当前目录的位置定位文件的路径):
3.3 cd ~
直接在cd指令后面加~可以直接进入家目录(whoami):
whoami指令可以显示直接的家目录:
3.4 cd -
直接在cd指令后面加-可以直接返回上一次所处的目录:
4.热键Tab
在Linux下按Tab键会带给你一些帮助
4.1 使用Tab键进行命令的自动补齐
比如知道一个指令的以b开头,却忘了具体如何拼写,这时我们连按两次Tab键:
这样系统就自动补全了全部以b开头的指令了。
再举例:
反正忘记指令时就使劲Tab!
4.2 使用Tab键进行查看目录
比如我在根目录下,将要访问根目录下的子目录,此时并不知道根目录下有什么目录 ,这时不妨Tab两下:
这样下来就会看到所在目录下的所有子目录了。
当然我们可以一路Tab下去:
当连按Tab没有用时,此时的目录下就没有子目录了。
我们返回上级目录时,不清楚目录中有什么也可以连按两下Tab键:
5. tree指令
tree命令可以将当前目录下的所有子目录以树状图的形式呈现出来。
当我们第一次使用使用tree时是没用的:
因为此时自己的Linux系统是没有安装此命令的。
我们可以使用yum install -y tree来安装tree命令:
安装完成就可以使用了:
6. touch指令
touch指令可以在当前目录下创建一个普通文本文件。
用法:touch后面加文件名
或者使用..在上级目录创建:
7. 小工具nano
cd可以进入目录,那我们怎么进入文件来编写呢?
这里我们暂时使用工具nano来打开文件。
第一次使用肯定是系统没有的:
使用 yum install -y nano 来安装:
现在就可以使用nano来打开文件了:
打开后是这样的一个界面:
写一段小代码:
写完后使用Ctrl+x退出 :
按Y保存
现在我们可以使用cat命令来打印文件:
再用gcc指令来编译此文件:
产生了一个a.out的可执行文件
运行可执行文件:
8. stat指令
stat命令可以查看文件的所有属性。
使用方法:stat后面加文件名
我们现在来看文件的最后的三种时间(Access time、Modify time、Change time):
access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。
modify time:表示最后一次修改文件的时间。
change time:表示最后一次对文件属性改变的时间,包括权限,大小,属性等等。
9. mkdir指令
touch可以创建文件,那我们就可以使用mkdir创建目录。
9.1 使用mkdir在当前路径下创建单个目录
我们可以使用mkdir直接在当前路径下创建一个目录
使用方法:mkdir后面加目录名
例如:
9.2 使用mkdir在当前目录下创建一连串多级目录
我们想创建一连串的多级目录难道要一个一个mkdir吗?
其实不是的,我们可以直接在mkdir后面加上-p再加上所要创建的多级目录:
10. rmdir指令
rmdir指令可以删除空目录。
使用方法:rmdir后面加想要删除的空目录名。
例如:
但是注意rmdir无法删除目录下有文件或目录的目录:
11. rm指令
rm指令可以删除任何目录和文件(无论空目录或文件)
11.1 rm指令使用方法
使用方法:rm后面加想要删除的目录或文件名。
例如:
在删除时系统会提示是否删除,这时输入y(yes)就可以了,不想删输入n(no)即可。
11.2 rm -f
如果不想要系统提示的话,可以在其后加上-f(注意Linux系统是没有回收站的,删除的文件不能找回,使用此命令选项需谨慎):
11.3 rm -r
当我们想要删除目录时,只用rm是删不掉的:
此时可以在rm后面加上-r表示递归删除:
12.man指令
12.1 man指令的功能
Linux这么多指令忘记用了怎么办?
man指令就可以查找指令的含义和用法(在man手册上查找)
例如:
man就会找到对应的指令(在man手册上):
甚至去查man指令本身:
12.2 man手册
我们在插man指令时其中很好的说明了man的1到9号手册:
man每次查找时从1号手册依次查到9号手册,一旦查到就显示出来,所以找查到的是号数最小的手册上的内容,并不代表所有man手册中就这一条结果。
例如我们查找1号手册上的printf:
再查找3号手册上的printf:
可以看到是不一样的。
当然如果是云服务器环境下的Linux可能会出现这种情况:
这是因为云服务器下的man手册不完整,可以输入yum install -y man-pages来安装全部:
13. cp指令
13.1 cp指令的功能
cp可以将文件或目录拷贝到指定目录中。
13.2 使用cp指令拷贝普通文件
使用方法:cp 要拷贝的文件名 要拷贝进入的目标目录
例如:
如此一来dir目录下也有test.text文件了。
13.3 使用cp指令拷贝目录
如果我们按照拷贝普通文件的方式将目录拷贝到另一个目录是不能成功的:
真正拷贝目录的方法是:cp -r 要拷贝的文件名 要拷贝进入的目标目录
其中-r是递归指令
举例:
14. mv指令
14.1使用mv指令来剪切目录(文件)
mv可以直接将文件或目录剪切到指定目录中
使用方法:mv strc(文件或目录) dst(一定是个目录)
例如:
14.2 使用mv指令对文件或目录进行重命名
mv除了剪切功能之外,还能对文件(目录)就行重命名。
使用方法:mv 想要重命名的文件名 想要命名的文件名
例如:
重命名文件:
重命名目录:
另外还可以剪切和重命名功能同时使用:
如此一来new.text文件不仅仅被移动到了dir目录中还被重命名成为了test.text
15. cat指令
15.1 cat指令的功能
cat指令可以在屏幕上打印文件的文本内容
使用方法:cat 要打印文件的文件名
例如:
如果cat后面没有加文件名,则是默认从键盘中输入数据(键盘输入什么,就打印什么):
使用Ctrl+c终止cat的打印。
15.2 cat -n
cat指令后面加-n选项可以对输出的所有行编号
例如:
15.3 cat -s
cat指令后面加-s选项可以不输出多行空行(就是将文件中多行空行合并成一行空行输出)
例如:
16. echo指令
echo指令可以直接在屏幕上打印想要打印的字符:
使用方法:echo "想要打印的字符"
17. 重定向
17.1 使用>进行覆盖式重定向
在echo指令不仅仅可以在屏幕上进行输出,还可以向文件就行输出:
使用方法:echo "想要写入的字符" > 想要进行写入文件的文件名
>(大于号)被称为输出重定向
如果想要进行输出文件未创建的话,系统会在该目录下创建该文件,并向其输入内容。
例如:
但要注意重定向是一种覆盖式写入(准备写入前,会先清空文件):
比如:
17.2 使用>>进行追加式重定向
如果我们向文件写入数据但并不想覆盖文件原本的内容应该怎么办呢?
使用>>就可以进行追加式重定向
使用方法:echo "想要写入的字符" >> 想要进行写入文件的文件名
例如:
此时就不会覆盖文件原本内容了。
17.3 使用<进行输入式重定向
我们可以使用<进行输入重定向
例如:
意思是从new.text文件中输入内容并打印到屏幕上
而上面没有使用输入重定向,则是从命令行参数获取数据,本质是不一样的。随着我们深入学习会加深对其的理解。
18. more指令
对于文件中含有大量文本行内容
比如:
(此命令行是在new.text文件中存入1000行hello字符)
此时我们使用cat指令查看文件文本内容就不方便了:
more指令就可以很好的查看长文本文件
使用方法:more 想要查看的文件的文件名
例如:
它会先打印一屏幕的文本,我们可以按Enter键继续查看文本剩余的内容(只可以下翻,不能上翻)。
按q退出查看。
19. less指令
由于more指令只能下翻文本,但less指令可以更好的查看长文本内容。
使用方法:less 想要查看的文件的文件名
例如:
这时按↑↓键可以上翻和下翻文本
此时输入/后面接想要查找的内容,会自动跳到对应位置:
按q退出
20. head指令
head指令可以打印一段文件文本的头部文本(默认10行)
使用方法:head 想要打印的文件的文件名
例如:
head后面还可以跟数字打印所需要的行数:
21. tail指令
tail指令可以打印一段文件文本的尾部文本(默认10行)
使用方法:tail 想要打印的文件的文件名
例如:
tail后面还可以跟数字打印所需要的行数:
22. | (命令行管道)
在上面的new.txt文件中,我们如果想提取其中500-519行的数据内容该怎么办呢?
在这里我们可以使用一个中间文件来提取这中间20行内容
先用head指令提取new.txt文件中前520行内容重定向输入到中间文件temp.txt中,再用tail指令提取temp.txt文件中最后20行内容,这样就将new.txt文件中500-519行的数据内容提取出来了。
但这种方法过于麻烦,还需要一个中间文件,这时使用|(命令行管道)就可以很好的解决:
在这里|(命令行管道)起到了一个连接指令的作用
该过程先用cat指令提取了new.txt文件的所以内容,然后|(命令行管道)将该内容交给了head指令提取了前520行内容,最后再将head提取的内容交给了tail指令提取其最后20行内容。
另外还可以继续使用|(命令行管道)连接其他任意指令
例如:
23. 时间相关的指令
在Linux系统中我们如果想查看时间该怎么办呢?
23.1 date指令
date指令可以很好的显示时间:
在date指令后加上 + 可以自定义显示时间的格式:
但是要加特定的符号来显示年月日等特殊时间
%H : 小时
%M : 分钟
%S : 秒
%X : 相当于 %H:%M:%S
%d : 日
%m : 月份
%Y : 完整年份
%F : 相当于 %Y-%m-%d
例如:
(中间的分隔符可以自定义)
23.2 时间戳
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的 午夜)开始所经过的秒数,不考虑闰秒。
我们可以在date指令后面加上+%s来显示当前时间的时间戳
另外我们也可以在date指令后面加上-d@再加上时间戳来将时间戳转换为现实时间:
23.3 cal指令
我们可以使用cal指令来查看日历:
后面也可以加上想查看日历的年份:
或者加上-3查看当前月份前后相邻月份的日历:
24. sort指令
sort指令可以将文件按行进行排序(排序规则为按每行第一个字符的ASCLL码值(如果ASCLL值相同就比较其后字符)来将行升序排列)
在sort指令后加上-r可以降序排序
25. uniq指令
uniq指令可以对文本进行去重,即将相邻行文本如果相同uniq指令会将其变成一行
我们可以接连使用sort指令和uniq指令对文件进行去重:
26. find指令
find指令可以查找文件
使用方法:find 想要查找的目录 -name 想要查找的文件名
例如:
27. which指令
which可以搜索指令所在的位置(指令也是文件)
使用方法:which 想要搜索的指令
例如:
28. whereis指令
whereis指令可以搜索包含关键字的文档
使用方法:whereis 关键字
29. alias指令
alias指令可以给指令重命名
使用方法: alias 重命名的名字='原本指令名称'
例如:
现在ls -a -l -n -i指令就被重命名为mysl了
30. grep指令
grep指令可以在文本中查找关键字
使用方法: grep '关键字' 查找的文本
例如:
另外在grep指令后加上-n选项可以显示出所查找的文本在原文本文件的行数:
在grep指令后面加上-v选项可以显示不包含关键字的文本:
在grep指令后加上-i可以不区分大小写进行关键字的查找:
31. top指令
top指令相当于打开任务管理器,查看计算机使用状况
例如:
32. zip和unzip指令
zip指令可以对文件进行打包,而unzip指令可以将压缩包解压
开始时是使用不了zip和unzip指令的,我们可以输入 yum install -y zip unzip 来下载该指令:
下载完成后就可以正常使用了
zip使用方法:zip 打包后的文件名.zip 要打包文件的文件名
unzip指令使用方法: unzip 要解压的文件名
但是这样打包后的文件只有一个目录,解压后没有原来包含的内容 :
所以我们在打包目录时,要想其包含目录内原本内容要在zip指令后加上-r选项:
这样就可以连同目录里的内容一起打包了
当然可以直接解压到指定目录,在其后加上-d选项再指明目录就好:
33. tar指令
不是所有的打包文件都是以zip形式存在的,对于.tgz形式的打包方式我们使用tar指令
tar指令既可以打包也可以解压文件
tar指令后常用的选项:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
常用打包指令:tar -czf 打包后的文件名.tgz 要打包文件的文件名
例如:
常用解压指令:tar -xzf 要解压文件的文件名
例如:
如果不想解压,只想看打包文件里的内容可以使用-ztvf选项:
在tar指令其后加-C再表明指定目录就可以将打包文件解压到指定目录中:
34. bc指令
bc指令可以进行数学运算(Ctrl+C退出):
另外还可以这样输:
35. uname指令
uname指令可以查看当前软硬件体系结构
例如:
36. 热键Ctrl+d和Ctrl+r
Ctrl+d:可以退出程序
Ctrl+r:在历史命令中进行搜索(在按下Ctrl+r后输入想要搜索的指令)
37. 关机(云服务器不建议关机)
关机指令是shutdown后面加选项
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
shell命令以及运行原理
在最后提一下我们所使用的指令并不是直接由Linux内核处理的,而是由shell子程序处理过后再交由Linux内耗系统最后再通过shell反馈给用户
shell运行过程模拟图:
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)
主要包含:
> 将使用者的命令翻译给核心(kernel)处理。
> 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
这就是Linux常用指令的全部内容,即便是草草浏览一遍我相信各位看客看到这里手指也划酸了~
不积跬步无以至千里,本期博客内容还会有后期实践来和大家一起慢慢消化,请不要走开,我们下一期见!
如有纰漏还请各位大佬在评论区指出呀~