Linux常用指令


在了解Linux常用指令前,我们需要知道一些预备知识:
1.在Linux中,一切皆文件

2.文件的属性也是数据,也要存储,所以哪怕一个空的文件,它也是有大小的。文件=文件内容+文件属性。

3.对文件的操作 = 对文件内容的操作+对文件属性的操作


常用指令

ls指令

语法:ls [选项] [目录或文件]
功能:前面说了,对文件的操作=对文件内容的操作和对文件属性的操作。 ls的功能就是对文件属性的显示 ,对于目录,该命令列出该目录下的所有子目录与文件,对于文件,将列出文件名以及其他信息。
选项:

-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件
-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
-l 列出文件的详细信息。
-n 用数字的 UID,GID 代替名称。 (介绍 UID, GID)
-F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。(目录类型识别)
-r 对目录反向排序。
-t 以时间排序。
-s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
-R 列出所有子目录下的文件。(递归)
-1 一行只输出一个文件。

上面标红的选项是常用的并且重要的选项
首先看一下什么选项都不加的ls命令:
在这里插入图片描述

什么选项都不加的ls命令,只是把当前目录下的文件和目录显示出来

这里可以看出,普通文件为白色,目录文件的蓝色

下面我们仔细看看这几个常用的选项


-l

-l选项,能够列出文件的详细信息,显示更多的属性
在这里插入图片描述
这里可以看到,显示出了许多文件的属性,在这里我们需要知道一些基本的知识:
第一列第一个字母表示文件的类型,d表示目录,-表示普通文件
第五列表示文件的大小
第六列表示文件最近修改的时间
在这里插入图片描述

其实ls -l也可以写成ll,效果一样



-a

-a选项,可以列出目录下的所有文件,包括隐藏文件
执行命令:
在这里插入图片描述

多个选项可以一起写,如:ls -a -l,ls -la. ll -a
下面执行ls -la命令,看一下结果:
在这里插入图片描述
在截图中可以看到,和普通的ls指令相比,-a会显示出更多的文件

下面,我们介绍一下这些文件:

1.在Linux中,以.开头的文件叫做隐藏文件
2...文件表示当前路径的上级路径,有了这个文件,我想返回上级目录,就可以用cd ..十分简单
在这里插入图片描述
3. .文件表示当前路径
.文件存在的意义:帮助用户定位当前目录下的文件,比如,执行当前目录下的可执行程序:./test.out



-d

指令ll dir1 会列出dir1下的文件并且显示出他们的属性
但是如果我想去查看dir1本身的属性,这样是看不到的目录自己的属性的

ls -d

ls -d显示指定目录自己的属性,而不是它里面文件的属性

在这里插入图片描述



-F

在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)

在这里插入图片描述



pwd指令

pwd功能为显示用户当前所在的目录,没有其他选项
在这里插入图片描述
这个指令很简单,下面说一定额外的知识点:

/home/hey中的/叫做路径分割符
Linux下,是以斜杠/为路径分隔符
Windows下,是以反斜杠\为路径分隔符

下面的是B站的链接:
https://www.bilibili.com/,里面的路径分割符为斜杠,说明B站的服务器是使用的Linux系统



cd指令

cd指令的功能为改变当前目录,将当前工作路径改变到指定的目录下
在这里插入图片描述

Linux的目录结构整体是一个多叉树,其叶子节点,一定是空目录或者普通文件,路上的节点一定是非空目录

cd ..   返回上级目录
cd ~    返回家目录
cd -    返回最近访问目录
cd ../dir1   相对路径
cd /home/hey/dir1 绝对路径

下面是对绝对路径和相对路径的说明:
绝对路径: 从/开始定位到指定位置,具有唯一性的路径,叫做绝对路径
相对路径:以当前自己所处的路径为参照位置,来进行特定文件的定位,这种路径叫相对路径。如果当前所处的路径发生变化,那么相对路径就会可能失效


绝对路径比较长,但是不变,所以在一些固定场景中使用,比如配置文件
一般命令行输入,常用相对路径



whoami指令

whoami指令用来查看当前用户
在这里插入图片描述
在Linux中,2种用户:

  1. 超级用户root
  2. 普通用户

root用户的家目录为/root
所有普通用户账号都同意放在/home/路径下,它们的家目录为/home/用户名



touch命令

语法: touch [选项] [文件]
touch的用法是创建一个普通文件

常用选项:

