Linux系统编程:(一)基础指令详解

前言:开启Linux命令行的高效之旅

如果你曾对Linux终端里密密麻麻的指令感到陌生,或是想从"图形界面操作"迈向"命令行高效管理",那么这篇博客正是为你准备的Linux基础指令入门指南

在Linux的世界里,命令行不是冰冷的工具,而是掌控系统的"魔法咒语" ------通过它,你可以精准浏览文件、管理目录、查看日志、甚至自动化复杂任务。这篇博客将围绕19个核心Linux指令展开(如lscdcpfind等),从"是什么、怎么用、实战场景"三个维度,带你一步步解锁命令行的实用技能。

无论你是刚接触Linux的新手(想摆脱图形界面的束缚),还是需要巩固基础的老手(想梳理指令逻辑),这些指令都是你理解Linux文件系统、提升操作效率的基石 。接下来的内容,我们会逐个解析这些指令的功能、常用选项和典型用法,让你在终端前不再迷茫,真正体会到"一行命令,事半功倍"的快感。现在,让我们从第一个指令ls开始,踏上这段探索Linux命令行的旅程吧!

1.ls指令

  • 语法
bash 复制代码
ls[选项][目录或文件]
  • 功能:对于目录,该命令列出该目录下的所有子目录与文件;对于文件,该命令列出文件名以及其他信息。

常用选项:

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

使用示例:

bash 复制代码
[root@VM-0-5-centos lesson1]# ls
113
[root@VM-0-5-centos lesson1]# ls -a
.  ..  113
[root@VM-0-5-centos lesson1]# ls -a -l
total 12
drwxr-xr-x  3 root root 4096 May  6 15:44 .
dr-xr-x---. 8 root root 4096 May  9 19:51 ..
drwxr-xr-x  2 root root 4096 May  6 20:21 113
[root@VM-0-5-centos lesson1]# ls -a -l -F
total 12
drwxr-xr-x  3 root root 4096 May  6 15:44 ./
dr-xr-x---. 8 root root 4096 May  9 19:51 ../
drwxr-xr-x  2 root root 4096 May  6 20:21 113/
[root@VM-0-5-centos lesson1]# ls -alFn
total 12
drwxr-xr-x  3 0 0 4096 May  6 15:44 ./
dr-xr-x---. 8 0 0 4096 May  9 19:51 ../
drwxr-xr-x  2 0 0 4096 May  6 20:21 113/
[root@VM-0-5-centos lesson1]# 

2. pwd指令

  • 语法
bash 复制代码
pwd
  • 功能:显示当前用户所在的目录

使用示例:

bash 复制代码
[root@VM-0-5-centos lesson1]# pwd
/root/lesson1
[root@VM-0-5-centos lesson1]# 

3. cd指令


了解cd指令之前,需要对Linux的路径有一定的理论知识了解:

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

  • 其中普通文件一定是目录树的叶子节点;

  • 目录可能是叶子(空目录),也可能是路上节点;

  • 理解路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案来进行定位文件。其中任何一个节点,都只有一个父节点,所以,从根目录开始,定位指定文件,路径具有唯一性;

  • 绝对路径:一般从/开始,不依赖其他目录的定位文件的方式;

  • 相对路径:相对于当前用户所处目录,定位文件的路径方式;

  • 绝对路径一般不会随着用户的路径变化而丧失唯一性,一般在特定服务的配置文件中经常被使用;

  • 相对路径因为它的便捷性,一般在命令行中使用较多。


了解完Linux路径的相关知识后,正式学习cd指令:

  • 语法
bash 复制代码
cd 目录名字
  • 功能:改变工作目录,将当前工作目录更改到指定的目录下。

使用示例:

