【Linux】初见,基础指令
前言
本文将讲解Linux中最基础的东西-----指令,带大家了解一下Linux中有哪些基础指令,分别有什么作用。
本文中的指令和选项并不全,只介绍较为常用的
pwd指令
语法:pwd
功能:显示当前所在位置(路径)。
root@hcss-ecs-4ce7:~# pwd
/rootroot@hcss-ecs-4ce7:~/path1# pwd
/root/path1
ls指令
语法:ls 选项 文件或目录
功能:对于目录,显示这个目录中所有子目录和文件。对于文件,显示文件名和其他信息。若没有给出指定的文件或目录,则显示当前所在位置的文件或目录。若没有选项则只显示文件名,不显示其他信息。
常用选项
-l 列出详细信息。
root@hcss-ecs-4ce7:~# ls
my.txt my.zip new new.txt path1 path.tgz snap temp.txtroot@hcss-ecs-4ce7:~# ls -l
total 52
-rw-r--r-- 1 root root 21 May 18 14:29 my.txt
-rw-r--r-- 1 root root 183 May 18 14:38 my.zip
drwxr-xr-x 2 root root 4096 May 18 22:12 new
-rw-r--r-- 1 root root 14 May 18 11:35 new.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
-rw-r--r-- 1 root root 274 May 18 22:00 path.tgz
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txtroot@hcss-ecs-4ce7:~# ls -l path1
total 8
-rw-r--r-- 1 root root 0 May 14 20:35 myfile.txt
-rw-r--r-- 1 root root 21 May 18 14:29 my.txt
drwxr-xr-x 3 root root 4096 May 14 23:37 path2
补充:
Linux中目录即为windows中的文件夹 。
建立空文件也会占用磁盘空间,因为文件=文件属性+文件内容,即使内容为空,属性也不会为空。
Linux不同于windows不依靠后缀名来区别文件和目录,而是靠文件属性中第一个字母区别
Linux中的路径分割符为:/,而windows中的为:\
cd指令
cd指令是关于Linux目录路径的指令。
不论是那个操作系统中,目录都是以一个多叉树的形式实现的。Linux中的根目录用 " / "表示。文件或空目录一定是叶子节点。
绝对路径:从 / 开始不依靠其他路径定位位置。
相对路径:通过当前所处路径,定位出位置。
绝对路径不会因为用户位置的改变而导致定位位置改变,通常用于特定服务中配置文件的操作,而相对路径由于其使用简洁方便,常用于命令行。
Linux中存在以 " . "开头的文件,我们称作隐藏文件,不论什么目录里面都会有 " . " 和 " .. "这两个隐藏文件
语法:cd 目录名
功能:改变当前目录到指定的目录下。
常用目录名
相对路径
绝对路径
" .. "
" ~ "
" - "
root@hcss-ecs-4ce7:~# pwd #查看当前所处目录
/root
root@hcss-ecs-4ce7:~# cd /root/path1 #绝对路径,进入到指定的目录下
root@hcss-ecs-4ce7:~/path1# pwd
/root/path1root@hcss-ecs-4ce7:~# pwd
/root
root@hcss-ecs-4ce7:~# cd ./path1 #相对路径,‘.’表示当前目录
root@hcss-ecs-4ce7:~/path1# pwd
/root/path1root@hcss-ecs-4ce7:~/path1# pwd
/root/path1
root@hcss-ecs-4ce7:~/path1# cd .. #".."表示上层目录,这里表达返回上一层目录
root@hcss-ecs-4ce7:~# pwd
/rootroot@hcss-ecs-4ce7:~# pwd
/root
root@hcss-ecs-4ce7:~# cd - #表示进入最近的一次访问的目录
/root/path1
root@hcss-ecs-4ce7:~/path1# pwd
/root/path1root@hcss-ecs-4ce7:~/path1# pwd
/root/path1
root@hcss-ecs-4ce7:~/path1# cd ~ #表示返回家目录,不写~也可以
root@hcss-ecs-4ce7:~# pwd
/root
补充:
cd ~ 返回家目录。对于root账号而言是返回 /root ,对于普通账号而言是返回 /home/xxx(自己的账号名)
touch指令
语法:touch 选项 文件名
功能:对于一个存在的文件,改变其日期时间。对于不存在的文件,新建这个文件。
常用选项:
-a: change only the a ccess time
-m: change only the modification time
root@hcss-ecs-4ce7:~# ls -l
total 52
-rw-r--r-- 1 root root 21 May 18 14:29 my.txt
-rw-r--r-- 1 root root 183 May 18 14:38 my.zip
drwxr-xr-x 2 root root 4096 May 18 22:12 new
-rw-r--r-- 1 root root 14 May 18 11:35 new.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
-rw-r--r-- 1 root root 274 May 18 22:00 path.tgz
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt
root@hcss-ecs-4ce7:~# touch aaaaa.txt #创建文件
root@hcss-ecs-4ce7:~# ls -l
total 52
-rw-r--r-- 1 root root 0 May 19 16:59 aaaaa.txt
-rw-r--r-- 1 root root 21 May 18 14:29 my.txt
-rw-r--r-- 1 root root 183 May 18 14:38 my.zip
drwxr-xr-x 2 root root 4096 May 18 22:12 new
-rw-r--r-- 1 root root 14 May 18 11:35 new.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
-rw-r--r-- 1 root root 274 May 18 22:00 path.tgz
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt
补充:stat命令,功能:查看文件的详细信息。用过stat我们就可以观察到touch修改时间的操作
root@hcss-ecs-4ce7:~# stat new.txtFile: new.txtSize: 14 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 151998 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2025-05-18 11:35:22.012539536 +0800
Modify: 2025-05-18 11:35:19.900507212 +0800
Change: 2025-05-18 11:35:19.900507212 +0800Birth: 2025-05-15 10:42:29.595967837 +0800
修改时间:
root@hcss-ecs-4ce7:~# stat new.txtFile: new.txtSize: 14 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 151998 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2025-05-18 11:35:22.012539536 +0800
Modify: 2025-05-18 11:35:19.900507212 +0800
Change: 2025-05-18 11:35:19.900507212 +0800Birth: 2025-05-15 10:42:29.595967837 +0800//修改access时间
root@hcss-ecs-4ce7:~# touch touch -a new.txt
root@hcss-ecs-4ce7:~# stat new.txtFile: new.txtSize: 14 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 151998 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2025-05-19 17:07:15.106092725 +0800
Modify: 2025-05-18 11:35:19.900507212 +0800
Change: 2025-05-19 17:07:15.106092725 +0800 //我们发现这个也发生了修改,这里牵扯其他知识,后面再详细介绍Birth: 2025-05-15 10:42:29.595967837 +0800//修改modify时间
root@hcss-ecs-4ce7:~# touch -m new.txt
root@hcss-ecs-4ce7:~# stat new.txtFile: new.txtSize: 14 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 151998 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2025-05-19 17:07:15.106092725 +0800
Modify: 2025-05-19 17:08:59.171702276 +0800
Change: 2025-05-19 17:08:59.171702276 +0800Birth: 2025-05-15 10:42:29.595967837 +0800
mkdir指令
语法:mkdir 选项 目录名或路径
功能:在当前位置下创建目录
常用选项:
-p (指定路径创建目录,当目录中有不存在的目录时,直接创建)
root@hcss-ecs-4ce7:~# mkdir new #在当前位置下创建一个目录
root@hcss-ecs-4ce7:~# ls -l
total 40
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 2 root root 4096 May 19 17:22 new
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt//指定路径,创建多个目录
root@hcss-ecs-4ce7:~# mkdir -p path/path1/path2/path3
root@hcss-ecs-4ce7:~# ls -l
total 40
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 19 17:24 path
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt
root@hcss-ecs-4ce7:~# tree path //通过tree指令我们可以看到形象的路径
path
└── path1└── path2└── path33 directories, 0 files
补充:tree指令,可以形象的将一个目录里的内容展示出来。若没有安装可更加系统提示安装。
rmdir&rm指令
语法:rmdir 选项 目录名或路径
功能:删除空目录
选项:
-p (当删除子目录时,如果父目录也变成了空目录,则一并删除)
root@hcss-ecs-4ce7:~# ls -l
total 40
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 19 17:24 path
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt//当删除子目录时,如果父目录也变成了空目录,则一并删除
root@hcss-ecs-4ce7:~# rmdir -p path/path1/path2/path3
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt
rmdir的弊端在于只能删除空目录,当目录中有内容则无法删除,但rm指令可以
语法:rm 选项 目录名或路径
功能:删除目录或文件
选项:-f 即使是只读文件,也直接删除
-r 删除目录及其包含的所有文件
-i 删除前逐一询问确认
限制:只针对root账号、或普通账号自己创建的目录或文件
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
-rw-r--r-- 1 root root 0 May 19 17:41 new.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt//删除普通文件
root@hcss-ecs-4ce7:~# rm new.txt
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txtroot@hcss-ecs-4ce7:~# touch new1.txt
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
-rw-r--r-- 1 root root 0 May 19 17:42 new1.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt//删除前询问
root@hcss-ecs-4ce7:~# rm -i new1.txt
rm: remove regular empty file 'new1.txt'? y
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txtroot@hcss-ecs-4ce7:~# mkdir -p path/path1/path2/path3
root@hcss-ecs-4ce7:~# ls -l
total 40
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 19 17:44 path
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt//删除目录及其所包含的所有文件
root@hcss-ecs-4ce7:~# rm -r path
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txtroot@hcss-ecs-4ce7:~# mkdir -p path/path1/path2/path3
root@hcss-ecs-4ce7:~# ls -l
total 40
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 19 17:47 path
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt//删除前询问确认
root@hcss-ecs-4ce7:~# rm -ir path
rm: descend into directory 'path'? y
rm: descend into directory 'path/path1'? y
rm: descend into directory 'path/path1/path2'? y
rm: remove directory 'path/path1/path2/path3'? y
rm: remove directory 'path/path1/path2'? y
rm: remove directory 'path/path1'? y
rm: remove directory 'path'? y
root@hcss-ecs-4ce7:~# ls -l
total 36
-rw-r--r-- 1 root root 21 May 19 17:00 my.txt
drwxr-xr-x 3 root root 4096 May 18 14:43 path1
drwx------ 3 root root 4096 Aug 9 2024 snap
-rw-r--r-- 1 root root 22902 May 18 11:51 temp.txt
man指令
语法:man 选项 指令
功能:当我们忘记一个指令怎么使用时,可以使用man来查询。
选项
通常为1-9
补充:man手册分为9章
1是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调⽤这个函数,需要加什么 头文件)
3是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备⽂件
4略
5是指⽂件的格式,比如passwd,就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有⼀些变量,比如像environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
9略
选项中不给出具体数字,man就会从第一章开始找直到找到。反之如果给出具体数字,man就只会去对应的第几章去找。
root@hcss-ecs-4ce7:~# man printf # 查看printf指令(没错,printf也是⼀个指令)
root@hcss-ecs-4ce7:~# man fork # 查看系统调⽤,默认没有这个指令,man就⾃动去2号⼿册查找
root@hcss-ecs-4ce7:~# man 2 frok # 查看系统调⽤
root@hcss-ecs-4ce7:~# man 3 printf # 查看C库函数
root@hcss-ecs-4ce7:~# man 7 signal # 查看变量
root@hcss-ecs-4ce7:~# man 7 environ
root@hcss-ecs-4ce7:~# man man # 查看man⼿册⾃⼰
echo指令
语法:echo 选项 内容
功能:打印内容或将内容放入文件中
#将echo后面的内容作为字符串,打印出来
root@hcss-ecs-4ce7:~# echo "你好世界"
你好世界
root@hcss-ecs-4ce7:~# echo test.cpp
test.cpp#利用 > 进行重定向操作
root@hcss-ecs-4ce7:~# ls
my.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# echo "你好世界">new.txt
root@hcss-ecs-4ce7:~# ls
my.txt new.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# cat new.txt
你好世界# >>进行追加重定向
root@hcss-ecs-4ce7:~# echo "明天你好">>new.txt
root@hcss-ecs-4ce7:~# cat new.txt
你好世界
明天你好# < 输入重定向,与cat new.txt效果上无异
root@hcss-ecs-4ce7:~# cat <new.txt
你好世界
明天你好
补充:重定向有两个特点:1.如果重定向的文件不存在,则创建文件再写入内容。2.如果文件存在则清空文件再写入内容(既覆盖)。
which指令
语法:which 指令名
功能:搜索指令
root@hcss-ecs-4ce7:~# which ls
/usr/bin/ls
root@hcss-ecs-4ce7:~# which man
/usr/bin/man
root@hcss-ecs-4ce7:~# which touch
/usr/bin/touch
补充:我们通过which指令可以看到,指令其实也是目录,存在在bin目录下
指令本质==可执行文件==我们写的C/C++程序
cp指令
语法:cp 源文件或目录 目标文件或目录
功能:拷贝文件或目录
选项
-f 强制拷贝,不论目标文件或目录是否存在
-r 递归处理,将目录下的文件和子目录一起处理。若源文件或目录的形态,不属于目录或符 号链接,则⼀律视为普通文件处理。
-i 覆盖文件前线询问
#普通文件的拷贝
root@hcss-ecs-4ce7:~# ls
my.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# echo "你好世界"> new.txt
root@hcss-ecs-4ce7:~# cp new.txt cpnew.txt
root@hcss-ecs-4ce7:~# ls
cpnew.txt my.txt new.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# cat cpnew.txt
你好世界#将多个文件拷贝到目录
root@hcss-ecs-4ce7:~# mkdir new
root@hcss-ecs-4ce7:~# ls
cpnew.txt my.txt new new.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# cp *.txt new # “*”为通配符,匹配所有以.txt结尾的文件
root@hcss-ecs-4ce7:~# tree new
new
├── cpnew.txt
├── my.txt
├── new.txt
└── temp.txt#如果目标文件存在则直接覆盖
root@hcss-ecs-4ce7:~# cat cpnew.txt
你好世界
root@hcss-ecs-4ce7:~# echo "明天你好">new.txt
root@hcss-ecs-4ce7:~# cp new.txt cpnew.txt
root@hcss-ecs-4ce7:~# cat cpnew.txt
明天你好#拷贝前询问
root@hcss-ecs-4ce7:~# cp -i new.txt cpnew.txt
cp: overwrite 'cpnew.txt'? y#强制拷贝整个目录
root@hcss-ecs-4ce7:~# ls
cpnew.txt my.txt new new.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# tree new
new
├── cpnew.txt
├── my.txt
├── new.txt
└── temp.txt0 directories, 4 files
root@hcss-ecs-4ce7:~# cp -rf new cpnew
root@hcss-ecs-4ce7:~# ls
cpnew cpnew.txt my.txt new new.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# tree cpnew
cpnew
├── cpnew.txt
├── my.txt
├── new.txt
└── temp.txt0 directories, 4 files
mv指令
mv是move是缩写,代表移动。用于移动文件或将文件改名,常用于备份文件或目录。
语法:mv 选项 源文件或目录 目标文件或目录
功能:
1. 当mv指令的第一个参数和第二个参数都是文件或目录,将会进行重命名
2. 当mv指令第一个参数是文件,第二个参数是目录,将会进行移动,把文件移动至目录中
选项:
-f 强制覆盖, 如果当目标文件已经存在时,就会强制覆盖
-i 再覆盖前询问用户是否覆盖(仅在覆盖文件时询问,目录不会询问)
注意:对于重命名目录来说,并不会覆盖目录原来的内容。而是将源目录中的内容移动至目标目录中
#文件重命名
root@hcss-ecs-4ce7:~# ls
my.txt path1 snap temp.txt
root@hcss-ecs-4ce7:~# mv temp.txt new.txt
root@hcss-ecs-4ce7:~# ls
my.txt new.txt path1 snap#如果重命名文件在当前路径下已经存在,那么就会直接覆盖
root@hcss-ecs-4ce7:~# echo "你好世界">you.txt
root@hcss-ecs-4ce7:~# ls
my.txt new new.txt path snap you.txt
root@hcss-ecs-4ce7:~# mv you.txt my.txt
root@hcss-ecs-4ce7:~# ls
my.txt new new.txt path snap
root@hcss-ecs-4ce7:~# cat my.txt
你好世界#目录重命名(如果重命名目录在当前位置下已经存在,那么就会将源目录中内容移动至目标目录)
root@hcss-ecs-4ce7:~# ls
my.txt new.txt path1 snap
root@hcss-ecs-4ce7:~# tree path1
path1
├── myfile.txt
├── my.txt
└── path2├── myfile.txt└── path3└── path43 directories, 3 files
root@hcss-ecs-4ce7:~# mv path1 pathroot@hcss-ecs-4ce7:~# ls
my.txt new.txt path snap
root@hcss-ecs-4ce7:~# tree path
path
├── myfile.txt
├── my.txt
└── path2├── myfile.txt└── path3└── path43 directories, 3 files#移动文件到目录中
root@hcss-ecs-4ce7:~# ls
my.txt new.txt path snap
root@hcss-ecs-4ce7:~# mkdir newroot@hcss-ecs-4ce7:~# mv new.txt new
root@hcss-ecs-4ce7:~# ls
my.txt new path snap
root@hcss-ecs-4ce7:~# tree new
new
└── new.txt