-a 或--time=atime或--time=access或--time=use只更改存取时间。 
-c 或--no-create 不建立任何文档。 
-d 使用指定的日期时间,而非现在的时间。 
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。 
-m 或--time=mtime或--time=modify 只更改变动时间。 
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。 
-t 使用指定的日期时间,而非现在的时间

选项其实用得比较少,最常用的用法是touch test.txt这样


mkdir指令

语法: mkdir[选项] [目录名]
用法:在当前目录下,创建一个目录

mkdir相当于在windows下建立了一个文件夹
目录在ls指令下显示为蓝色

建立一个名为test的目录:
在这里插入图片描述

常用选项:-p
如果想一个指令建立多个目录,包括递归建立一系列上下级的路径,以及建立一些同级的路径
在这里插入图片描述



rmdir指令

语法:rmdir [选项] [目录名]
功能:删除空目录
注意事项: 只有具备当前目录操作权限的使用者才能进行删除

rmdir 只能删除非空目录
在这里插入图片描述

常用选项:
-p:删除当前目录后,如果其父目录也变为空目录的话,就带着父目录一起删除



rm指令(重要)

语法: rm [选项] [文件/目录名]
功能: rm指令可以同时删除文件或目录
常用选项:

-f 即使文件属性为只读(即写保护),亦直接删除 
-i 删除前逐一询问确认 
-r 删除目录及其下所有文件 

rm指令不加选项时,只能删除普通文件,不能删除目录
rm可以一条指令删除多个文件 例如:rm test1.c test2.c test3.c
如果只用rm不加其他选项,删除时系统会进行询问:是否确认删除。如果不想让系统询问,那就rm -f

在这里插入图片描述

如果想删除目录,就需要加上-r选项
在这里插入图片描述
所以既然rm可以删除普通文件,也可以删除目录,所以相比于用rmdir删除目录,rm使用得更多,并且rm -r可以删除非空目录

rm- rf,递归强制删除
rm -rf /,这个指令会强制删除linux中所有文件,慎用



man指令

Linux中有许多指令,某些指令又有许多选项,所以我们不可能全部都记住
我们可以通过man指令,查看练级手册获取帮助

语法: man [选项] 命令

常用选项:

-k 根据关键字搜索联机帮助
num 只在第num章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,查到了就停止停止,
而man -a printf当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕

手册一共分为八章,如果输入命令,没有写第几个手册,就从1到8,按顺序搜索指令

1是普通的命令
2是系统调用,如open,write之类的通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3是库函数如orintf,fread4是特殊文件,也就是/dev下的各种设备文件
5是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如lifconfig

如果在man一些指令的时候,发现No manual entry for xxxx,xxx为一些指令
原因是man-pages安装包没有安装
输入指令:

yum install man-pages

问题就解决了



cp指令(重要)

语法: cp [选项] 源文件或路径 目标文件或目录
功能: 复制文件或目录

cp test.txt test_backup.txt

在这里插入图片描述

常用选项:

-f #强行复制文件或目录, 不论目的文件或目录是否已经存在 
-i #覆盖文件之前先询问用户 
-r #递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,
   #则一律视为普通文件处理 ,这里我们可以认为-r可以复制整个目录
   
-R #递归处理,将指定目录下的文件及子目录一并处理  ,这里我们可以认为-r可以复制整个目录

我们可以看到,-r-R都是递归处理。
这里说一下-r-R的区别:

实际上,cp -r cp -R 在大多数情况下是等效的,都是用于递归复制目录。二者都能递归地复制目录及其所有子目录和文件。

cp -r:这个选项意味着递归复制。它会复制指定目录下的所有文件和子目录。
cp -R:这个选项也意味着递归复制,功能上与 -r 一致,复制指定目录下的所有文件和子目录。

那么为什么要设计两个一样的选项呢?

答案是,在某些特定的系统或历史背景下,-r 和 -R 可能会有不同的实现或行为
但是在现代的 GNU cp 实现中,-r 和 -R 已经被设计成完全等价的选项,所以在使用中没有区别。

所以,如果想复制整个目录的话,使用cp -r或者cp -R都可以

这里总结一下cp的用法,其实就两点:

  1. 如果想复制普通文件,cp指令就可以
  2. 如果想复制目录, cp -r或者·cp -R都可以


mv指令(重要)

mv选项主要有三个功能:

  1. 重命名
  2. 移动文件(剪切)
  3. 剪切并重命名