bash 复制代码
# 返回上级⽬录 
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home
# 绝对路径定位⽬录或者⽂件 
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test
# 相对路径定位⽬录或者⽂件 
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp
# 每⼀次新建⼀个⽤⼾都会在/home⽬录下为新⽤⼾创建新的⼯作⽬录,⽬录以新⽤⼾名称命名 
# root⽤⼾在安装操作系统的时候,就已经内置了⼯作⽬录: /root 
[whb@bite-alicloud temp]$ ls /home
bss gaobo luojie whb wudu
# 快速进⼊⾃⼰的家⽬录 
[whb@bite-alicloud test]$ whoami
whb
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ~
[whb@bite-alicloud ~]$ pwd
/home/whb
# 返回到最近访问⽬录 
[whb@bite-alicloud ~]$ pwd # 当前在/home/whb⽬录下 
/home/whb
[whb@bite-alicloud ~]$ cd / # 进⼊/⽬录 
[whb@bite-alicloud /]$ pwd
/
[whb@bite-alicloud /]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/home/whb 
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/ 
/
[whb@bite-alicloud /]$ pwd
/
[whb@bite-alicloud /]$ cd - # 同上 
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb

4. touch指令


在学习touch指令之前,首先了解一下Linux系统中的文件类型:

在 Linux 系统中,可以通过 ls -l命令查看文件类型,第一个字符即为对应的类型标识。常见文件类型汇总如下:

  • -:普通文件(Regular File)

    如文本文件、二进制程序、压缩包等,是最基本的文件类型。

  • d:目录文件(Directory)

    用于组织和容纳其他文件或子目录,相当于文件夹。

  • l:符号链接文件(Symbolic Link)

    类似于快捷方式,指向另一个文件或目录,可跨文件系统。

  • c:字符设备文件(Character Device)

    按字符流进行 I/O 的设备文件,如终端(/dev/tty)、串口等。

  • b:块设备文件(Block Device)

    按数据块进行读写的设备文件,如硬盘(/dev/sda)、U 盘等。

  • p:命名管道文件(FIFO / Named Pipe)

    用于进程间通信,数据先进先出,可在文件系统中看到对应文件名。

  • s:套接字文件(Socket)

    用于进程间网络通信或本地进程间通信,常见于 /run/tmp等目录。

这些字符通常显示在 ls -l输出行的最左侧,用于快速判断文件类型。


有了上面的基础之后,来学习touch指令:

  • 语法
bash 复制代码
touch [选项]... ⽂件...  
  • 功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建⼀个不存在的文件。
  • 常用选项:
    • -a:修改文件的访问时间;
    • -c:修改文件的修改时间。

使用示例:

bash 复制代码
# 创建普通⽂件
[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ touch newFile.txt
[whb@bite-alicloud test]$ ls
dir file.txt newFile.txt
 
# 查看⽂件时间
[whb@bite-alicloud test]$ stat newFile.txt
  File: 'newFile.txt'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty
file
Device: fd01h/64769d     Inode: 1844719     Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:06:45.832787572 +0800
Modify: 2023-01-11 15:06:45.832787572 +0800
Change: 2023-01-11 15:06:45.832787572 +0800
 Birth: -
 
# 修改⽂件access时间
[whb@bite-alicloud test]$ touch -a newFile.txt
[whb@bite-alicloud test]$ stat newFile.txt
  File: 'newFile.txt'
  Size: 0     Blocks: 0     IO Block: 4096     regular empty
file
Device: fd01h/64769d     Inode: 1844719     Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:07:00.062846804 +0800
Modify: 2023-01-11 15:06:45.832787572 +0800
Change: 2023-01-11 15:07:00.062846804 +0800 # 该时间为何会变化?
 Birth: -
 
# 修改⽂件Modify时间
[whb@bite-alicloud test]$ touch -m newFile.txt
[whb@bite-alicloud test]$ stat newFile.txt
  File: 'newFile.txt'
  Size: 0     Blocks: 0     IO Block: 4096     regular empty
file
Device: fd01h/64769d     Inode: 1844719     Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1003/ whb) Gid: ( 1003/ whb)
Access: 2023-01-11 15:07:00.062846804 +0800
Modify: 2023-01-11 15:09:19.428426903 +0800
Change: 2023-01-11 15:09:19.428426903 +0800
 Birth: -

5. mkdir指令

  • 语法
bash 复制代码
mkdir [选项] dirname...
  • 功能:在当前目录下创建一个名为"dirname"的目录。
  • 常用选项:
    • **-p/--parents:**可以是⼀个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即⼀次可以建立多个目录。

