和原文件不是一个文件 例如Windows的快捷方式,如果原始文件被删除,所有
指向它的符号链接也就都被破坏了。
软链接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。符号链接可以跨越文件系统,也可以为目录建立。
格式:ln -s 源文件 目标文件
硬链接
只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。
当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在件结构中的位置。
创格式: ln 原文件 目标文件
创建文件file1并为其创建软链接soft_file1、和硬链接hard_file1
[root@localhost home]# touch file1
[root@localhost home]# ln -s file soft_file1
[root@localhost home]# ln file hard_file1
[root@localhost home]# ls -li
total 5
27446429 drwxr-xr-x. 2 root root 6 Jul 14 10:46 data
27446447 -rw-r--r--. 2 root root 0 Jul 14 18:15 file1
27446447 -rw-r--r--. 2 root root 0 Jul 14 18:15 hard_file1
18732229 drwx------. 15 rhcsa rhcsa 4096 Jul 12 17:45 rhcsa
27446463 lrwxrwxrwx. 1 root root 5 Jul 14 18:19 soft_file1 -> file1
1875985 drwxr-xr-x. 2 root root 6 Jul 14 10:46 sub_data
删除file1再查看各文件里面得内容
[root@localhost home]# echo "123456" > file1
[root@localhost home]# echo "999999" >> hard_file1
[root@localhost home]# cat file1
123456
[root@localhost home]# cat soft_file1
123456
[root@localhost home]# cat hard_file1
123456
999999
[root@localhost home]# rm file1
rm: remove regular file 'file1'? y
[root@localhost home]# cat file1
cat: file1: No such file or directory
[root@localhost home]# cat soft_file1
cat: soft_file1: No such file or directory
[root@localhost home]# cat hard_file1
999999
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
输出重定向操作符: >(覆盖) 、 >>(追加)
输入重定向操作符: < 、 <<(结束)
将标准输出和标准错误输出重定向到同一个文件中
[root@localhost ~]# date &> file
[root@localhost ~]# cat file
Thu Jul 14 19:54:09 CST 2022
[root@localhost ~]# data &> file
[root@localhost ~]# cat file
bash: data: command not found...
[root@localhost ~]# date >& file
[root@localhost ~]# cat file
Thu Jul 14 19:55:16 CST 2022
[root@localhost ~]# data >& file
[root@localhost ~]# cat file
bash: data: command not found...
[root@localhost ~]# date 1> file 2>file
[root@localhost ~]# cat file
Thu Jul 14 19:56:19 CST 2022
[root@localhost ~]# data 1> file 2>file
[root@localhost ~]# cat file
bash: data: command not found...
将1重定向到2
[root@localhost ~]# date 2> file 1>&2
[root@localhost ~]# cat file
Thu Jul 14 20:00:36 CST 2022
[root@localhost ~]# data 2> file 1>&2
[root@localhost ~]# cat file
bash: data: command not found...
[root@localhost ~]# date 1>& file
[root@localhost ~]# cat file
Thu Jul 14 20:02:16 CST 2022
[root@localhost ~]# data 1>& file
[root@localhost ~]# cat file
bash: data: command not found...
将2重定向到1
[root@localhost ~]# data 1>file 2>&1
[root@localhost ~]# cat file
bash: data: command not found...
[root@localhost ~]# date 1>file 2>&1
[root@localhost ~]# cat file
Thu Jul 14 20:04:19 CST 2022
将文件重定向到0
[root@localhost ~]# ecoh "hello world" >data
[root@localhost ~]# sort hello world
[root@localhost ~]# cat <
> 456
> 789
> hello world!
> EOF
[root@localhost ~]# cat > data <
> 222
> 777
> EOF
[root@localhost ~]# cat data
111
222
777
创建目录(make directory)
语法为: mkdir [-p] [/路径/] 目录名
-p 可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖
-v 显示创建目录的详细过程
统计目录及文件的空间占用情况——du命令
功能:查看某个目录中的各级子目录所占用的磁盘空间数。
命令格式: du [选项] [目录名]
-a 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录。
-s 只统计每个文件所占用空间总的大小,而不是统计每个子目录、文件的大小。
-h 以K,M,G为单位显示磁盘使用情况,以提高信息的可读性。
[root@localhost data]# mkdir -p /home/data/cont1
[root@localhost cont1]# pwd
/home/data/cont1
[root@localhost cont1]# echo "hello world!">>cont1
[root@localhost cont1]# du -h cont1
4.0K cont1
[root@localhost cont1]# mkdir -p cont2/cont3
[root@localhost data]# ls -R
.:
cont1
./cont1:
cont2
./cont1/cont2:
cont3
删除目录文件
语法格式: rm -r [-f] 目录文件名
[root@localhost data]# rm -r cont1/cont2/cont3
rm: remove directory 'cont1/cont2/cont3'? y
只删除了cont3
[root@localhost data]# rm -r cont1
rm: descend into directory 'cont1'? y
rm: descend into directory 'cont1/cont2'? y
rm: remove directory 'cont1/cont2/cont3'? y
rm: remove directory 'cont1/cont2'? y
rm: remove directory 'cont1'? y
删除了cont1、2、3
文件
创建普通文件: touch [OPTION]... FILE...
touch的两种用法:
如果文件已存在,将更新文件的三个时间, stat 可以查看文件的详细信息
如果文件不存在,则表示创建文件
创建多个普通文件:
方法1: touch 文件名1 文件名2 文件名3
方法2: touch {文件名1,文件名2,文件名3}
删除普通文件: rm [-f] 文件名
[root@localhost data]# touch file11 file22 file33
[root@localhost data]# ls -l
total 0
-rw-r--r--. 1 root root 0 Jul 14 21:35 file11
-rw-r--r--. 1 root root 0 Jul 14 21:35 file22
-rw-r--r--. 1 root root 0 Jul 14 21:35 file33
[root@localhost data]# stat file33
File: file33
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 27446851 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-07-14 21:25:35.549327296 +0800
Modify: 2022-07-14 21:25:35.549327296 +0800
Change: 2022-07-14 21:25:35.549327296 +0800
Birth: 2022-07-14 21:25:35.549327296 +0800
[root@localhost data]# touch file33
[root@localhost data]# stat file33
File: file33
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 27446851 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-07-14 21:32:28.028280247 +0800
Modify: 2022-07-14 21:32:28.028280247 +0800
Change: 2022-07-14 21:32:28.028280247 +0800
Birth: 2022-07-14 21:25:35.549327296 +0800
格式: cp [选项] 源文件 目标文件
-a 通常在拷贝目录时使用,保留其所有内容。它保留链接、文件属性,并递归地拷贝目录
-d 拷贝时保留链接
-f 强制复制文件或目录,无论目标目录或文件存在与否
-i 在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝
-p -preserve,保留其属性,除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中
-r/g 递归复制,将指定目录下所有文件与子文件一同复制
复制文件到当前目录重命名。./表示当前目录
[root@localhost data]# cp file11 ./file11-1
[root@localhost data]# ls -l
total 16
-rw-r--r--. 1 root root 13 Jul 14 21:51 file11
-rw-r--r--. 1 root root 13 Jul 14 21:56 file11-1
复制文件到目录且不改变文件属性
[root@localhost data]# cp -p file22 /home/data/cont2/
复制到指定目录cont1
[root@localhost data]# cp file11 /home/data/cont1/
[root@localhost data]# ls -la cont1
total 4
-rw-r--r--. 1 root root 13 Jul 14 22:04 file11
将目录cont3和其下的文件的复制到cont4,若只移动目录就去掉cont3后面的/*
[root@localhost data]# cp -r /home/data/cont3/* /home/data/cont4/
cp: overwrite '/home/data/cont4/cont3'? y
[root@localhost data]# ls -l cont4
total 4
-rw-r--r--. 1 root root 45 Jul 14 22:32 cont3
drwxr-xr-x. 2 root root 6 Jul 14 22:32 count3.3
drwxr-xr-x. 2 root root 6 Jul 14 22:22 count4.4
当前目录下的复制粘贴重命名
[root@localhost data]# echo "hello world!" >>file11
[root@localhost data]# cp file11 file22
[root@localhost data]# cat file44
hello world!
移动文件或目录
格式: mv [选项] 源文件名称 目标文件名称
mv命令用于剪切或重命名文件,
因为它会把文件删除掉,只保留剪切后的文件。如果在同一个目录中将某个文件剪切后还粘贴到当前目录下,其实本质就是对文件进行了重命名操作。
[root@localhost cont4]# mv /home/data/cont3 /home/data/cont5
[root@localhost cont4]# ls -l cont5
[root@localhost data]# ls -l cont5
total 0
drwxr-xr-x. 3 root root 35 Jul 14 22:27 cont3