目录
一、创建链接文件
二、目录操作命令
1. 创建目录(make directory)
2. 统计目录及文件的空间占用情况
3. 删除目录文件
三、创建、删除普通文件
文件命名规则:
(1)不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
(2)文件名不能超过255个字符
(3)区分大小写file File FILE fIle
(4)目录也是文件,在同一路径下,两个不同类型的文件不能同名
符号链接又叫软连接,和原文件不是同一个文件,例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就被破坏了。软连接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。符号链接可以跨越文件系统,也可以为目录建立。
创建软连接文件:ln -s 原文件 目标文件
硬链接,只能引用同一个文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。
创建硬链接:ln 原文件 目标文件
[root@localhost ~]# ln -s /etc/hostname /root/hostname
[root@localhost ~]# ll -i /etc/hostname /root/hostname
34288363 -rw-r--r--. 1 root root 22 Oct 22 21:09 /etc/hostname
67989484 lrwxrwxrwx. 1 root root 13 Apr 11 11:25 /root/hostname -> /etc/hostname
[root@localhost ~]# ln /etc/motd /root/motd
[root@localhost ~]# ll -i /etc/motd /root/motd
33854496 -rw-r--r--. 3 root root 99 Oct 22 21:28 /etc/motd
33854496 -rw-r--r--. 3 root root 99 Oct 22 21:28 /root/motd
语法为:mkdir [-p] [/路径]目录名
-p:可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖
-v:显示创建目录的详细过程
功能:查看某个目录中的各级子目录所占用的磁盘空间数。
命令格式:du [选项] [目录名]
选项 | 功能 |
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-s | 只统计每个文件所占用空间总的大小,而不是统计每个子目录、文件的大小 |
-h | 以K,M,G为单位显示磁盘使用情况,以提高信息的可读性 |
语法格式:rm -r [-f] 目录文件名
创建普通文件:touch [OPTION]... FILE...
touch的两种用法:
[root@localhost ~]# stat /etc/hostname
File: /etc/hostname
Size: 22 Blocks: 8 IO Block: 4096 regular file
Device: 10303h/66307d Inode: 34288363 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2023-04-11 08:31:09.860415940 +0800
Modify: 2022-10-22 21:09:16.176024761 +0800
Change: 2022-10-22 21:09:16.176024761 +0800
Birth: 2022-10-22 21:04:13.785007377 +0800
atime,即access time,查看了一下文件内容(cat),文件的atime时间会更新
mtime,即modify time,文件内容被改变了,ctime会更新
ctime,即change time,元数据【文件的属性,例如大小、文件名等等】被改变,mtime会更新
[root@localhost ~]# touch /etc/hostname
[root@localhost ~]# date
Wed Apr 12 00:57:14 CST 2023
[root@localhost ~]# stat /etc/hostname
File: /etc/hostname
Size: 22 Blocks: 8 IO Block: 4096 regular file
Device: 10303h/66307d Inode: 34288363 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2023-04-12 00:57:10.509578017 +0800
Modify: 2023-04-12 00:57:10.509578017 +0800
Change: 2023-04-12 00:57:10.509578017 +0800
Birth: 2022-10-22 21:04:13.785007377 +0800
[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# cat /etc/hostname
server
[root@localhost ~]# stat /etc/hostname
File: /etc/hostname
Size: 7 Blocks: 8 IO Block: 4096 regular file
Device: 10303h/66307d Inode: 35050464 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2023-04-12 00:57:53.551422520 +0800
Modify: 2023-04-12 00:57:45.519354732 +0800
Change: 2023-04-12 00:57:45.519354732 +0800
Birth: 2023-04-12 00:57:45.519354732 +0800
创建多个普通文件:
方法一:touch 文件名1 文件名2 文件名3
方法二:touch {文件名1,文件名2,文件名3}
[root@localhost ~]# touch {1,2}{3,4}
[root@localhost ~]# touch abc{1..100}
删除普通文件:rm [-f] 文件名
不管正确或者错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其它的文件或设备中去,而分别传送所用的特殊字符如下表示:
Number | Channel name | Description | Default connection | Usage |
---|---|---|---|---|
0 | stdin | Standard input | Keyboard | read only |
1 | stdout | Standard output | Terminal | write only |
2 | stderr | Standard error | Terminal | write only |
3+ | filename | Other files | none | read and/or write |
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其它位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
使用形式 | 功能 |
命令 > 文件 或 命令 1> 文件 | 将命令执行后的标准输出信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件 |
命令 2> 文件 | 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定的文件中,若指定的文件不存在,则自动创建该文件 |
命令 2> /dev/null | 将命令执行后所产生的错误信息不在默认的屏幕上显示,而是写入到空设备文件中,即将输出的错误信息丢弃掉 |
命令 &> 文件 或 命令 >& 文件 | 将命令执行后的正确输出信息和错误信息不在默认的屏幕上显示,而是以覆盖的方式写入到指定文件中,若指定的文件不存在,则自动创建该文件 |
命令 >> 文件 | 将命令执行后的正确输出信息以追加的方式写入到指定的文件中,不覆盖原文件内容,若指定的文件不存在,则自动创建该文件 |
命令 <文件 | 使命令从指定的文件中读取数据作为输入 |
命令 <<结束标识字符串 | 在命令行读取数据作为输入,直到遇到指定的结束标识字符串 |
标准输出重定向:1>或>、1>>或>>
标准错误输出重定向:2>、2>>
案例1:输出重定向(覆盖)
[root@localhost ~]# date 1> date.txt
案例2: 输出重定向(追加)
[root@localhost ~]# date >> date.txt
案例3:错误输出重定向
[root@localhost ~]# ls /home/ /aaaaaa >list.txt
ls:无法访问/aaaaaa:没有那个文件或目录
[root@localhost ~]# ls /home/ /aaaaaa >list.txt 2>error.txt #重定向到不同的位置
案例4:正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaa &>list.txt
#混合输出
案例5:正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaa >list.txt 2>&1
#重定向到相同的位置
案例6:重定向到空设备/dev/null
#空设备,即将产生的输出丢掉
[root@localhost ~]# ls /home/ /aaaaaa >list.txt 2>/dev/null
[root@localhost ~]# ls /home/ /aaaaaa &>/dev/null
4. 输入重定向案例
标准输入重定向:<或0<、0<<或<<
案例1:从文件读取数据作为cat命令的输入
[root@localhost ~]# echo test > file
[root@localhost ~]# cat < file
test
案例2:标准输入重定向<<并不表示追加,而是表示输入结束的意思,即作为一个结束符
[root@localhost ~]# cat > file3 << end
\> hello
\> end
#利用<<右侧的控制字符,我们可以终止输入,不必输入ctrl+d来结束
[root@localhost ~]# cat file3
hello