使用示例:

bash 复制代码
# 创建普通空⽬录
[whb@bite-alicloud test]$ ls -l
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
[whb@bite-alicloud test]$ mkdir mydir
[whb@bite-alicloud test]$ ls -l
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
 
# 递归建⽴多个⽬录,创建指定路径
[whb@bite-alicloud test]$ mkdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ls -l
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree path1
path1
└── path2
    └── path3
        └── path4
 
# tree命令是⼀个递归以树状结构显⽰指定⽬录的命令,如果没有安装
# 如果当前⽤⼾是root: yum install -y tree (因为现在开始⽤的都是root,所以推荐这个⽤
法)
# 如果当前⽤⼾是普通⽤⼾: sudo yum install -y tree (后⾯讲讲完vim,⼤家才能将⾃⼰添
加到系统信任列表中,暂时普通⽤⼾⽆法使⽤sudo)

6. rmdir指令和rm指令

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

  • 语法
bash 复制代码
rmdir [-p] [dirName]
  • 适用对象:具有当前目录操作权限的所有使用者。
  • 功能:删除空目录。
  • 常用选项:
    • -p:当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。

使用示例:

bash 复制代码
# 删除空⽬录
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree mydir/
mydir/
 
0 directories, 0 files
[whb@bite-alicloud test]$ rmdir mydir
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
 
# 删除路径
[whb@bite-alicloud test]$ tree path1
path1
└── path2
    └── path3
        └── path4
 
3 directories, 0 files
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
 
# 指定路径中有不为空的路径,便⽆法删除
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3
rmdir: failed to remove 'path1/path2/path3': Directory not empty
 
[whb@bite-alicloud test]$ touch path1/myfile.txt
[whb@bite-alicloud test]$ touch path1/path2/myfile.txt
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2
    ├── myfile.txt
    └── path3
        └── path4
 
3 directories, 2 files
[whb@bite-alicloud test]$ rmdir -p path1/path2/path3/path4
rmdir: failed to remove directory 'path1/path2': Directory not empty

rm指令

  • 语法
bash 复制代码
 rm [-f-i-r-v] [dirName/dir]
  • 适用对象:所有使用者。
  • 功能:删除文件或目录。
  • 常用选项:
    • -f:即使文件属性为只读(即写保护),也可以直接进行删除操作。
    • -i:删除前逐一询问:是否进行删除操作。
    • -r:删除目录及其下所有文件。

使用示例:

bash 复制代码
# 删除普通⽂件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm file.txt
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
 
# 删除⽬录⽂件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm dir
rm: cannot remove 'dir': Is a directory
[whb@bite-alicloud test]$ rm -r dir
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
 
# 删除普通⽂件前询问
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm -i newFile.txt
rm: remove regular empty file 'newFile.txt'? y
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
 
# 删除⽬录前询问
[whb@bite-alicloud test]$ mkdir -p d/d/d/d
[whb@bite-alicloud test]$ tree d
d
└── d
    └── d
        └── d
 
3 directories, 0 files
[whb@bite-alicloud test]$ rm -ri d
rm: descend into directory 'd'? y
rm: descend into directory 'd/d'? y
rm: descend into directory 'd/d/d'? y
rm: remove directory 'd/d/d/d'? y
rm: remove directory 'd/d/d'? y
rm: remove directory 'd/d'? y
rm: remove directory 'd'? y
[whb@bite-alicloud test]$ ll
total 0
 
# 递归强制删除⾮空⽬录
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2
    └── myfile.txt
 
1 directory, 2 files
[whb@bite-alicloud test]$ rm -f path1
rm: cannot remove 'path1': Is a directory
[whb@bite-alicloud test]$ rm -rf path1
[whb@bite-alicloud test]$ ll
total 0

rmdir 与 rm 命令的区别

rmdir

  • 仅用于删除空目录
  • 无法删除文件或非空目录
  • 命令格式:rmdir 目录名

rm

  • 可删除文件和非空目录(配合选项)
  • 常用选项:
    -r 递归删除目录及其内容
    -f 强制删除不提示
  • 命令格式:rm [选项] 文件/目录名

