【Linux】Linux 下基本指令 -- 详解

无论是什么命令,用于什么用途,在 Linux 中,命令有其通用的格式:

command [-options] [parameter]

  • command:命令本身。
  • -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节。
  • parameter[可选,非必填]命令的参数,多数用于命令的指向目标等。

语法中的[ ],表示可选的意思。


一、ls(List Files)指令

1、语法

ls [选项] [目录或文件]


2、功能

对于 目录 ,该命令列出该目录下的所有子目录与文件 。对于文件,将列出文件名以及其他信息


3、常用选项

  • -a 列出目录下的所有文件,包括以 . 开头的隐含文件。(表示 all 的意思)
  • -d 将目录像文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录
  • -i 输出文件的 i 节点的索引信息。 如 ls --ai 指定文件
  • -k 以 k 字节的形式表示文件的大小。ls --alk 指定文件
  • -l 列出文件的详细信息。(以列表(竖向排列)的形式展示内容,并展示更多内容)(语法中的选项是可以组合使用的,比如上图中的 -a 和 -l 可以组合应用。写法1:ls -l -a 写法2:ls -la 写法3:ls -al 三种写法都一样)
  • -n 用数字的 UID,GID 代替名称,UID:用户ID,GID:组ID。(给用户看到的是名字,实际上计算机处理的是这个数字。)
  • -F 在每个文件名后附上一个字符以说明该文件的类型,"*"表示可执行的普通文件;"/"表示目录;"@"表示符号链接;"|"表示FIFOs;"="表示套接字(sockets)。(目录类型识别)
  • -r 对目录反向排序。
  • -t 以时间排序。
  • -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
  • -R 列出所有子目录下的文件。(递归)
  • -1 一行只输出一个文件。

当不使用选项和参数,直接使用 ls 命令本体,表示:以平铺形式,列出当前工作目录下的内容。


二、pwd(Print Work Directory)命令

1、语法

没有选项,没有参数,直接使用即可。

pwd


2、功能

显示用户当前所在的目录。


3、常用选项

无。


三、cd(Change Directory)指令

Linux 系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。

注意:非叶子节点一般是目录,叶子节点一般是文件 / 空目录。

1、语法

  • cd 命令无需选项,只有参数,表示要切换到那个目录下。
  • cd 命令直接执行,不写参数,表示回到用户的家目录。

cd [目录名]

2、功能

切换工作目录。将当前工作目录切换到指定的目录下。

3、使用举例

  • 绝对路径:以根目录为起点,描述路径的一种写法,路径描述以 / 开头。
  • 相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以 / 开头。
cpp 复制代码
cd /home/ll/lesson2/file1 #绝对路径:不管在哪里,该路径对应的文件一直可以找到(一般在系统或者软件的配置文件中使用)

cd lesson2/file1          #相对路径:简单,不过只限于当前路径(一般在命令行上使用的多)

表示当前目录:cd .(比如:cd ./code 表示切换到当前目录下的 code 目录内,和 cd code 效果一致)

返回上级目录:cd ..(cd ../.. 表示切换到上二级的目录)

绝对路径:cd /home/litao/linux/

相对路径:cd ../day02/

进入用户家目录:cd ~(默认登录成功时,所处的路径)(cd ~/code 表示切换到家目录内的 code 目录)

返回最近访问目录:cd -


四、touch(Change File Timestamps )指令

1、语法

touch [选项] [文件名]


2、功能

touch 命令参数可更改文档或目录的日期时间 ,包括存取时间和更改时间,或者新建一个不存在的文件


3、常用选项

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

【补充】Linux下如何查看文件类型

windows 区分文件类型用的是后缀,如 .exe / .docs / .pptx / .html。

Linux 区分文件类型,一般不通过后缀,通过属性列的第一个字符。


五、mkdir**(M** ake Directory)指****令(重要)

Home - IBM Developer

1、语法