重命名:
当第二个参数是文件时,mv命令完成的是文件重命名

mv a.txt b.txt

mv a.txt b.txt其实就是 mv a.txt .b.txt
重命名的本质就是,把啊a.txt剪切掉,再重新站到当前目录下,并换名

移动文件:
移动文件是剪切而不是复制,mv后原文件会消失
如果mv命令中第二个参数是一个目录而不是一个文件时,mv执行的是移动文件(剪切)操作

mv a.txt ../

mv也可以移动整个目录, 目录中的文件也都会一并被移动:

mv dir1 dir2

剪切并重命名:
如果第二个参数是一个目录并且有文件名,此时就是剪切并重命名

mv a.txt ../b.txt

其实,mv就是剪切并重命名,只不过没有指定名时,默认使用原名

常见选项:

-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖

说到重命名,其实还有一个指令alias,只不过这个指令,是给指令做重命名的
什么叫指令的重命名?我们来做个实验
指令都存储在/usr/bin中
在这里插入图片描述
但是这里发现,/usr/bin中没有ll的文件,但是ll仍然可以运行
原因就是:ls -l也是ll,这就是重命名(起别名)
可以使用which指令来查询指令在哪
在这里插入图片描述
可以看到,ls -lalias起别名为ll


我们也可以使用alias给指令起别名,例如我懒得每次都敲ls -la,我只想敲lsa,我就可以给它起别名
alias lsa='ls -al' 这里注意,=的两边不要加空格
在这里插入图片描述
取消别名: alias lsa=’ ';



cat指令

语法: cat [选项] [文件]
功能: 查看目标文件的内容,打印文件内容到显示器文件中
相对比与ll就是显示文件属性cat是显示文件内容

-b 对非空输出行编号
-n 对输出的所有行编号
-S 不输出多行空行,把连续都行,压缩成一行

如果cat后面不加文件,默认从键盘读取数据,再打印出来
cat < out.txt,本应该是从键盘读取,现在不用从键盘读取了,从指定文件读取,叫做输入重定向
在这里插入图片描述

关于重定向

cat不适合看大文本,只适合看小文本
什么算大文本呢? 项目、日志等等
下面介绍的moreless命令适合看大文本



more指令

语法: more [选项] [文件]
功能:查看文件内容,与cat类似

-n 对输出的所有行编号 
 q  退出more 

more命令会让文件内容占满整个屏幕
按空格,可以向下查看,并且只能从上向下查看,一旦向下进行查看,就不能查看上面的内容
按上下建无作用,只能进行向下查看操作

输入/ xxxx可以搜索文件中的xxxx内容

因为more命令只能对文本进行向下查看,不方便,所以more命令用的少



less指令

语法:less [选项] [文件]
less与more类似,less更强大,它解决了more的缺点
它可以随意浏览文件,按上下键,就可以前后翻看文件,会更容易查看一个文件的内容

-ⅰ 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符"的功能
?字符串:向上搜索字符串"的功能
n:重复前一个搜索(与/或?有关)
N:反向重复前一个搜索(与/或?有关)
q:quit


head指令

功能:查看文件前n行内容,默认打印前10行内容
语法: head [参数] [文件]
选项: -n(行数) 显示前n行
在这里插入图片描述



tail指令

和head类似,用来查看文件中后n行的内容

在这里插入图片描述

如果想要查看中间的内容,应该怎么办,例如查看一万行文件中的1000~1020行

方法1:
先用head -1020 log.txt >tmp.txt,获取前1020行的内容
再用tail -20 tmp.txt,就获得了1000~1020行的内容
但是这种方式需要建立临时文件
如果不想建立临时文件,就需要用到管道

方法2:管道
head -1020 log.txt | tail -20

|是一个符号,表示管道。|后面会被系统解释成“管道文件”
作用是将左边程序的输出交给管道文件,让右侧程序将管道文件督导自己的程序中
为什么叫做管道? 例如水管、油管,有一个入口一个出口,用来传输资源
在这里插入图片描述
管道还支持流水线操作 cat log.txt | head -50 | tail -20



find -name指令(重要)

语法: find -name [文件名]
这个命令可以在指定的路径下,进行文件的搜索,并且真的是在磁盘中查找文件

find -name test.c搜索test.c文件
find -name *.c*为通配符,搜索c程序文件

要注意的一点是:使用通配符的时候,要用引号引起来,不然会报错
在这里插入图片描述