关键差异

rmdir 是目录专用且安全性较高,rm 功能全面但需谨慎使用防止误删。删除非空目录必须使用 rm -r

7. man指令

Linux的命令有很多参数,我们不可能全都能记住,所以可以通过查看联机手册来获取帮助,man指令的功能正是如此。

  • 语法
bash 复制代码
man [选项] 命令
  • 常用选项:
    • -k:根据关键字搜索联机帮助。
    • num:只在第 num 章节查找。
    • -a:显示所有章节的帮助信息,默认情况下 man 找到第一个匹配的章节后就会停止,使用 - a 选项可继续查看后续章节。
  • 解释:man手册分为9章,不同的系统可能存在差别。
    • 1是普通的命令;

    • 2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件);

    • 3是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件;

    • 4略;

    • 5是指文件的格式,比如passwd,就会说明这个文件中各个字段的含义;

    • 6是给游戏留的,由各个游戏自己定义;

    • 7是附件还有一些变量,比如像environ这种全局变量在这里就有说明;

    • 8是系统管理用的命令,这些命令只能由root使用,如ifconfig;

    • 9略。

使用示例:

bash 复制代码
#查看 printf  指令的基础用法(默认是从第 1 章节查找的):
[whb@bite-alicloud test]$ man printf
#输出结果如下(截取部分):
PRINTF(1)                    User Commands                   PRINTF(1)
 
NAME
       printf - format and print data
 
SYNOPSIS
       printf FORMAT [ARGUMENT]...
       printf OPTION
 
DESCRIPTION
       Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:
 
       --help display this help and exit
 
       --version
              output version information and exit
 
...


[whb@bite-alicloud test]$ man fork # 查看系统调⽤,默认没有这个指令,man就⾃动
去2号⼿册查找 
[whb@bite-alicloud test]$ man 2 frok # 查看系统调⽤ 
[whb@bite-alicloud test]$ man 3 printf # 查看C库函数 
[whb@bite-alicloud test]$ man 7 signal # 查看变量 
[whb@bite-alicloud test]$ man 7 environ
[whb@bite-alicloud test]$ man man # 查看man⼿册⾃⼰ 

8. cp指令

  • 语法
bash 复制代码
cp [选项] 源文件或目录 目标文件或目录
  • 功能:复制文件或目录。
  • 说明:
    • 若目标是已存在的目录,会将源文件 / 目录复制到该目录下。
    • 若目标是不存在的文件,会创建该文件并将源文件内容复制进去。
    • 若同时指定多个源文件 / 目录,目标必须是已存在的目录,否则会报错。
  • 常用选项:
    • -f/--force:强行复制,忽略目标文件已存在的情况,直接覆盖。
    • -i/--interactive:覆盖文件前询问用户,避免误操作。
    • -r:递归处理,复制目录时必须使用该选项,否则无法复制子目录及其中的文件。

使用示例:

bash 复制代码
# cp普通⽂件 
[whb@bite-alicloud test]$ echo "你好">myfile.txt
[whb@bite-alicloud test]$ cat myfile.txt 
你好
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cp myfile.txt myfile-backup.txt
[whb@bite-alicloud test]$ ll
total 8
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cat myfile-backup.txt 
你好
# 将多个⽂件拷⻉到指定路径下 
[whb@bite-alicloud test]$ ll
total 8
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ mkdir dir
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 15:48 dir
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cp *.txt dir # *表⽰通配符,匹配所有.txt结尾的⽂件名 
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 15:48 dir
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ tree dir
dir
├── myfile-backup.txt 
└── myfile.txt 
# cp如果⽬标⽂件存在,就覆盖 
[whb@bite-alicloud test]$ echo "hello bite tech" > myfile.txt
[whb@bite-alicloud test]$ cat myfile.txt 
hello bite tech
[whb@bite-alicloud test]$ cp myfile.txt myfile-backup.txt 
[whb@bite-alicloud test]$ cat myfile-backup.txt 
hello bite tech
# 拷⻉前询问 
[whb@bite-alicloud test]$ cp -i myfile.txt myfile-backup.txt 
cp: overwrite 'myfile-backup.txt'? y
# 递归强制拷⻉整个⽬录 
[whb@bite-alicloud ~]$ tree test
test
├── dir 
│   ├── myfile-backup.txt 
│   └── myfile.txt 
├── myfile-backup.txt 
└── myfile.txt 
1 directory, 4 files
[whb@bite-alicloud ~]$ cp -rf test test-backup
[whb@bite-alicloud ~]$ tree test-backup
test-backup
├── dir 
│   ├── myfile-backup.txt 
│   └── myfile.txt 
├── myfile-backup.txt 
└── myfile.txt 
1 directory, 4 files

