文章目录
- 1.ls指令
- 1.1 ls -l指令
- 1.2 ls-a指令
- 1.2.1文件的类型
- 1.2.2隐藏文件
- 1.2.3[.]\[..]的含义
- 1.3 ls -d指令
- 1.4 ls-F指令
- 1.5ls指令子功能大全
- 2.pwd指令
- 2.1路径分割符
- 2.2/根目录
- 3.mkdir指令
- 3.1 mkdir-p
- 3.2mkdir常用功能
- 4.cd指令
- 4.1多叉树概念
- 4.2绝对/相对路径
- 4.2.1绝对路径
- 4.2.2相对路径
- 4.2.3使用场景
- 4.3cd指令常见操作
- 5.touch命令
- touch命令的常见操作
- 6.whoami指令
- 7.tree指令
- 8.rm指令
- 8.1 rm-r/-f指令
- 8.2 *通配符
- 8.3rm常见操作
- 9.man指令
- man手册
- 10.echo指令
- 10.1输出重定向
- 10.2追加重定向
- 11.cat指令
- 11.1输入重定向
- 11.2常见cat选项
- 11.3cat的缺点
- 12.cp指令
- cp指令速查表
- 13.mv指令
- 13.1重命名
- 13.2剪切
- 13.3剪切并重命名
- 13.4mv目录
- 14.which指令
- 15.alias指令
- 16.more指令
- 17.less指令
- 18.head指令
- 19.tail指令
- 管道操作
- wc -l
- 20.date指令
- 20.1时间戳
- 20.2date 命令核心功能速查表
- 21.cal指令
- 22.find指令
- find命令速览表
- 23.whereis指令
- 24.grep指令
- 24.1grep-v 指令
- 24.2grep-n指令
- 24.3grep -i指令
- 25.zip/unzip指令
- unzip-d解压到指定的目录下
- 26.tar指令
- 26.1 tar指令功能速查表##
- 26.2tar指令的解包和打包
- 27.bc指令
- 28.uname-r指令
- 29.history指令
- 30.关机
前提说明:指令本质就是–可执行文件
指令一定是在系统的某一个位置存在的
在执行指令之前,我们会现在系统中查找对应的指令
指令就是安装到了系统的某种路径下
1.ls指令
语法:ls[选项][目录或文件]
功能:对于目录,该命令列出该目录下所有的子目录与文件,对于文件,将列出文件名以及其他信息
[root@hcss-ecs-000a ~]# ls
code.c
ls是用来显示当前目录下的文件的,那么当前目录是哪个目录呢,所以就用到了pwd指令
至于上面那个语法的选项是什么意思呢,就是你ls(查看)指令还可以携带更多的子功能,比如查看文件属性,查看隐藏文件等等
由于有很多的子功能在这里我演示几个
1.1 ls -l指令
[root@hcss-ecs-000a lesson1]# ls -l
total 0-rw-r--r-- 1 root root 0 May 25 09:54 test.txt
这个就是查看文件的属性,我们可以看见有文件创建的时间,大小,剩下的在后续的学习中会学到
每次这么写又挺麻烦的,所以又简化出了ll命令就是上面那个指令的缩写
[root@hcss-ecs-000a lesson1]# ll
total 0-rw-r--r-- 1 root root 0 May 25 09:54 test.txt
1.2 ls-a指令
这个指令就是查看隐藏的文件
[root@hcss-ecs-000a lesson1]# ls -a
. .. test.txt
这个我们相较于原始版来看多了. …这两个东西,那么这两个东西是什么呢
我们先说指令,ls 后面不止能跟一个选项,还可以跟多个,比如ll是查看文件属性ls -a -l就是查看隐藏文件的属性
[root@hcss-ecs-000a lesson1]# ls -al
total 8
drwxr-xr-x 2 root root 4096 May 25 09:54 .
dr-xr-x---. 6 root root 4096 May 25 09:43 ..-rw-r--r-- 1 root root0 May 25 09:54 test.txt
1.2.1文件的类型
第一行那个有d有-是文件的类型
d:表明是一个目录
-:文件是一个普通文件
1.2.2隐藏文件
在Linux中,以.开头的文件,我们称之为隐藏文件,就是比如说你有些文件不想被别人看到,我们就可以创建隐藏文件
[root@hcss-ecs-000a lesson1]# mkdir .ignore
[root@hcss-ecs-000a lesson1]# ls
test.txt
[root@hcss-ecs-000a lesson1]# ls -a
. .. .ignore test.txt
我们看这个隐藏文件就不能被别人看到了
1.2.3[.][…]的含义
linux下任何一个目录下面都有两个隐藏文件./…
[…]:表示当前路径的上级路径
[root@hcss-ecs-000a lesson1]# cd ..
[root@hcss-ecs-000a ~]# pwd
/root
就是回退到上级路径
[.]:表示当前路径
[root@hcss-ecs-000a lesson1]# cd .
[root@hcss-ecs-000a lesson1]# pwd
/root/lesson1
那么上面那个…还有一点作用那这个.有什么作用呢,我来给大家演示一下
[root@hcss-ecs-000a lesson1]# ls -al
total 28
drwxr-xr-x 3 root root 4096 May 25 10:40 .
dr-xr-x---. 6 root root 4096 May 25 09:43 ..-rwxr-xr-x 1 root root 8968 May 25 10:40 a.out
drwxr-xr-x 2 root root 4096 May 25 10:24 .ignore-rw-r--r-- 1 root root 93 May 25 10:37 test.cc-rw-r--r-- 1 root root0 May 25 09:54 test.txt
我这里给大家形成了一份可执行程序a.out,那我们想要执行这个可执行程序就必须指明在当前路径下运行
[root@hcss-ecs-000a lesson1]# ./a.out
hello world
它要运行得先找到这个a.out在哪个路径下
[.]存在的意义:帮我用户定位当前目录下的一个文件
那就会有人有疑问,它不是已经在当前目录下了吗
**1.容易混淆 **你单纯只有一个a.out谁知道你单纯的只想输入这个名字还是运行它
**2.优先选择 **当你在当前文件夹输入一个命令的时候,系统不会立即去当前这个文件夹里面去找,系统有自己的一套地图,也就是环境变量,它会先去自己的地图找a.out这个文件,找不到的话它就告诉你找不到,所以./告诉系统优先去这个路径下查找
1.3 ls -d指令
上面显示的都是一个目录下文件的信息,那我们就想查看这个文件的信息
所以就有了ls-d指定目录 将目录像文件一样显示,而不是显示其下的文件
[root@hcss-ecs-000a ~]# ls -dl lesson1
drwxr-xr-x 3 root root 4096 May 25 10:40 lesson1
1.4 ls-F指令
在每个文件名后附上一个字符以说明该文件的类型,"*"表示可执行的普通文件;
"/“表示目录;”@“表示符号链接;”|“表示FIFOs;”="表示套接字
[root@hcss-ecs-000a lesson1]# ls -alF
total 28
drwxr-xr-x 3 root root 4096 May 25 10:40 ./
dr-xr-x---. 6 root root 4096 May 25 09:43 ../
-rwxr-xr-x 1 root root 8968 May 25 10:40 a.out*
drwxr-xr-x 2 root root 4096 May 25 10:24 .ignore/
-rw-r--r-- 1 root root 93 May 25 10:37 test.cc
-rw-r--r-- 1 root root0 May 25 09:54 test.txt
1.5ls指令子功能大全
ls -l:以长格式显示文件和目录的详细信息,涵盖文件类型、权限、所有者、大小、修改日期等,执行后能让你清晰看到每个文件和目录的诸多属性。
ls -lh:同样以长格式显示详细信息,但文件大小会以人类可读的方式呈现,如 1K、10M 等,方便直观了解文件大小规模。
ls -a:显示所有文件和目录,包含以 . 开头的隐藏文件和目录,在一些系统配置文件等隐藏文件所在目录使用,可将它们都显示出来。
ls -A:列出除了 . 和 .. 以外的所有文件和目录,即显示隐藏文件但排除代表当前目录和上级目录的特殊符号。
ls -t:按修改时间排序,最近修改的文件或目录会显示在前面,有助于快速找到最新改动的内容。
ls -S:按文件大小排序,文件大小从大到小排列,能让你快速知晓哪些文件占用空间较大。
ls -r:逆序显示文件和目录,与正常排序顺序相反。
ls -d:只显示目录本身,不显示目录下的文件,例如只想查看某个目录的基本信息而不关心其内部文件时可使用。
ls -i:显示文件和目录的 inode 号,inode 号是文件系统中标识文件和目录的唯一编号。
ls -R:递归显示当前目录及其子目录中的文件和子目录列表,可深入查看整个目录树的内容。
ls --color:以彩色显示当前目录下的文件和子目录列表,不同类型的文件会用不同颜色区分,更易于识别。
ls -F:在每一个文件的末尾加上一个字符说明该文件的类型,如用 @ 表示符号链接、| 表示 FIFOS、/ 表示目录、= 表示套接字。
ls -s:在每个文件的后面打印出文件的大小,直观展示文件占用空间情况。
ls -L:列出文件的链接名,可查看文件的链接指向信息。
2.pwd指令
语法:pwd
功能:显示用户当前所在的目录
[root@hcss-ecs-000a lesson1]# pwd
/root/lesson1
相当于我在windows中点击某个文件查看到的路径
那我们如何创建一个目录呢,所以就用到了mkdir指令,相当于make dir,创建目录
2.1路径分割符
当我们查看路径的时候发现会有很多的/,在Linux中这些**/相当于是路径分割符**
在windows下\是路径分割符
分割符中间的就是目录,最后一个有可能是目录也有可能是其他
2.2/根目录
[root@hcss-ecs-000a /]# pwd
/
当我们一直回退回退发现到这里的时候回退不下去了
这个[/]:代表的就是Linux的根目录
那我们怎么证明这是一个目录呢
[root@hcss-ecs-000a /]# ls -dl
dr-xr-xr-x. 19 root root 4096 Mar 17 20:54 .
我们在上面说过第一个字符是d的代表这就是一个目录
一个目录
3.mkdir指令
语法:mkdir[选项]dirname
功能:在当前目录下创建一个名为"dirname"的目录
[root@hcss-ecs-000a ~]# mkdir lesson1
[root@hcss-ecs-000a ~]# ls
code.c lesson1
那我们创建一个目录也就是文件夹我们该如何进入这个目录然后才可以完成后续的一系列操作呢,所以就有了cd指令
那我们创建目录的时候难道要一个一个创建吗
3.1 mkdir-p
**可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
**
[root@hcss-ecs-000a lesson1]# mkdir d3/d4/d5
mkdir: cannot create directory ‘d3/d4/d5’: No such file or directory
[root@hcss-ecs-000a lesson1]# mkdir -p d3/d4/d5
[root@hcss-ecs-000a lesson1]# tree /root/lesson1
/root/lesson1
├── a.out
├── d1
│ └── d2
├── d3
│ └── d4
│ └── d5
├── test.cc
└── test.txt
3.2mkdir常用功能
mkdir -p path/to/dir:递归创建目录,若路径中部分目录不存在也能按层级依次创建,好比要进入最里面的房间,沿途房间若没有就自动建好。如 mkdir -p project/src/main 可在当前路径下按层级创建完整的目录结构。
mkdir -m 755 dir:创建目录并指定权限,类似给房间设置特定的访问规则。例如 mkdir -m 755
4.cd指令
[root@hcss-ecs-000a ~]# cd lesson1/
[root@hcss-ecs-000a lesson1]# pwd
/root/lesson1
那么进入到这个目录里面我们要进行相关的操作,现在就比如说我要创建一个文本文件,就用到了touch指令
4.1多叉树概念
既然一个目录里面可以再创建一个新的目录和普通文件,那么注定了Linux的目录结果整体是一个多叉树,它的叶子节点,一定是空目录或者非目录文件,路上节点一定是一个非空目录
cd…就是相当于不断在这颗多叉树进行回退
所以我们所有的文件或目录的增删查改,本质就是对这颗多叉树的增删查改
所以我们定位一个文件,通常用路径来进行定位(路径定位具有唯一性)
4.2绝对/相对路径
为什么路径定位具有唯一性呢
一个节点可能有很多的子节点,但是这个节点的父节点只有一个,所以我们能通过父节点不断的查找查找到你这个子节点,就好比你爷爷有很多儿子,但是你的爸爸只有一个,通过你的爸爸就能找到你
4.2.1绝对路径
我们把从/开始定位到指定位置,具有唯一性的路径,叫作绝对路径
[root@hcss-ecs-000a /]# cd /root/lesson1/
[root@hcss-ecs-000a lesson1]# pwd
/root/lesson1
所以我们就能指定路径来找到相应的文件
4.2.2相对路径
你的爷爷有很多的儿子,你找错了找到了你的叔叔,那你就可以回退到你的爷爷在问你的爸爸在哪里
我们以自己当前所处的路径为起始参照位置,来进行特定文件的定位,这个就叫做相对路径
但是你所处的路径发生变化,你过继到别人家了,那么可能相对路径就失效了
4.2.3使用场景
1.绝对路径往往比较长但是不变,一般在一些固定场景,配置文件中使用
2.一般命令行输入,比较常用相对路径
4.3cd指令常见操作
cd .. :返回上级目录
cd /home/lesson1 :绝对路径
cd ../lesson1 :相对路径
cd ~ :进入用户家目录
cd - :返回最近访问目录
/
[root@hcss-ecs-000a ~]# cd /home/wyx
[root@hcss-ecs-000a wyx]# cd ~
[root@hcss-ecs-000a ~]# pwd
/root
[root@hcss-ecs-000a ~]# cd -
/home/wyx
5.touch命令
语法:touch[选项]…文件…
功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件
不能创建目录只能创建普通文件
[root@hcss-ecs-000a lesson1]# touch test.txt
[root@hcss-ecs-000a lesson1]# ls
test.txt
这样我们就创建了一个普通文件
touch命令的常见操作
touch -a 文件名:仅更新文件的访问时间为系统当前时间,其他时间不受影响。
touch -m 文件名:只更新文件的修改时间为系统当前时间,不改变访问时间等。
touch -d "特定时间" 文件名:把文件的时间戳设置为指定的特定时间,比如 “2025-01-01 12:00:00” 。
touch -r 参考文件名 目标文件名:将目标文件的时间戳设置成参考文件的时间戳。
6.whoami指令
查看当前用户
在Linux中用户分为两类
1.超级用户root
[root@hcss-ecs-000a ~]# pwd
/root
[root@hcss-ecs-000a ~]# whoami
root
2.其他(普通用户)
[wyx@hcss-ecs-000a ~]$ pwd
/home/wyx
[wyx@hcss-ecs-000a ~]$ whoami
wyx
pwd显示的就是用户的家目录
centos系统中,所有的普通用户,用户账号都会统一放在/home
[root@hcss-ecs-000a ~]# ls /home
wyx wzh
7.tree指令
yum install -y tree
这个是安装这个命令,安装的时候需要root账号
[root@hcss-ecs-000a ~]# tree /root/lesson1
/root/lesson1
├── a.out
├── d1
│ └── d2
├── test.cc
└── test.txt
这样就可以以树状形式来给我们展开这个目录了
8.rm指令
rm是命令可以同时删除文件或目录
语法:rm [-f-i-r-v][dirname/dir]
**适用对象:**所有使用者
**功能:**删除文件或目录
[root@hcss-ecs-000a lesson1]# rm test.cc test.txt
rm: remove regular file ‘test.cc’? y
rm: remove regular empty file ‘test.txt’? y
[root@hcss-ecs-000a lesson1]# tree /root/lesson1
/root/lesson1
├── a.out
├── d1
│ └── d2
└── d3
└── d4
└── d55 directories, 1 file
当超级用户在删除的时候它会询问你真的要删除这个文件吗
这是我们在删除普通文件的场景下
[root@hcss-ecs-000a lesson1]# rm d1
rm: cannot remove ‘d1’: Is a directory
8.1 rm-r/-f指令
当我们删除目录的时候,你可以认为目录是一颗子树,由许多的子目录和普通文件构成,所以你在删除的时候就不单单是删除,你要递归式的删除-r,但是老是像上面一样询问又太麻烦所以可以带上-f表示不再询问式的删除
[root@hcss-ecs-000a lesson1]# rm -r -f d3
[root@hcss-ecs-000a lesson1]# tree /root/lesson1
/root/lesson1
└── a.out
0 directories, 1 file
8.2 *通配符
[root@hcss-ecs-000a lesson1]# ls *
a.out test1.c test2.c test3.c test.txt
[root@hcss-ecs-000a lesson1]# ls *.c
test1.c test2.c test3.c
[root@hcss-ecs-000a lesson1]# ls test.*
test.txt
它可以帮你找到匹配的前缀和后缀的文件
[root@hcss-ecs-000a lesson1]# rm * -rf
[root@hcss-ecs-000a lesson1]# tree /root/lesson1
/root/lesson10 directories, 0 files
所以我们想要删除该目录下的相应文件可以采用加入*通配符
8.3rm常见操作
rm -r dir:递归删除指定目录及其所有子目录和文件,就像连根拔起一棵大树及其所有枝叶。
rm -f file:强制删除文件,不进行提示确认,类似不问后果地快速扔掉东西。
rm -rf dir:强制递归删除目录,能迅速清除整个目录结构,使用时需谨慎,宛如强力清扫,可能造成难以挽回的损失。
rm -i file:删除文件前进行交互式确认,会询问是否删除,如同在扔掉东西前先问一下自己是否确定。
9.man指令
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令式man
语法: man [选项] 命令
这个很重要因为我们很难记住所以的指令
[root@hcss-ecs-000a lesson1]# man ls
我们连man这个指令都不会用
就可以
[root@hcss-ecs-000a lesson1]# man man
man手册
1 - 用户命令:涵盖普通用户日常在 shell 中可执行的各种命令,像 ls 用于查看目录内容、cp 进行文件复制等操作都在此列。
2 - 系统调用:主要涉及内核提供给程序使用的系统调用接口,程序通过这些接口请求内核服务,例如 open 用于打开文件、read 读取文件内容。
3 - 库调用:包含各种标准 C 库函数,这些函数为程序开发提供了丰富的功能,比如 printf 用于格式化输出、strcpy 进行字符串复制。
4 - 特殊文件:介绍系统中的特殊文件和设备文件,像 /dev 目录下的设备文件,它们代表了系统的硬件设备,如磁盘、终端等。
5 - 文件格式和约定:说明系统中各类配置文件、数据文件的格式和使用约定,例如 /etc/passwd 文件存储用户账户信息,这里规定了其记录的格式。
6 - 游戏:包含一些简单的游戏程序相关信息,不过这部分内容较少,例如 tetris 等小游戏。
7 - 杂项:涉及各种杂项信息,如宏包、约定、字符集、编码等内容,像 ASCII 字符集的介绍就在此分类。
8 - 系统管理命令:是系统管理员专用的命令集合,用于系统的维护和管理,例如 fdisk 对磁盘进行分区、mount 挂载文件系统。
9 - 内核例程:主要是关于内核内部函数和驱动程序的相关文档,一般供内核开发者参考,比如内核模块的编写规范。
10.echo指令
echo指令可以把后面跟的字符串原封不动的给你打印到显示器文件上
[root@hcss-ecs-000a lesson1]# echo "hello world"
hello world
10.1输出重定向
后面跟>可以把字符串打到文件里面
[root@hcss-ecs-000a lesson1]# echo "hello world" > test.txt
[root@hcss-ecs-000a lesson1]# cat test.txt
hello world
1.没有在显示器显示
2.而是这个数据被写入到了文件中
这种我们叫作输出重定向,本来应该显示到显示器的内容写入到了文件中
[root@hcss-ecs-000a lesson1]# echo hello world >text.txt
[root@hcss-ecs-000a lesson1]# cat text.txt
hello world
[root@hcss-ecs-000a lesson1]# echo today >text.txt
[root@hcss-ecs-000a lesson1]# cat text.txt
today
我们可以发现每次打印的内容都不一样
所以>向目标文件写入的时候,是以覆盖写的形式进行写入的
特点
1.清空文件
2.写入内容
根据上面的特点我们就可以得出了
[root@hcss-ecs-000a lesson1]# >text.txt
[root@hcss-ecs-000a lesson1]# cat text.txt
这样既可以达到清空文件的目的
10.2追加重定向
那我就想不断往这个文件里面写入呢
采用>>进行追加重定向,cat指令是内置换行的
[root@hcss-ecs-000a lesson1]# echo good >> text.txt
[root@hcss-ecs-000a lesson1]# echo good >> text.txt
[root@hcss-ecs-000a lesson1]# echo good >> text.txt
[root@hcss-ecs-000a lesson1]# echo good >> text.txt
[root@hcss-ecs-000a lesson1]# echo good >> text.txt
[root@hcss-ecs-000a lesson1]# cat text.txt
good
good
good
good
good
无论是输出重定向还是追加重定向你在向目标文件中打的时候,如果目标文件不存在它会帮你创建好该文件
[root@hcss-ecs-000a lesson1]# echo huhi >>test.txt
[root@hcss-ecs-000a lesson1]# cat test.txt
huhi
[root@hcss-ecs-000a lesson1]# ls
test.txt text.txt
11.cat指令
语法:cat[选项][文件]
功能:查看目标文件的内容
打印文件内容
[root@hcss-ecs-000a lesson1]# cat test.txt
hello world
在cat后面什么都不跟,它默认从键盘读入数据
[root@hcss-ecs-000a lesson1]# cat
1
1
2
2
3
3
11.1输入重定向
本来应该从键盘文件中读取数据,现在不用从键盘读取,从指定的文件读取数据
采用<
[root@hcss-ecs-000a lesson1]# cat <text.txt
good
good
good
good
good
11.2常见cat选项
cat -n file:显示行号(给每行文字加序号,调试代码或日志时快速定位)
cat -b file:智能行号(仅给非空行编号,过滤空白行的计数干扰)
cat -s file:压缩空行(将连续多个空行合并为单个,清理冗余空白)
///
[root@hcss-ecs-000a lesson1]# cat text.txt
good
good
good
good
goodgood
good
[root@hcss-ecs-000a lesson1]# cat -n -b text.txt1 good2 good3 good4 good5 good6 good7 good
[root@hcss-ecs-000a lesson1]# cat -s text.txt
good
good
good
good
goodgood
good
11.3cat的缺点
如果文件很大的话有一万行,我要看1000行cat就没什么用了
cat只适合看小文本
12.cp指令
语法:cp[选项]源文件或目录 目标文件或目录
功能:复制文件或目录
**说明:**cp指令用于复制文件或目录,如同时两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
拷贝指令顾名思义有拷贝文件的作用
[root@hcss-ecs-000a lesson1]# cp test.txt myt.txt
[root@hcss-ecs-000a lesson1]# ll
total 8-rw-r--r-- 1 root root 12 May 25 14:57 myt.txt-rw-r--r-- 1 root root 12 May 25 14:52 test.txt
我们也不止可以拷贝到当前路径,还可以拷贝到上级路径
[root@hcss-ecs-000a lesson1]# cp test.txt ../mytest.txt
[root@hcss-ecs-000a lesson1]# ls ../
code.c lesson1 mytest.txt
常识告诉我们同一个目录下不能存在同名的文件,因为如果有同名文件就失去了唯一性,就比如说生了一个双胞胎还给它们取同一个名字
那我们拷贝目录呢
[root@hcss-ecs-000a ~]# cp -r lesson1 lesson2
[root@hcss-ecs-000a ~]# ls
code.c lesson1 lesson2 mytest.txt
因为我们目录不止单个文件所以我们要递归式的拷贝目录
cp指令速查表
cp -i file1 file2:在覆盖已有文件 file2 前进行交互式确认,避免误覆盖重要文件。
cp -r dir1 dir2:递归复制目录 dir1 及其所有子目录和文件到 dir2,适合迁移整个目录结构。
cp -p file1 file2:保留文件的权限、所有者、时间戳等属性进行复制,确保文件原始特性不变。
cp -l file1 file2:创建硬链接而不是复制文件内容,多个文件名指向同一物理数据块,节省存储空间。
cp -s file1 file2:创建符号链接,类似于快捷方式,file2 指向 file1 的路径。
cp --preserve=all file1 file2:全面保留文件的所有属性(权限、时间戳、扩展属性等)进行复制。
cp -u file1 file2:仅当源文件 file1 比目标文件 file2 新,或者目标文件不存在时才进行复制。
cp --verbose file1 file2:在复制过程中显示详细信息,让你清楚知晓复制进度和状态。
cp -t dir file1 file2:将多个文件(如 file1 和 file2)复制到指定目录 dir,方便批量操作。
13.mv指令
在mv指令下目录和普通文件的操作是相同的
13.1重命名
那我们这个文件的名字打错了或者是不是我们想要的我们就可以用mv指令
[root@hcss-ecs-000a lesson1]# ls
myt.txt test.txt
[root@hcss-ecs-000a lesson1]# mv myt.txt day25.txt
[root@hcss-ecs-000a lesson1]# ls
day25.txt test.txt
13.2剪切
mv指令还有剪切的作用
[root@hcss-ecs-000a lesson1]# mv day25.txt ../
[root@hcss-ecs-000a lesson1]# ls ../
code.c day25.txt lesson1 mytest.txt
13.3剪切并重命名
mv还可以剪切并重命名
[root@hcss-ecs-000a lesson1]# mv test.txt ../mytest.txt
[root@hcss-ecs-000a lesson1]# ls ../
code.c lesson1 mytest.txt
其实功能上都叫剪切并重命名
13.4mv目录
[root@hcss-ecs-000a lesson1]# mkdir lesson2
[root@hcss-ecs-000a lesson1]# mv lesson2 ../
[root@hcss-ecs-000a lesson1]# ls ../
code.c lesson1 lesson2 mytest.txt
[root@hcss-ecs-000a lesson1]# mkdir lesson3
[root@hcss-ecs-000a lesson1]# mv lesson3 ../lesson2
[root@hcss-ecs-000a lesson1]# tree ../lesson2
../lesson2
└── lesson31 directory, 0 files
对于不存在的目录我们就可以把它剪切到上级目录,对于存在的我们会把它放到存在的目录里面
14.which指令
可以在指令路径下,搜索指令文件
[root@hcss-ecs-000a lesson1]# which ls
alias ls='ls --color=auto'/usr/bin/ls
[root@hcss-ecs-000a lesson1]# which ll
alias ll='ls -l --color=auto'/usr/bin/ls
[root@hcss-ecs-000a lesson1]#
这个显示的就是ll是ls -l的别名
15.alias指令
给指令取别名
[root@hcss-ecs-000a lesson1]# alias hao='ls -l -i -a -n'
[root@hcss-ecs-000a lesson1]# which hao
alias hao='ls -l -i -a -n'/usr/bin/ls
[root@hcss-ecs-000a lesson1]# hao
total 12
656099 drwxr-xr-x 3 0 0 4096 May 25 15:28 .
393218 dr-xr-x---. 7 0 0 4096 May 25 15:27 ..
656102 drwxr-xr-x 2 0 0 4096 May 25 10:24 .ignore
那我们想要删除这个别名怎么办
[root@hcss-ecs-000a lesson1]# alias hao=''
[root@hcss-ecs-000a lesson1]# which hao
alias hao=''
这个重命名是临时的,你把你的xshell重新启动就没了
16.more指令
more是一个查看大文本的命令,但是我们在查看的时候它只能支持向下翻不支持向上翻
more file:分页查看文件内容,按空格翻页,适合看大文件。
more +n file:从第 n 行开始显示,能快速定位。
/keyword:搜索文件里的指定关键词,便于找关键信息。
n:在搜索后跳转到下一个匹配项。
q:直接退出 more 查看。
17.less指令
所以我们更常用的是less指令
语法:less[参数]文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件
cnt=1;while [ $cnt -le 10000 ]; do echo "hello Linux $cnt"; let cnt++; done >text.txt
这里是一个shell脚本我们创建了一万行的数字
像我们这样输入就可以快速的定位到你想找到的内容
基本浏览:less file打开文件,可上下滚动浏览,如看配置文件。
翻页操作:按PageUp、PageDown键分别实现向上、向下翻页,浏览大文档时很方便。
搜索功能:输入/关键词正向搜索,?关键词反向搜索,按n查找下一个,N查找上一个,查日志时定位信息超实用。
跳转到指定行:输入行号G(如100G)可跳转到第100行,快速定位内容。
退出查看:按q键可退出less查看模式,结束操作。
18.head指令
那我们就不想看10000行就想看这个文本的前n行就可以用到head命令
[root@hcss-ecs-000a lesson1]# head -15 text.txt
hello Linux 1
hello Linux 2
hello Linux 3
hello Linux 4
hello Linux 5
hello Linux 6
hello Linux 7
hello Linux 8
hello Linux 9
hello Linux 10
hello Linux 11
hello Linux 12
hello Linux 13
hello Linux 14
hello Linux 15
19.tail指令
那我们想看最后n行就可以使用tail指令
[root@hcss-ecs-000a lesson1]# tail -5 text.txt
hello Linux 9996
hello Linux 9997
hello Linux 9998
hello Linux 9999
hello Linux 10000
那我们想要提取到1000-1020行的内容怎么做到呢
[root@hcss-ecs-000a lesson1]# head -20 text.txt>temp.txt
[root@hcss-ecs-000a lesson1]# head -1020 text.txt>temp.txt
[root@hcss-ecs-000a lesson1]# tail -20 temp.txt
hello Linux 1001
hello Linux 1002
hello Linux 1003
hello Linux 1004
hello Linux 1005
hello Linux 1006
hello Linux 1007
hello Linux 1008
hello Linux 1009
hello Linux 1010
hello Linux 1011
hello Linux 1012
hello Linux 1013
hello Linux 1014
hello Linux 1015
hello Linux 1016
hello Linux 1017
hello Linux 1018
hello Linux 1019
hello Linux 1020
但是这种方法要创建临时文件,那有没有办法不用呢
管道操作
[root@hcss-ecs-000a lesson1]# head -1020 text.txt|tail -21
hello Linux 1000
hello Linux 1001
hello Linux 1002
hello Linux 1003
hello Linux 1004
hello Linux 1005
hello Linux 1006
hello Linux 1007
hello Linux 1008
hello Linux 1009
hello Linux 1010
hello Linux 1011
hello Linux 1012
hello Linux 1013
hello Linux 1014
hello Linux 1015
hello Linux 1016
hello Linux 1017
hello Linux 1018
hello Linux 1019
hello Linux 1020
这种|就叫做管道,这是一种符号,因为linux当中一切皆文件,后面会被系统解释成为管道文件(内存级)
它的作用是将|左侧程序的输出交给管道文件,然后再让右侧的程序再从管道中把数据读入到程序中
wc -l
统计文本行的个数
[root@hcss-ecs-000a lesson1]# cat text.txt | head -50 |tail -20 |wc -l
20
20.date指令
这就是查看时间的指令
[wyx@hcss-ecs-000a ~]$ date
Sun May 25 18:27:39 CST 2025
但是这样的格式不是很好看
[wyx@hcss-ecs-000a ~]$ date +%Y-%m-%d_%H:%M:%S
2025-05-25_18:29:15
20.1时间戳
[wyx@hcss-ecs-000a ~]$ date +%s
1748169274
时间->时间戳:date+%s
时间戳->时间:date-d@时间戳
unix时间戳是从1970年1月1日开始所经过的秒数,不考虑闰秒
[wyx@hcss-ecs-000a ~]$ date -d@1748169448
Sun May 25 18:37:28 CST 2025
[wyx@hcss-ecs-000a ~]$ date +%Y-%m-%d_%H:%M:%S -d@0
1970-01-01_08:00:00
[wyx@hcss-ecs-000a ~]$ date +%Y-%m-%d_%H:%M:%S -d@1
1970-01-01_08:00:01
那为什么是从八点开始的呢,原因就是我们和欧洲那边有8个小时的时差
20.2date 命令核心功能速查表
date +%s → 显示Unix时间戳(如 1719394200,用于计算时间间隔)
date "+%Y-%m-%d" → 输出 2024-06-26(标准日期格式)
date "+%H:%M:%S" → 输出 15:30:00(24小时制精确到秒)
date "+%A %B %d" → 输出 Wednesday June 26(星期+月份+日)
date -d "tomorrow" → 显示明天此时的时间
date -d "3 days ago" → 显示3天前的时间
date -d "2023-01-01 +10 days" → 计算2023年元旦后10天的日期
-d "时间描述":按指定描述显示时间,如-d "yesterday"显示昨天时间;
-s "时间字符串":设置系统时间,像-s "2024-01-01 12:00:00"更改系统时间;
+格式:按指定格式输出,例如+%Y-%m-%d输出年 - 月 - 日格式;
-u:显示协调世界时(UTC)时间。
21.cal指令
这个命令就是查看日历
命令格式:cal[参数][月份][年份]
功能:用于查看日历等时间信息,如只有一个参数,则表示年份,如有两个参数,则表示月份和年份
[wyx@hcss-ecs-000a ~]$ cal 2025
22.find指令
语法:find pathname -options
功能:用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)
常用选项:-name 按照文件名查找文件
[wyx@hcss-ecs-000a lesson1]$ find ~ -name text.txt
/home/wyx/lesson1/text.txt
[wyx@hcss-ecs-000a lesson1]$ find ~ -name *.txt
/home/wyx/lesson1/text.txt
[wyx@hcss-ecs-000a lesson1]$ find /usr/bin -name ls
/usr/bin/ls
find 可以在指定的路径下进行文件的搜索(真的在磁盘文件中查找)
find命令速览表
-name:按文件名查找,如find /home -name "*.txt"可在/home目录下查找所有扩展名为`.txt`的文件。
-type:按文件类型查找,f代表普通文件,d代表目录,例如find /var -type d会找出/var`目录下的所有子目录。
-size:按文件大小查找,+表示大于,-表示小于,如find /tmp -size +10M可查找/tmp目录下大于10MB的文件。-mtime:按文件修改时间查找,+表示超过指定天数,-表示不足指定天数,像find /data -mtime -7会查找/data目录下7天内修改过的文件。-exec:对查找到的文件执行指定命令,格式为find ... -exec 命令 {} \;,比如find /root -name "*.sh" -exec chmod +x {} \;会给/root目录下所有.sh文件添加可执行权限。
-delete:直接删除查找到的文件,如find /temp -name "log*" -delete会删除/temp目录下所有以log开头的文件。
23.whereis指令
在系统特定的路径下查找,既可以找到可执行程序,又可以找到手册,安装包,压缩包等之类
它会去查找只要涵盖这名字的局部的文件
[wyx@hcss-ecs-000a ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
24.grep指令
grep是一个行文本过滤工具
就相当于过滤出你大文件里面你所需要关键字所涵盖的文件
[wyx@hcss-ecs-000a pipe]$ grep '999' test.txt
Hello Linux 999
Hello Linux 1999
Hello Linux 2999
Hello Linux 3999
Hello Linux 4999
Hello Linux 5999
Hello Linux 6999
Hello Linux 7999
Hello Linux 8999
Hello Linux 9990
Hello Linux 9991
Hello Linux 9992
Hello Linux 9993
Hello Linux 9994
Hello Linux 9995
Hello Linux 9996
Hello Linux 9997
Hello Linux 9998
Hello Linux 9999
24.1grep-v 指令
把不包含这个过滤字的行给打印出来
[wyx@hcss-ecs-000a pipe]$ grep 'world' test.txt
hello world
hello world
[wyx@hcss-ecs-000a pipe]$ grep -v 'world' test.txt
1234
5678
78910
24.2grep-n指令
给过滤字的行加上行号
空就是代表所有都匹配的上的意思
[wyx@hcss-ecs-000a pipe]$ grep -n '' test.txt
1:hello world
2:1234
3:5678
4:hello world
5:78910
[wyx@hcss-ecs-000a pipe]$ grep -nv 'world' test.txt
2:1234
3:5678
5:78910
24.3grep -i指令
这个指令是忽略大小写
25.zip/unzip指令
语法:zip压缩文件.zip目录或文件
功能:将目录或文件压缩成zip格式
常用选项
-r 递归处理,将指定目录下的所有文件和子目录一并处理
如果你没有zip这个指令的话,切换回root账号执行这一操作
[root@hcss-ecs-000a ~]# yum install -y zip unzip
unzip-d解压到指定的目录下
[wyx@hcss-ecs-000a lesson2]$ zip -r d1.zip d1adding: d1/ (stored 0%)adding: d1/test1.txt (stored 0%)adding: d1/d2/ (stored 0%)adding: d1/d2/d3/ (stored 0%)adding: d1/d2/test.txt (stored 0%)
[wyx@hcss-ecs-000a lesson2]$ ls
d1 d1.zip pipe
wyx@hcss-ecs-000a lesson2]$ unzip d1.zip -d test
Archive: d1.zipcreating: test/d1/extracting: test/d1/test1.txt creating: test/d1/d2/creating: test/d1/d2/d3/extracting: test/d1/d2/test.txt
[wyx@hcss-ecs-000a lesson2]$ tree test
test
└── d1
├── d2
│ ├── d3
│ └── test.txt
└── test1.txt3 directories, 2 files
26.tar指令
这个指令是打包/解包,不打开它直接看内容
tar[-cxtzjvf]文件与目录…参数
26.1 tar指令功能速查表##
-c:创建新的压缩文件
-x:解压压缩文件
-t:查看压缩文件内容
-z:通过gzip算法进行压缩或解压
-j:通过bzip2算法进行压缩或解压
-v:显示压缩或解压的详细过程
-f:指定压缩文件的文件名
-C:指定解压的目标目录
26.2tar指令的解包和打包
tar czf xxx —打包压缩
tar tzf xxx.tgz—预览
tar xzf xxx.tgz—解压缩包
tar->打包后缀
.gz->压缩后缀
xxx.tar.gz->xxx.tgz
[wyx@hcss-ecs-000a lesson2]$ tar -czf code.tgz d1 pipe
[wyx@hcss-ecs-000a lesson2]$ ls
code.tgz d1 pipe
[wyx@hcss-ecs-000a lesson2]$ rm -rf d1 pipe
[wyx@hcss-ecs-000a lesson2]$ ls
code.tgz
[wyx@hcss-ecs-000a lesson2]$ tar -xzf code.tgz
[wyx@hcss-ecs-000a lesson2]$ ls
code.tgz d1 pipe
27.bc指令
bc命令可以很方便的进行浮点运算
[wyx@hcss-ecs-000a lesson2]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3.14*2.56
8.03
quit
28.uname-r指令
语法:uname[选项]
功能:uname用来获取电脑和操作系统的相关信息
**补充说明:uname可显示linux主机所用的操作系统的版本,硬件的名称等基本信息
常用选项:
-a或-all详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
[wyx@hcss-ecs-000a lesson2]$ uname
Linux
[wyx@hcss-ecs-000a lesson2]$ uname -a
Linux hcss-ecs-000a 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
[wyx@hcss-ecs-000a lesson2]$ uname -r
3.10.0-1160.119.1.el7.x86_64
29.history指令
history会记录下来历史命令,linux会默认记录最新的1000条,可以修改
30.关机
语法:shutdown[选项]常见选项
-h(halt):关闭系统并停止硬件运行。使用该参数后,系统会正常地完成各项关闭前的操作,然后停止硬件运转,就像让一台机器彻底“沉睡”。
-r(reboot):关闭系统后重新启动。当系统需要更新某些配置或者修复一些问题后,使用此参数能让系统在关闭后迅速重启,类似于给系统“刷新”一下。
-c(cancel):取消已经安排好的关机计划。如果之前已经设置了关机时间,在关机时间到达之前可以使用该参数来取消关机操作,避免误操作导致系统关机。
-t sec(time):指定关机前的延迟时间,单位为秒。可以精确控制关机的时间,例如“shutdown -h -t 60”表示在60秒后关闭系统,这就如同给系统设置了一个精确的“倒计时”。
now:立即执行关机操作。当遇到紧急情况需要马上关闭系统时,使用“shutdown -h now”可以让系统立刻停止运行,就像按下了系统的“急停按钮”。