Linux 文件系统是一个树状结构,以根目录 / 开始,所有其他目录和文件都是在根目录下的子目录或文件:
/
|-- home
| |-- user1
| |-- user2
|-- etc
| |-- config1
| |-- config2
|-- var
| |-- log
| |-- tmp
|-- usr
| |-- bin
| |-- lib**
如此以来,根目录 / 下有三个子目录 home、etc 和 var,以及一个子目录 usr。每个子目录下又可以有更多的子目录和文件。这种树状结构使得文件系统的组织清晰,并且易于管理和导航。
由于根目录太过复杂,不能直接"tree"否则会导致系统不断刷屏
所以展示一下我的测试目录:
drwxr-xr-x 3 root root 4096 Nov 16 22:13 a
drwxr-xr-x 3 root root 4096 Nov 17 18:25 A
-rwxr-xr-x 1 root root 8360 Nov 16 21:38 a.out
-rw-r--r-- 1 root root 168894 Nov 23 19:59 big.txt
-rw-r--r-- 1 root root 65 Nov 16 21:47 code.c
-rw-r--r-- 1 root root 0 Nov 16 20:01 p
drwxr-xr-x 3 root root 4096 Nov 16 21:20 WWW
[root@iZf8zbc41kduw4qa52iammZ ~]# tree .
.
├── a
│ ├── a.out
│ ├── b
│ │ ├── a.out
│ │ ├── c
│ │ │ └── d
│ │ │ └── e
│ │ └── code.c
│ └── code.c
├── A
│ └── B
│ └── C
├── a.out
├── big.txt
├── code.c
├── p
└── WWW
└── sss
清晰展示每一个文件的上一级和下一级来源。
绝对路径是从根目录 / 开始的完整路径。例如,/home/user1/file.txt 是文件 file.txt 的绝对路径,它指示文件在根目录下的 home 目录中的 user1 目录中。
相对路径是相对于当前工作目录的路径。例如,如果当前工作目录是 /home/user1,那么相对于该目录的 file.txt 文件可以用相对路径 file.txt 表示。
绝对路径和相对路径的主要区别在于,绝对路径始终从根目录开始,而相对路径是相对于当前工作目录的。使用绝对路径可以确保准确地定位文件或目录,而相对路径更适合用于在当前目录中导航。
这是一个常见的说法,指的是在Linux系统中,一切都被视为文件。这包括普通文件、目录、设备、管道、套接字等等。这种设计哲学使得Linux系统具有统一的接口和操作方式,无论是处理普通文件还是设备文件,用户都可以使用相似的命令和方法来进行操作。
举个例子:在显示屏上展示信息,就相当于给显示屏这个文件传入信息。
这种一切皆文件的设计哲学使得Linux系统在处理各种不同类型的数据和设备时更加统一和灵活。
pwd
[root@iZf8zbc41kduw4qa52iammZ ~]# cd a/b/c/d
[root@iZf8zbc41kduw4qa52iammZ d]# pwd
/root/a/b/c/d
当前在root,通过cd进入d,pwd展示
[root@iZf8zbc41kduw4qa52iammZ /]# ls
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
ls -l 是 Linux 中用于列出目录内容的命令,以长格式显示文件和目录的详细信息。
[root@iZf8zbc41kduw4qa52iammZ /]# ls -l
total 60
lrwxrwxrwx. 1 root root 7 Sep 19 11:44 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Sep 19 11:59 boot
drwxr-xr-x 19 root root 2980 Nov 3 23:10 dev
drwxr-xr-x. 81 root root 4096 Nov 16 21:35 etc
drwxr-xr-x. 2 root root 4096 Apr 11 2018 home
lrwxrwxrwx. 1 root root 7 Sep 19 11:44 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 19 11:44 lib64 -> usr/lib64
drwx------. 2 root root 16384 Sep 19 11:44 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt
dr-xr-xr-x 94 root root 0 Nov 3 19:31 proc
dr-xr-x---. 7 root root 4096 Nov 24 19:52 root
drwxr-xr-x 27 root root 800 Dec 1 14:12 run
lrwxrwxrwx. 1 root root 8 Sep 19 11:44 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Nov 3 19:31 sys
drwxrwxrwt. 8 root root 4096 Dec 1 14:12 tmp
drwxr-xr-x. 13 root root 4096 Sep 19 11:44 usr
drwxr-xr-x. 20 root root 4096 Nov 6 13:35 var
在这个示例中,-rw-r–r-- 是文件权限,1 是链接数,root 是所有者,root是所属组,4096 是文件大小(以字节为单位),Sep 24 14:22 是最后修改时间,最后 是文件名。对于目录,d 表示目录,其余部分的含义与文件类似。
在说cd之前先了解一下
. 和 ..
在Linux中,. 和 . . 分别代表当前目录和父目录。
. 表示当前目录。当你在命令行中使用 . 时,它指代当前所在的目录。
. . 表示父目录。当你在命令行中使用 … 时,它指代当前目录的父级目录。
这两个符号通常用于构建相对路径。例如,假设你当前的工作目录是 /home/user1,如果你想访问该目录下的父级目录,你可以使用 … 来表示,即 cd . .这将使你进入 /home 目录。
. 和 . .在文件系统中非常有用,可以帮助用户进行快速导航和定位文件。
运用相对路径,一步一步
[root@iZf8zbc41kduw4qa52iammZ ~]# ls
a A a.out big.txt code.c p WWW
[root@iZf8zbc41kduw4qa52iammZ ~]# tree
.
├── a
│ ├── a.out
│ ├── b
│ │ ├── a.out
│ │ ├── c
│ │ │ └── d
│ │ │ └── e
│ │ └── code.c
│ └── code.c
├── A
│ └── B
│ └── C
├── a.out
├── big.txt
├── code.c
├── p
└── WWW
└── sss
10 directories, 8 files
[root@iZf8zbc41kduw4qa52iammZ ~]# cd a
[root@iZf8zbc41kduw4qa52iammZ a]# ls
a.out b code.c
[root@iZf8zbc41kduw4qa52iammZ a]# cd d
-bash: cd: d: No such file or directory
[root@iZf8zbc41kduw4qa52iammZ a]# cd b
[root@iZf8zbc41kduw4qa52iammZ b]# ls
a.out c code.c
[root@iZf8zbc41kduw4qa52iammZ b]# cd c
[root@iZf8zbc41kduw4qa52iammZ c]# ls
d
[root@iZf8zbc41kduw4qa52iammZ c]# cd d
[root@iZf8zbc41kduw4qa52iammZ d]# ls
e
运用绝对路径,一步到位
cd 直接返回家目录
[root@iZf8zbc41kduw4qa52iammZ ~]# cd
[root@iZf8zbc41kduw4qa52iammZ ~]# pwd
/root
[root@iZf8zbc41kduw4qa52iammZ ~]# tree
.
├── a
│ ├── a.out
│ ├── b
│ │ ├── a.out
│ │ ├── c
│ │ │ └── d
│ │ │ └── e
│ │ └── code.c
│ └── code.c
├── A
│ └── B
│ └── C
├── a.out
├── big.txt
├── code.c
├── p
└── WWW
└── sss
10 directories, 8 files
[root@iZf8zbc41kduw4qa52iammZ ~]# cd a/b/c/d/
[root@iZf8zbc41kduw4qa52iammZ d]# ls
e
[root@iZf8zbc41kduw4qa52iammZ d]#
mkdir 是 Linux 和其他类 Unix 系统中用于创建新目录的命令。
如果你想在当前目录下创建一个名为 my_directory 的新目录,你可以在终端中输入 mkdir my_directory,然后按下回车键。这将在当前工作目录下创建一个名为 my_directory 的新目录。
mkdir 命令还支持一次性创建多个目录,你可以同时创建多个目录,比如 mkdir dir1 dir2 dir3。
要创建一条路径的目录,你可以使用 -p 选项。例如,如果你想创建 /home/user1/Documents/my_directory 目录,但是 Documents 目录还不存在,你可以在终端中输入以下命令:
mkdir -p /home/user1/Documents/my_directory
[root@iZf8zbc41kduw4qa52iammZ ~]# mkdir new1.dir
[root@iZf8zbc41kduw4qa52iammZ ~]# mkdir new2.dir new3.dir new4.dir
[root@iZf8zbc41kduw4qa52iammZ ~]# mkdir -p a/b/c/d/e
[root@iZf8zbc41kduw4qa52iammZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
│ └── e
├── A
│ └── B
│ └── C
├── new1.dir
├── new2.dir
├── new3.dir
├── new4.dir
└── WWW
└── sss
14 directories, 0 files
touch [选项] 文件名
常用选项包括:
-a:仅更新访问时间
-c:仅在文件不存在时创建文件
-m:仅更新修改时间
-d:指定时间戳
如-c来创建test.txt
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# touch test.txt
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 2 11:57 test.txt
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# touch -c text.txt
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 2 11:57 test.txt
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# touch text.txt
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 2 11:57 test.txt
-rw-r--r-- 1 root root 0 Dec 2 11:58 text.txt
在-c情况下没有添加
mv [选项] 源文件 目标文件
常用选项包括:
-i:在覆盖文件时进行提示确认
-b:在覆盖文件时进行备份
-f:强制覆盖目标文件
例如,使用mv file1.txt file2.txt可以将文件file1.txt重命名为file2.txt,
使用mv file.txt /home/user/Documents/
可以将文件file.txt移动到/home/user/Documents/目录下。
[root@iZf8zbc41kduw4qa52iammZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
│ └── e
├── A
│ └── B
│ └── C
├── new1.dir
│ ├── A
│ └── text.txt
├── new2.dir
├── new3.dir
├── new4.dir
└── WWW
└── sss
14 directories, 2 files
[root@iZf8zbc41kduw4qa52iammZ ~]# cd new1.dir
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# mv text.txt /root/new2.dir
[root@iZf8zbc41kduw4qa52iammZ new1.dir]# cd ..
[root@iZf8zbc41kduw4qa52iammZ ~]# tree
.
├── a
│ └── b
│ └── c
│ └── d
│ └── e
├── A
│ └── B
│ └── C
├── new1.dir
│ └── A
├── new2.dir
│ └── text.txt
├── new3.dir
├── new4.dir
└── WWW
└── sss
14 directories, 2 files
rm [选项] 文件或目录
常用选项包括:
-i:在删除文件前进行提示确认
-r:递归删除,用于删除目录及其内容
-f:强制删除,不进行提示确认
.
├── a
│ └── b
│ └── c
│ └── d
│ └── e
├── new1.dir
│ └── A
├── new2.dir
│ └── text.txt
├── new3.dir
├── new4.dir
└── WWW
└── sss
如果我仅想保留new2.dir 则强制递归删除
[root@iZf8zbc41kduw4qa52iammZ ~]# rm -rf a new1.dir new3.dir new4.dir WWW
[root@iZf8zbc41kduw4qa52iammZ ~]# tree
.
└── new2.dir
└── text.txt
1 directory, 1 file
在这里插入代码片
cp [选项] 源文件或目录 目标文件或目录
常用选项包括:
-i:在覆盖文件时进行提示确认
-r:递归复制,用于复制目录及其内容
-f:强制复制,覆盖目标文件
例如,使用 cp file1.txt file2.txt 可以将文件 file1.txt 复制为 file2.txt,
而使用 cp -r directory1 directory2 可以将目录 directory1 及其所有内容复制到 directory2 中。
需要注意的是,如果目标文件或目录已经存在,cp 命令默认不会覆盖,除非使用 -f 选项。
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# nano text1.txt
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cat text1.txt
hello world
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cat text2.txt
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cp text1.txt text2.txt -rf
cp: overwrite ‘text2.txt’? y
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cat text1.txt
hello world
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cat text2.txt
hello world
cat [选项] 文件
-n:显示行号
-b:显示非空白行的行号
-E:在每行的结尾显示 $ 符号
展示前先学习nano
nano 文件名
在打开文件后,可以使用快捷键进行编辑、保存、退出等操作。常用的快捷键包括:
Ctrl + O:保存文件
Ctrl + X:退出 nano 编辑器
Ctrl + K:剪切一行
Ctrl + U:粘贴剪切的内容
Ctrl + W:查找关键字
Ctrl + \:替换关键字
例如,使用 nano file.txt 可以使用 nano 编辑器打开文件 file.txt 进行编辑。
我们可以写一个简单c语言程序
#include
int main()
{
printf("hello world\n");
printf("hello world\n");
printf("hello world\n");
return 0;
}
cat -n 带行显示 ,tac 倒着显示
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cat test.c
#include
int main()
{
printf("hello world\n");
printf("hello world\n");
printf("hello world\n");
return 0;
}
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# cat test.c -n
1 #include<stdio.h>
2 int main()
3 {
4 printf("hello world\n");
5 printf("hello world\n");
6 printf("hello world\n");
7 return 0;
8 }
[root@iZf8zbc41kduw4qa52iammZ new2.dir]# tac test.c
}
return 0;
printf("hello world\n");
printf("hello world\n");
printf("hello world\n");
{
int main()
#include
more 和 less 都是 Linux 系统中用于分页显示文本文件内容的命令。它们可以用于查看较长的文件内容,以避免一次性在屏幕上显示所有内容。
more 和 less 都是 Linux 系统中用于分页显示文本文件内容的命令。
它们可以用于查看较长的文件内容,以避免一次性在屏幕上显示所有内容。
在使用 more 或 less 命令后,可以使用以下按键来浏览文件内容:
空格键:向下翻页
Enter 键:向下滚动一行
q 键:退出 more 或 less 命令
less 比 more 更加灵活,允许用户向前或向后浏览文件内容,并且支持搜索等更多功能。因此,通常推荐使用 less 命令来查看文件内容。
head 文件名
tail 文件名
head 和 tail 是 Linux 系统中用于显示文件开头和结尾部分内容的命令。
head 命令用于显示文件的开头部分,默认情况下显示文件的前 10 行。其基本语法为:
可以使用 -n 选项来指定要显示的行数,例如 head -n 20 file.txt 将显示文件 file.txt 的前 20 行内容。
tail 命令用于显示文件的结尾部分,默认情况下显示文件的最后 10 行。其基本语法为:
同样,可以使用 -n 选项来指定要显示的行数,例如 tail -n 15 file.txt 将显示文件 file.txt 的最后 15 行内容。
这两个命令通常用于查看日志文件的最新内容或者查看文件的头部以及尾部,是非常常用的文件查看工具。
history 是一个 Linux 命令,用于显示用户在当前会话中执行过的命令历史记录。在终端中执行 history 命令会列出最近执行的命令,每条命令前面都会有一个数字编号。这些编号可以用来重新执行历史命令,只需使用 ! 后面跟着命令的编号即可。
例如,如果你想重新执行历史记录中的第 5 条命令,只需输入 !5 并按下 Enter 键即可执行第 5 条命令。
history 命令也可以与其他命令结合使用,例如可以使用 history | grep “keyword” 来搜索包含特定关键字的命令历史记录。