9. mv指令

  • 语法
bash 复制代码
mv [选项] 源文件或目录 目标文件或目录
  • 功能:
    • 目标是不存在的文件:将源文件 / 目录重命名为目标文件名。
    • 目标是已存在的目录:将源文件 / 目录移动到该目录下。
    • 目标是已存在的文件:默认直接覆盖,使用 - i 选项可询问确认。
  • 常用选项:
    • -f:强制覆盖,若目标文件已存在,不询问直接覆盖。
    • -i:覆盖前询问用户,默认选项(部分系统),提高操作安全性。

使用示例:

bash 复制代码
# 更改名称 
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:56 myfile.txt
[whb@bite-alicloud test]$ mv myfile.txt yourfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:56 yourfile.txt
# 如果当前路径存在同名⽂件,改名即覆盖 
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:58 myfile.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 yourfile.txt
[whb@bite-alicloud test]$ mv yourfile.txt myfile.txt 
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 myfile.txt
# 如果当前路径存在同名⽂件,改名前可以添加i选项,让系统提出警告供⽤⼾做选择 
[whb@bite-alicloud test]$ touch yourfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 myfile.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:59 yourfile.txt
[whb@bite-alicloud test]$ mv -i yourfile.txt myfile.txt 
mv: overwrite 'myfile.txt'? y 
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:59 myfile.txt
 
 # mv整个⽬录 
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ mkdir temp
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 17:56 myfile.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 17:56 temp
[whb@bite-alicloud test]$ mv myfile.txt temp
[whb@bite-alicloud test]$ ls
temp
[whb@bite-alicloud test]$ mv temp ../
[whb@bite-alicloud test]$ ls
[whb@bite-alicloud test]$ ls -d ../temp
../temp

10. cat指令

  • 语法
bash 复制代码
cat [选项] [文件]
  • 功能:查看目标文件中的内容。
  • 常用选项:
    • -b:对非空输出行编号,空行不编号。
    • -n:对所有输出行编号,包括空行。
    • -s:压缩多行空行为一行,避免输出过多空行影响阅读。

使用示例:

bash 复制代码
# 命令⾏构建多⾏⽂本 
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 20 ]; do echo "hello bite"; 
let cnt++; done > temp.txt

# 测试cat基本命令 
[whb@bite-alicloud test]$ cat temp.txt 
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
# cat 输出携带⾏号 
[whb@bite-alicloud test]$ cat -b temp.txt 
 1 hello bite
 2 hello bite
 3 hello bite
 4 hello bite
 5 hello bite
 6 hello bite
 7 hello bite
 ...
# 修改temp.txt,使其携带多⾏空⾏ 
[whb@bite-alicloud test]$ vim temp.txt
# 测试 -b 对⾮空输出⾏编号 
[whb@bite-alicloud test]$ cat -b temp.txt 
 1 hello bite
 2 hello bite
 3 hello bite
 4 hello bite
 5 hello bite
 6 hello bite
 7 hello bite
 ...
# 测试-n 对输出的所有⾏编号 
[whb@bite-alicloud test]$ cat -n temp.txt 
 1 hello bite
 2 hello bite
 3 hello bite
 4 
 5 
 6 
 7 hello bite
 8 hello bite
 9 
 10 hello bite
 11 hello bite
 ...
# 测试 -s 不输出多⾏空⾏,多⾏空⾏压缩成为⼀⾏ 
[whb@bite-alicloud test]$ cat -s temp.txt 
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
...