其他的查找指令:
which,在指令路径/usr/bin下查找,这个前面在起别名的时候使用过
whereis,在特定的系统路径下,查找含有指令名称的文件



grep指令

grep为文本过滤工具,在文件中搜索字符串,将找到的行打印出来
grep后面可加多个文件
grep '999' log.txt,把文本打开,一行为单位进行读取打印,如果读取到的行不含有’999’,直接丢弃,含有‘999’的行就打印出来
常用选项:

-i:忽略大小写的不同,所以大小写视为相同
-n:顺便输出行号
-v:反向选择,亦即显示出没有搜寻字符串内容的那一行
-R 递归搜索,可以搜索一个目录下的所有文件

在这里插入图片描述

如果想知道某一个普通文件的属性,可以ll文件所在的目录查看,如果在这个目录中有许多文件,我们用肉眼去寻找很废时间,所以可以使用ll通过管道结合grep指令



zip/unzip指令(重要)

zip:
语法: zip [压缩文件.zip] [要压缩的文件或目录]
功能:将文件或目录压缩为zip文件
unzip:
unzip xxx.zip解压缩xxx.zip文件
unzip xxx.zip -d /tmp,加了-d选项,将文件解压缩到某一路径下

将t1.和t2.c压缩为d.zip:
在这里插入图片描述

将d.zip解压缩到d1中:
在这里插入图片描述

像上面压缩t1.c 和t2.c单个文件,可以使用zip
但是如果想整体压缩一个目录,就需要添加-r选项,能够递归处理。否则,只会单纯地压缩一个目录文件而已
在这里插入图片描述

在这里插入图片描述

下面思考问题,为什么要打包和压缩?

  1. 能被打包压缩的,一定是一个整体,由多个文件压缩为一个文件,在存储或者传输的时候,不易造成文件的丢失
  2. 打包压缩,可以使体积变小,否则下载时间长,占的空间大


tar指令(重要)

打包和压缩有很多种,不只前面zip格式
用tar命名的压缩包后缀为tar.gz,简称tgz
在这里插入图片描述

常用指令

-c 建立一个压缩文件的参数指令(create的意思)-x 解开一个压缩文件的参数指令!
-t 查看tarfile里面的文件!    #不解压,只看有什么文件
-z 是否同时具有gzp的属性?亦即是否需要用gzip压缩?
-j 是否同时具有bzip2的属性?亦即是否需要用bzip2压缩?
-v 压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f 使用档名,请留意,在f之后要立即接档名喔!不要再加参数!
-C 解压到指定目泉

其中-c -x -t -z -f五个选项最重要
3个主要的指令:

  1. tar -czf xxx.tgz yyy 将yyy打包压缩为xxxx.tgz
  2. tar -tzf xxx.tgz 预览xxx.tgz
  3. tar xzf xxx.tgz 解压

写2条指令尝试一下;
tar -czf code.tgz t1.c t2.ct1.ct2.c打包压缩为code.tgz
tar -xzf code.tgz -C d1/code.tgz解压缩到d1目录下`



uname-r指令

功能:uname用来获取电脑和操作系统的相关信息,uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息。
选项:
-a或-all详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称

面试题:问怎么查看体系结构?
答案是:uname -a



如何看待指令?

指令和可执行程序都可以被执行
指令实际上就是一个可执行程序,和我们自己写的可执行程序没有任何区别,我们可以实验一下,自己写一个代码,编译为可执行程序,将这个可执行程序移动到/usr/bin路径下(/usr/bin/路径是存放指令的路径)
在这里插入图片描述

所以
指令本质上就是可执行性程序,和我们自己写的代码编译好的程序没有任何区别


shell命令以及运行原理

我们先来看看bash命令行
在这里插入图片描述
输入指令的过程就是输入字符串
我们所有的指令最终都需要在操作系统中运行,但是操作系统的使用难度高,为了方便用户使用,就有了图形化界面和命令行解释器

而bash命令行就是一种命令行解释器
在这里插入图片描述
什么是Shell?
而这个命令行解释器的统称就是shell,在linux中,是bash sh shell,在windows中,是图形化界面

而shell为什么叫shell? 因为shell翻译为外壳,它是外壳程序,在linux内核(linux kernel)的外面
在这里插入图片描述
而shell的意思是:
1.将用户的命令翻译给核心处理
2.将核心处理的结果翻译,交给用户
3.保护操作系统,,对于用户的非法命令进行拦截

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯癫了的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值