选项(-p)可选,参数必填(表示要创建的目录的路径,相对、绝对、特殊路径符都可以使用)。
mkdir [选项] [dirName]


2、功能

在当前目录下创建一个名为 "dirName" 的目录。


3、常用选项

-p ,--parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。


4、使用举例

递归创建多个目录:

注意:创建文件夹需要修改权限,请确保操作均在家目录内,不要在 HOME 外操作,会涉及到权限问题,HOME 外无法成功。


六、rmdir(Remove Directory**)指令****&& rm(Remove)**指令(重要)

rmdir 是一个与 mkdir 相对应的命令。 mkdir 是建立目录,而 rmdir 是删除命令。


1、rmdir**(R** emove Directory**)**指令

(1)语法

rmdir [-p] [dirName]


(2)适用对象

具有当前目录操作权限的所有使用者。


(3)功能

删除空目录。
注意:rmdir 只能删除空目录。


(4)常用选项

-p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。


2、rm(Remove)命

rm 命令可以同时删除文件或目录。


(1)语法

可以一次性删除很多个参数内容,用空格隔开即可。

rm [-f / -i / -r / -v] [dirName / dir]


(2)适用对象

所有使用者。


(3)功能

删除普通文件或目录。


(4)常用选项
  • -f即使文件属性为只读(即写保护),也直接删除,比如在普通用户中删除 root 用户创建的文件,可以通过 su - root 切换为 root 用户,可以通过 exit 退回普通用户。(强制删除)
  • -i 删除前逐一询问确认。(注意*是通配符,用以模糊匹配,代表当前目录中的所有文件)
  • -r 删除目录及其下所有文件,rm 不能直接删除目录,需要加上 -r 选项。(递归删除
  • -rf 强制并递归删除。(rm -rf / 和 rm -rf /* 慎用!效果等同于在 Windows 上执行 C 盘格式化!)

七、man**(** Manual**)指令(**重要)

Linux 的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问 Linux 手册页的命令是 man。


1、语法

man [选项] [要查看的命令]


2、常用选项

  • -k 根据关键字搜索联机帮助。
  • num 只在第 num 章节找。
  • -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用 a 选项,当按下 q 退出,他会继续往后面搜索,直到所有章节都搜索完毕。
    该手册如下有8个章节,一般常用的也就是前3个:

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


3、使用方法

cpp 复制代码
man ls  #查看ls命名手册
man 3 printf  #

八、cp(Copy)指令(重要)

1、语法

选项可选,参数 1 表示被复制的文件 / 文件夹(Linux 路径),参数 2 表示要复制去的地方(Linux 路径)。

cp [选项] [源文件或目录] [目标文件或目录]


2、功能

复制文件或目录。


3、说明

cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。


4、常用选项

  • -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在。
  • -i 或 --interactive 覆盖文件之前先询问用户。
  • -r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。(如果要拷贝目录需要带上 -r 选项)
  • -R 或 --recursive 递归处理,将指定目录下的文件及子目录一并处理。

九、**mv(Move)**指令(重要)

注意:cp 是拷贝,而 mv 是剪切。
mv 命令是 move 的缩写,可以用来移动文件或者将文件改名( move (rename) files ),是 Linux 系统下常用的命令,经常用来备份文件或者目录。


1、语法

选项可选,参数 1 表示被移动的文件 / 文件夹(Linux 路径),参数 2 表示要移动去的地方(Linux 路径),如果目标不存在,则进行改名,确保目标存在。
mv [选项] [源文件或目录] [目标文件或目录]


2、功能

  1. 视 mv 命令中第二个参数类型的不同(是目标文件还是目标目录),mv 命令将文件重命名或将其移至一个新的目录中。
  2. 当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  1. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中。

3、常用选项

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

4、举例

(1)对文件或目录重命名

(2)移动文件或目录(相当于剪切复制)

十、cat(Concatenate)指令

1、语法

cat [选项] [文件]


2、功能

查看目标文件的内容。(通常用于阅读小文件,因为它会把文件内容一次性全部显示出来)


3、补充(tac)

语法:tac [选项][文件]

还有一个命令 tac,反向显示文件内容,从尾到头来显示文件内容。


4、常用选项

  • -b 对非空输出行编号。
  • -n 对输出的所有行编号。
  • -s 不输出多行空行。

注意:cat 不适合查看大文件的内容(比如有一个 10000 行的文本,此时要看第 1 行的内容,就要不断往上翻阅)。


5、举例


⚪tree 指令

1、语法

tree [目录名]


2、功能

用树状图列出指定目录下的所有文件,包括子目录里的文件。


3、安装

tree 命令可以采用树状展开目录,要使用 tree 需要安装 Linux 中使用命令 yum install -y tree 进行安装。可以试试展开根目录,按 [Ctrl + C] 就可以结束展开。


4、使用举例


十一、more 指令

1、语法

more [选项] [文件]


2、功能

more 命令的功能类似 cat 。


3、常用选项

  • -n 对输出的所有行编号(注意这里的 n 是具体数字)。

    如果 more -具体数字,首次 Enter 后就向下翻阅具体数字行。

    如果 more ,Enter 后就默认向下翻阅一行。

  • /字符串:搜索 "字符串" 的功能。

  • [Ctrl + f] 按键 : 空格键 ,向下翻阅一页。

  • [Ctrl + b] 按键 : 向上翻阅一页。

  • q 退出 more。


cat 和 more 的区别是什么?

两者的功能类似,但是使用场景不同。cat 适合查看小文件、more 适合查看大文件(more 查看时最多一次可查看一页)。


⚪扩展

1、管道

生活中有许许多多的管道,每个管道都有一个入端和出端,用于传输东西。在计算机中,也有管道(用 '|' 表示),用于传输信息流、数据流。把一个命令的信息通过管道交给下一个命令。

使用举例

dmesg 命令配合 more 命令使用。

cpp 复制代码
dmesg | more -5  #把dmesg命令的输出经过管道传递给more

用 more 来阅读 dmesg 打印的信息的前 3 行:


(1)语法

grep [选项] [搜寻字符串] [文件]


(2)功能

在文件中搜索字符串,将找到的行打印出来。


(3)常用选项
  • -i :--ignore-case 忽略大小写的不同,所以大小写视为相同。

  • -n :--line-number 顺便输出行号。

  • -E :同时查找多个字符串。

    cpp 复制代码
    [ll@VM-0-12-centos lesson3]$ grep -E '9999|8888|7777' log.txt
    hello 7777
    hello 8888
    hello 9999
  • -v :--invert-match 反向选择,显示出没有 '搜寻字符串' 内容的那一行。

    cpp 复制代码
    [ll@VM-0-12-centos lesson3]$ grep -E -v '1111|2222' test.c
    3333
    4444
    hello Linux!

(4)使用举例
  1. 从 ls 显示内容中查找指定字符串的行。

  2. 从文件内容中查找指定字符串的行。

  3. 从 dmesg 命令打印的日志信息中查找含有 error 字符串的行,并用 more 命令阅读前 3 行。

    cpp 复制代码
    dmesg | grep -i 'error' | more -3

2、日志

相当于程序的日记,项目运行之后,会一直进行写入,到对应的日志文件中,比如时间、日志等级、内容等。


3、重定向

(1)echo

echo:输出字符串

cpp 复制代码
[ll@VM-0-12-centos lesson3]$ echo "hello Linux"
hello Linux

(2) 输出重定向

本来应该显示到显示器上,现在直接写入到了文件中。输出重定向,会清空原始文件,然后再进行写入,每次都是最新的。

cpp 复制代码
echo "hello Linux" > hello.txt

(3)追加重定向
cpp 复制代码
echo "1234" >> hello.txt  #新增写入的内容

(4)输入重定向

5、如何快速清空一个文件

cpp 复制代码
>hello.txt  #清空hello.txt文件中的内容

本质上是因为输出重定向会清空文件内容。


十二、less 指令(重要)

  • less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大。
  • less的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看。
  • 但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容。
  • 除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

1、语法

less [参数] [文件]


2、功能

less 与 more 类似(但更推荐使用 less),但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。


3、选项

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

十三、head 指令

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的开头至标准输出中,而 tail 想当然就是看档案的结尾。


1、语法

head [参数] [文件]


2、功能


head 用来显示档案的开头至标准输出中,默认 head 命令 打印其相应文件的开头 10


3、选项

  • -n<行数> 显示的行数。

十四、tail 指令

tail 就像它的名字一样浅显易懂,用来显示文件尾部的内容。
tail 命令从指定点开始将文件写到标准输出。使用 tail 命令的 -f 选项可以方便的查阅正在改变的日志文件, tail - f filename 会把 filename 里最尾部的内容显示在屏幕上, 并且不但刷新, 使你看到最新的文件内容。


1、语法

tail [必要参数] [选择参数] [文件]


2、功能

用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。


3、选项

  • -f 循环读取。
  • -n<行数> 显示行数。

4、思考

(1)log.txt 文档有一万行,如果需要提取中间的 10 行(4990-5000),该怎么做呢?

a. 方法一:需要临时文件,先取前 5000 行数据到 temp 文件里。

再取 temp 文件的最后十行。

b. 方法二:不需要临时文件,这里利用了管道的功能,先取前 5000 行到管道作为 tail 10 的要取的对象,在此基础上利用了 tac 命令进行逆置即可。

(2)如果需要提取中间的 10 行(4990-5000),并将其逆置,又该怎么做呢?

十五、时间相关的指令

date****显示

  • date 指定格式显示时间:date +%Y:%m:%d
  • date 用法:date [OPTION] [+FORMAT]

1、在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下

  • %H : 小时(00..23)
  • %M : 分钟(00..59)
  • %S : 秒(00..61)
  • %X : 相当于 %H:%M:%S
  • %d : 日 (01..31)
  • %m : 月份 (01..12)
  • %Y : 完整年份 (0000..9999)
  • %F : 相当于 %Y-%m-%d
cpp 复制代码
[ll@VM-0-12-centos lesson3]$ date
Sun Dec  3 19:19:01 CST 2023
[ll@VM-0-12-centos lesson3]$ date +%Y-%m-%d-%H:%M:%S
2023-12-03-19:19:01

2、在设定时间方面

  • date -s //设置当前时间,只有root权限才能设置,其他只能查看。
  • date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
  • date -s 01:01:01 //设置具体时间,不会对日期做更改
  • date -s "01:01:01 2008-05-23″ //这样可以设置全部时间
  • date -s "01:01:01 20080523″ //这样可以设置全部时间
  • date -s "2008-05-23 01:01:01″ //这样可以设置全部时间
  • date -s "20080523 01:01:01″ //这样可以设置全部时间

3、时间戳

时间戳是指格林威治时间自 1970 年 1 月 1 日(00:00:00 GMT)至当前时间所经过的总秒数,它也被称为 Unix 时间戳(Unix Timestamp)。

  • 时间 --> 时间戳:date +%s

    cpp 复制代码
    [ll@VM-0-12-centos ~]$ date +%s
    1641136824  #指从1970年1月1日00:00到现在累计的秒数
  • 时间戳 --> 时间:date -d@1508749502(时间戳转换为对应时间)

    cpp 复制代码
    #时间戳转日期时间
    [ll@VM-0-12-centos ~]$ date -d @1641136824
    Sun Jan  2 23:20:24 CST 2022
    
    #时间戳转指定格式的日期时间
    [ll@VM-0-12-centos ~]$ date +%Y-%m-%d-%H:%M:%S -d @1641136824
    2022-01-02-23:20:24
  • Unix 时间戳(英文为 Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。

    cpp 复制代码
    [ll@VM-0-12-centos ~]$ date +%Y-%m-%d-%H:%M:%S -d @0
    1970-01-01-08:00:00
为什么下面显示的是 1970 年 1 月 1 日 08:00:00 呢?难道不应该是 1970 年1 月 1 日 00:00:00 吗?
cpp 复制代码
[ll@VM-0-12-centos ~]$ date +%Y-%m-%d-%H:%M:%S -d @0
1970-01-01-08:00:00  #格林威治与北京的时差是8小时

因为时差 ------ 格林威治标准时间是零时区的地方时,北京是东 8 区,差 8 小时,比北京晚 8 小时。

为什么要有时间戳?
  1. 因为是累计的秒数,递增且不重复的,比较适合进行查找,尤其是范围查找
  2. 时间戳比起正常的日期时间在内存中占的空间也比较小。

比如我想要查找某年某月某日 8 点 20 分到 8 点 50 分的监控录像,输出时间去查找太麻烦了,还要控制它的格式,而我们找到这段时间的起始时间戳,很方便就可以去定位到这段监控。

正因为有这样的特点,在日志当中就可能会使用到时间戳。

时间戳用无符号整型变量来存储的,那么随着时间递增,时间戳有没有可能溢出呢?

unsigned short ➡ unsigned int ➡ unsigned long long

答案是有可能的,而且溢出了影响会相当大,时间一旦紊乱了,铁轨飞机的调度,银行的取款和借贷等等都会受到巨大的影响。

时间戳溢出这个问题有解决方案吗?

目前没有,除非有新技术,目前的解决方案就是尽可能的将存储时间戳的字节数增大。

当然历史上也曾经发生过 ------ 计算机 2000 年问题,又叫做 "千年虫"、"千年危机"。在某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份 (千禧年之前的程序员) 只使用两位十进制数来表示,因此当系统进行跨世纪的日期处理运算时,就会出现错误的结果,进而引发各种各样的系统功能紊乱甚至崩溃。千禧年跨年之时就是时间戳溢出之时,所以当时就改了位宽。下次时间戳溢出的时间是 2038 年。

感兴趣可以了解:千年虫(计算机2000年问题)_百度百科 (baidu.com)


十六、cal(Calendar)指令

cal 命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。"阳历" 又名 "太阳历",系以地球绕行太阳一周为一年,为西方各国所通用,故又名 "西历"。


1、命令格式

cal [参数] [月份] [年份]


2、功能

用于查看日历等时间信息,如只有一个参数,则表示年份 (1-9999) ,如有两个参数,则表示月份和年份。


3、常用选项

  • -3 显示系统前一个月,当前月,下一个月的月历(共三个月)。
  • -j 显示在当年中的第几天(一年日期按天算,从 1 月 1 号算起,默认显示当前月在一年中的天数)。
  • -y 显示当前年份的日历。

4、举例

cpp 复制代码
Cal --y 2018

十七、find 指令(重要)

  • Linux 下 find 命令在目录结构中搜索文件,并执行指定的操作。
  • Linux 下 find 命令提供了相当多的查找条件,功能很强大。由于 find 具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
  • 即使系统中含有网络文件系统(NFS),find 命令在该文件系统中同样有效,只你具有相应的权限。
  • 在运行一个非常消耗资源的 find 命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指 30G 字节以上的文件系统)。

1、语法

find [pathname路径名] [-options]


2、功能

用于在文件树种查找文件,并作出相应的处理(可能访问磁盘),相比 which 和 whereis 的查看速度会更慢,因为它是在全局中(包括磁盘)查找。


3、常用选项

  • -name 按照文件名查找文件。

    cpp 复制代码
    #在家目录下查找名为test.c的文件
    [ll@VM-0-12-centos lesson3]$ find ~ -name test.c
    /home/ll/lesson3/test.c
    /home/ll/school/test3/test.c
    /home/ll/school/test4/test.c

4、扩展(其它查找指令)

(1)whilch(用来查找命令所在路径的命令)
cpp 复制代码
#示例1:
[ll@VM-0-12-centos lesson3]$ which ls
alias ls='ls --color=auto'  #alias取别名
	/usr/bin/ls

#示例2:
[ll@VM-0-12-centos lesson3]$ which ll
alias ll='ls -l --color=auto'  #alias取别名
	/usr/bin/ls

#示例3:
[ll@VM-0-12-centos lesson3]$ which pwd
/usr/bin/pwd

这里把 ls --color=auto 起别名为 ls。

【思考】

ls 和 ll 这两个命令,它们有什么区别呢?

alias 作用是给命令取别名,ll 是 ls 加了特定选项 -l 后的一个别名,如上代码所示。

cpp 复制代码
alias ls='ls --color=auto'
alias ll='ls -l --color=auto'
可以自己取别名吗?

当然可以。

注意:我们自己取的别名只能在当前终端窗口中有效。

cpp 复制代码
#给ls -l -a -i命令取别名为lll
[ll@VM-0-12-centos lesson3]$ alias lll='ls -l -a -i --color=auto'

#使用lll命令
[ll@VM-0-12-centos lesson3]$ lll
total 124
655469 drwxrwxr-x  3 ll ll   4096 Jan  2 21:39 .
655457 drwx------ 16 ll ll   4096 Jan  2 22:01 ..
790011 drwxrwxr-x  2 ll ll   4096 Jan  2 19:37 dir
655410 -rw-rw-r--  1 ll ll     33 Jan  2 18:35 test.c

(2)whereis(在系统中特定路径下,对文档、命令等相关文件的查找,只要包含了这个关键字,都会找出来)​​​​​​​
cpp 复制代码
#示例1:
[ll@VM-0-12-centos lesson3]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

#示例2:
[ll@VM-0-12-centos lesson3]$ whereis pwd
pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/mann/pwd.n.gz /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz

可参考:linux grep命令详解 - ggjucheng - 博客园 (cnblogs.com)

1、语法

grep [选项] 搜寻字符串 文件


2、功能

在文件中搜索字符串,将找到的行打印出来。


3、常用选项

  • -i : 忽略大小写的不同,所以大小写视为相同。
  • -n : 顺便输出行号。
  • -v : 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行。
  • --color=auto : 可以将找到的关键词部分加上颜色的显示。
  • -E : 支持正则表达式。

十八、zip / unzip 指令

1、语法

  • zip [压缩文件.zip] [目录 / 文件]
  • unzip [压缩文件.zip]

2、功能

将目录或文件压缩成 zip 格式。
将压缩文件解压。


3、常用选项

  • -r递归处理,将指定目录下的所有文件和子目录一并处理。
  • -d 指定解压路径。

4、举例

cpp 复制代码
#将lesson3一级目录下的所有文件压缩
zip lesson3.zip lesson3/*
cpp 复制代码
#将lesson3目录下及其子目录的所有文件压缩
zip -r lesson3.zip lesson3/*
cpp 复制代码
#将lesson3解压到tmp目录下
unzip lesson3.zip -d /tmp  #-d解压到指定目录tmp

十九、tar(Tape archive)指令(重要)

打包 / 解包,不打开它,直接看内容。


1、语法

tar [选项] [压缩文件.tgz] [目录/文件]


2、常用选项

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

3、案例

(1)打包
cpp 复制代码
tar -czf lesson3.tgz lesson3
tar -cvzf lesson3.tgz lesson3  #-v显示压缩的过程,压缩的哪些文件,这样防止遗漏文件

(2)解包
cpp 复制代码
tar -xzf lesson3.tgz  #解压到当前目录
tar -xzf lesson3.tgz -C /tmp  #-C解压到指定目录tmp
tar -xvzf lesson3.tgz lesson3  #-v显示解压的过程,解压的哪些文件,这样防止遗漏文件

为什么要有压缩包?

压缩包的本质:大量的文件(普通文件+目录)--> 一个文件(压缩包),这样方便传输且存储空间小。压缩包的作用:

  1. 减少因为网络或者其它原因导致文件丢失的情况,我们把多个文件打包成一个文件,只要保证把这一个文件下载下来,就能够完整得到所有想要的多个文件。
  1. 减少存储 / 传送的成本。

二十、bc( Binary Calculator**)**指令

bc 命令是 Linux 中的计算器,它可以很方便的进行浮点、整数运算,quit 就可以退出计算。

  • 通过管道符
cpp 复制代码
[ll@VM-0-12-centos lesson3]$ echo "(1+2*3+4+5)/3" | bc
5
  • scale=2 设小数位,2 代表保留两位
cpp 复制代码
[ll@VM-0-12-centos lesson3]$ echo "scale=2;1+2+3+4+5/3" | bc
11.66

二十一、uname(Unix name)指令

1、语法

uname [选项]


2、功能

uname 用来获取电脑和操作系统的相关信息。(uname 可显示 Li nux 主机所用的操作系统的版本、硬件的名称等基本信息。)


3、常用选项

  • -a / -all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称等等。
  • -r 查看内核版本。

二十二、重要的几个热键​​​​​​​

热键简单理解就是被高频使用的键位,通常具有某种功能性,如我们经常使用到的 Ctrl + C/V。


1、常用热键

  • history 指令: 显示输入过的历史命令。
  • [Ctrl + R] 按键:搜索历史命令(输入关键词即可)。
  • [Tab] 按键 : 具有命令补全档案补齐的功能。
  • [Ctrl + C] 按键 : 让当前的程序停掉
  • [Ctrl + D] 按键 : 通常代表着:键盘输入结束(End Of File,EOF 或 End OfInput)的意思;另外,他也可以用来取代 exit。
  • exit 指令 : 可以用来退出当前用户登录。

2、举例

(1)Ctrl + R

之前写了一个批量化脚本,这个命令很长,但又忘记了,那么可以利用 Ctrl + r 去找。


(2)Tab

假如我们忘记了某个命令后面是怎么拼的,我们可以按两下 Tab 就可以查看系统下所有以你输入字母开头的命令。如果命令只有一条,那么会直接对命令进行补齐。

如果要显示的命令太多,它会询问我们是否要显示。


(3)Ctrl + C

假如命令行被死循环或者错误程序刷屏了,想结束它就可以使用 Ctrl + C 命令就可以中止。


(4)exit | Ctrl + D

假如使用自己的帐号登录上了 Linux,后续又从自己的帐号登录上其它帐号,这时想退出就可以使用 exit 命令。Ctrl + D,通常代表键盘输入结束(End Of File 或 End Oflnput)的意思,它可以代替 exit 命令。


二十三、关机

1、语法

shutdown [选项]


2、常用选项

  • -h : 将系统的服务停掉后,立即关机。
  • -r : 在将系统的服务停掉之后就重新启动。
  • -t sec : -t 后面加秒数 ,亦即过几秒后关机的意思。

注意:开机没有命令,因为它用的是电源。


【扩展命令】

  1. 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last。
  2. 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln。
  3. 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab。
  4. 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup。
  5. 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who。
  6. 其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。
相关推荐
康熙38bdc1 小时前
Linux 进程优先级
linux·运维·服务器
hhzz1 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
只是有点小怂1 小时前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
三枪一个麻辣烫2 小时前
linux基础命令
linux·运维·服务器
cuisidong19972 小时前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
光通信学徒3 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
南种北李3 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化
小飞猪Jay3 小时前
面试速通宝典——10
linux·服务器·c++·面试
暗恋 懒羊羊4 小时前
Linux 生产者消费者模型
linux·开发语言·ubuntu
安红豆.5 小时前
Linux基础入门 --13 DAY(SHELL脚本编程基础)
linux·运维·操作系统