11. more指令

  • 语法
bash 复制代码
more [选项] [文件]
  • 功能:cat 指令适合查看小型文件,当文件内容较多时,会一次性输出所有内容,不便于阅读。more 指令支持分页显示文件内容,可逐页查看大文件,避免信息刷屏。
  • 常用选项及快捷键操作:
    • -n 行数:指定每页显示的行数。
    • q:退出 more 查看模式。
    • 空格:显示下一页。
    • Enter:显示下一行。
    • b:返回上一页(部分系统支持)。

使用示例:

bash 复制代码
# 命令⾏输出多⾏⽂本 
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello 
bite"; let cnt++; done > temp.txt
# -n 指定输出⾏数 
[whb@bite-alicloud test]$ more -10 temp.txt 
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
--More--(0%)

12. less指令

less指令可以看作是 more的增强版,在功能与灵活性上都更胜一筹。它不仅支持前后双向翻页和关键词搜索,更重要的是采用按需加载机制------无需预先读取整个文件即可开始浏览,因此在查看大型日志或大文件时效率极高,堪称 Linux 下查看文件内容的首选工具。

  • 语法
bash 复制代码
less [选项] [文件]
  • 常用选项:
    • -i:搜索时忽略大小写。
    • -N:显示每行的行号。
  • 快捷键:
    • / 字符串:向下搜索指定字符串。
    • ? 字符串:向上搜索指定字符串。
    • n:重复前一次搜索(与 / 或?配合使用)。
    • N:反向重复前一次搜索。
    • PageUp:向上翻一页。
    • PageDown:向下翻一页。
    • q:退出 less 查看模式。
    • G:跳转到文件末尾。
    • gg:跳转到文件开头。

使用示例:

bash 复制代码
# 命令⾏输出多⾏⽂本 
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello 
$cnt"; let cnt++; done > temp.txt
# 测试搜索和-N等功能 
[whb@bite-alicloud test]$ less -N temp.txt 
 1 hello 0
 2 hello 1
 3 hello 2
 4 hello 3
 5 hello 4
 6 hello 5
 7 hello 6
 8 hello 7
 9 hello 8
 10 hello 9
 11 hello 10
 12 hello 11
 13 hello 12
 14 hello 13
 ...
# 其他选项也可以直接测试 

13. head指令

  • 语法
bash 复制代码
head [选项] [文件]
  • 功能:用于显示文件的开头部分内容,默认显示前 10 行,可通过选项指定显示的行数,适合快速查看文件的头部信息(如配置文件的开头注释、日志文件的起始记录等)。
  • 常用选项:
    • -n <行数>:指定显示的行数,如 -5 表示显示前 5 行,-n-100 表示显示除最后 100 行外的所有内容。

使用示例:

bash 复制代码
#参看默认的文件行数(前10行内容)
[whb@bite-alicloud test]$ head temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9

#指定显示前n行
[whb@bite-alicloud test]$ head -5 temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4

#显示除最后n行之外的所有内容
输出说明:文件总共 2001 行,-n-2000 表示排除最后 2000 行,仅显示前 11 行,该用法适合需要排除文件尾部冗余内容的场景。
[whb@bite-alicloud test]$ head -n-2000 temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
hello 10

14. tail指令

  • 语法
bash 复制代码
tail [选项] [文件]
  • 功能:ail 指令与 head 指令相对应,用于显示文件的末尾部分内容,默认显示最后 10 行。
  • 常用选项:
    • -n <行数>:指定显示的末尾行数。
    • -f:循环读取文件内容,实时监控文件变化,文件新增内容会立即显示在终端,按 Ctrl+C 退出监控。

使用示例:

  • 默认显示文件的最后 10 行,适合快速查看文件的最新记录(如日志文件的末尾报错信息)。
bash 复制代码
[whb@bite-alicloud test]$ tail temp.txt
hello 1991
hello 1992
hello 1993
hello 1994
hello 1995
hello 1996
hello 1997
hello 1998
hello 1999
hello 2000
  • 指定显示文件的 模拟动态日志文件,使用 tail -f 实时监控文件新增内容:n行内容
bash 复制代码
[whb@bite-alicloud test]$ tail -3 temp.txt
hello 1998
hello 1999
hello 2000
  • 模拟动态日志文件,使用tail -f实时监控文件新增内容:
bash 复制代码
# 打开第一个终端,执行循环命令,每秒向文件写入一行内容
[whb@bite-alicloud test]$ while :; do echo "hello bite $(date +%H:%M:%S)"; sleep 1; done >> temp.txt
 
# 打开第二个终端,使用tail -f监控文件变化
[whb@bite-alicloud test]$ tail -f temp.txt
hello 1998
hello 1999
hello 2000
hello bite 18:30:01
hello bite 18:30:02
hello bite 18:30:03
hello bite 18:30:04
...  # 每秒新增一行内容,实时显示
  • 结合 head 和 tail 指令,显示文件指定行数范围中的内容
bash 复制代码
【原理说明:head -200 temp.txt显示文件前 200 行,通过管道符|将结果传递给tail -21,
显示前 200 行中的最后 21 行,即第 180-200 行(200-21+1=180)。该方法是 Linux 中
截取文件指定行范围的常用技巧。】
[whb@bite-alicloud test]$ head -200 temp.txt | tail -21
hello 180
hello 181
hello 182
hello 183
hello 184
hello 185
hello 186
hello 187
hello 188
hello 189
hello 190
hello 191
hello 192
hello 193
hello 194
hello 195
hello 196
hello 197
hello 198
hello 199
hello 200

15. date指令

  • 语法
bash 复制代码
date [选项] [+格式]
  • 功能:用于显示或设置系统时间,支持多种时间格式输出,还能进行时间戳与常规时间的转换,是处理时间相关任务的核心指令。
  • 常用选项:
    • -s <时间字符串>:设置系统时间(仅 root 用户有权限)。
    • -d @<时间戳>:将时间戳转换为常规时间格式。

1. 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,例如:date +%Y:%m:%d ;其中常用的标记列表如下:

  • %H:小时
  • %M:分钟
  • %S:秒
  • %X:相当于%H:%M:%S
  • %d:日
  • %m:月份
  • %Y:完整年份
  • %F:相当于&Y-%m-%d

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. 时间戳

Unix 时间戳(又称 Unix epoch、POSIX time 或 Unix timestamp)是指从 1970 年 1 月 1 日 UTC/GMT 午夜 起至当前时刻所经过的秒数,计算时不包含闰秒。

  • 时间转时间戳 :使用 date +%s命令,可将当前时间转换为时间戳。

  • 时间戳转时间 :使用 date -d@1508749502命令,可将指定时间戳还原为可读时间。


使用示例:

bash 复制代码
# 显⽰常规时间 
[whb@bite-alicloud test]$ date
Wed Jan 11 18:22:50 CST 2023
[whb@bite-alicloud test]$ date +%Y/%m/%d
2023/01/11
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S
2023/01/11-18:23:20
# 显⽰时间戳 
[whb@bite-alicloud test]$ date +%s
1673432636
# 时间戳转成可视时间 
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S -d @0
1970/01/01-08:00:00
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S -d @100000
1970/01/02-11:46:40
[whb@bite-alicloud test]$ date +%Y/%m/%d-%H:%M:%S -d @1000000000
2001/09/09-09:46:40

16. cal指令

  • 语法
bash 复制代码
cal [参数] [年份]

无参数:默认显示当前月份。
单参数:视为年份(范围 1-9999)。
双参数:视为月份和年份。
  • 功能:在 Linux 终端中,cal命令用于显示公历(阳历)日历。公历是目前国际通用的历法,又称格列历或太阳历。、
  • 常用选项:
    • -3:显示上个月、当前月、下个月的三月日历,方便做时间对比。
    • -j:以儒略日(Julian Day)显示,即输出当天是一年中的第几天(从 1 月 1 日的 1 开始计数)。
    • -y:显示当前年份的完整日历。

实战示例:

  • 查看当前月份
bash 复制代码
cal
  • 查看指定年份(如 1949 年)
bash 复制代码
cal 1949
  • 查看相邻三个月
bash 复制代码
cal -3

17. find指令

在 Linux 系统中,find命令是文件管理的核心工具之一。它能够在目录树中递归搜索文件,并根据条件执行指定操作。无论是日常运维还是开发调试,掌握 find都能极大提升效率。

  • 命令特性与注意事项:

    • 权限要求 :在运行消耗资源的 find命令时,建议将其置于后台执行,尤其是遍历大型文件系统(如超过 30GB)时,避免阻塞终端。

    • 兼容性 :即使系统包含网络文件系统(NFS),只要拥有相应权限,find同样有效。

    • 资源消耗 :由于 find会实际访问磁盘,功能强大但也可能消耗较多系统资源。

  • 语法

bash 复制代码
find pathname -options

pathname:搜索的起始路径。
-options:匹配条件或执行动作。
  • 功能:用于在文件树中查找文件,并作出相应处理(可能涉及磁盘访问)。
  • 常用选项:
    • -name:按文件名精确匹配搜索(支持通配符)。
    • 其他高级选项:find命令体系庞大,其他选项建议按需查阅手册,避免一次性记忆过多造成混淆。

实战示例:按名称搜索文件

以下命令将在当前用户的家目录下,搜索所有名为 test.c的文件:

bash 复制代码
find ~ -name test.c

输出:

bash 复制代码
/home/whb/test_code/old_code/test.c
/home/whb/test_code/test.c
...

18. which指令

在 Linux 终端中,我们经常需要确认某个命令到底存放在系统的哪个路径下。which命令就是为此而生的小工具,它能快速告诉你某个可执行文件的绝对路径。

  • 功能:用于搜索并显示系统中指定命令的可执行文件路径。
  • 输出结果解析:
    • 普通命令 :直接显示二进制文件所在的绝对路径(如 /usr/bin/pwd)。

    • 别名(alias)命令:如果该命令被定义了别名,会先显示别名设置,再显示实际的二进制路径。

使用示例:

bash 复制代码
[whb@bite-alicloud test]$ which ls
alias ls='ls --color=auto'
 /usr/bin/ls
[whb@bite-alicloud test]$ which pwd
/usr/bin/pwd

19. whereis指令

在 Linux 中,当我们不仅需要知道命令在哪,还想了解它的源代码、帮助文档或库文件在哪里时,whereis命令就派上了用场。

  • 语法
bash 复制代码
whereis [选项] 文件名
  • 功能说明:whereis是一个专门查找程序二进制文件、源代码和手册页(man page)的工具。它的搜索范围限定在系统预设的特定目录中,因此速度通常比 find更快。

使用示例:

bash 复制代码
[whb@bite-alicloud test]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[whb@bite-alicloud test]$ whereis libc.so
libc: /usr/lib64/libc.so /usr/lib64/libc.a /usr/share/man/man7/libc.7.gz
相关推荐
Agent产品评测局1 小时前
设备运维自动化预警系统,从0到1落地实操方法:2026企业级架构与智能体选型全指南
运维·人工智能·ai·chatgpt·架构·自动化
一池秋_1 小时前
etc/sudo.conf is owned by uid 10258, should be 0解决
linux·运维·服务器
dingdingfish1 小时前
TLPI 第19 章 练习:Monitoring File Events
linux·inotify·tlpi·exercise
Bert.Cai1 小时前
Linux basename命令详解
linux·运维·服务器
源远流长jerry1 小时前
Linux 本机网络通信机制深度解析:Loopback 设备原理
linux·运维·服务器·网络·tcp/ip·nginx·负载均衡
一只小bit2 小时前
Docker 镜像制作:包含自定义镜像及常用命令
运维·docker·容器
网络工程小王2 小时前
【LangGraph 子图(Subgraph)详解】学习笔记
java·服务器·数据库·人工智能·langchain
源远流长jerry2 小时前
Linux 网络性能优化:从应用到内核
linux·运维·服务器·网络·网络协议·性能优化
goyeer2 小时前
【ITIL】指导原则
linux·运维·服务器·数字化·itil