目录
一.软链接 (符号链接) 和硬链接
删除文件的实质:相当于删除了文件指向inode的一个链接
软链接:也叫符号链接,一般只包含文件的名称和路径,当原文件删除的时候,软链接也就不能访问。软链接和原文件的inode编码不一样,我们可以看出其实是属于两个不同的文件,只是在我们建立的软链接中储存了原文件的名称和路径。
创建软链接: ln -s 原文件 软链接文件
[root@server ~]# ln -s file file_symbolic #创建一个软链接
[root@server ~]# stat file
File: file
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34398764 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-07-14 19:18:27.795904150 +0800
Modify: 2022-07-14 19:18:27.795904150 +0800
Change: 2022-07-14 19:18:27.795904150 +0800
Birth: 2022-07-14 19:18:27.795904150 +0800
[root@server ~]# stat file_symbolic #查看软链接的状态
File: file_symbolic -> file
Size: 4 Blocks: 0 IO Block: 4096 symbolic link
Device: fd00h/64768d Inode: 34398935 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-07-14 19:19:41.661906905 +0800
Modify: 2022-07-14 19:19:41.660906905 +0800
Change: 2022-07-14 19:19:41.660906905 +0800
Birth: 2022-07-14 19:19:41.660906905 +0800
硬链接:相当于在原文件的inode上挂上一个新的链接,当原文件删除的时候,我们仍然可以通过硬链接去访问文件。在这里我们可以看到link 的数目变成了2,而inode编号并未发生变化,当我们删除了原文件的时候,再去查看link的数目变成了1条。所以也验证了,执行删除原文件的操作,其实就是删除了一条链接。
创建硬链接:ln 原文件 目标文件
[root@server ~]# ln file file_hard #建立一个硬链接
[root@server ~]# stat file #查看原文件状态
File: file
Size: 7 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34398935 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-07-14 18:11:37.144754592 +0800
Modify: 2022-07-14 18:11:23.227754073 +0800
Change: 2022-07-14 18:40:28.805819166 +0800
Birth: 2022-07-14 14:48:39.218550949 +0800[root@server ~]# rm file #删除原文件
rm: remove regular file 'file'? y
[root@server ~]# stat file_hard #查看硬链接的状态
File: file_hard
Size: 7 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34398935 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-07-14 18:11:37.144754592 +0800
Modify: 2022-07-14 18:11:23.227754073 +0800
Change: 2022-07-14 18:47:06.294833989 +0800
Birth: 2022-07-14 14:48:39.218550949 +0800
我们同样可以使用ln -s 目录 目标目录的方式给目录创建一个软链接,但是不能给目录创建硬链接。 因为从系统的设计原理上就禁止对目录做硬链接。
二.linux的目录系统
我们把‘/ ’的子目录称为一级目录,在一级目录的子目录称为二级目录...
-
/bin:
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。(一般存放的是用户的) -
/boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 -
/dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。 -
/etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。 -
/home:
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 -
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。 -
/run:
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。 -
/sbin:
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。 -
/tmp:
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 -
/usr:
usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。 -
/var:
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 -
/media和/mnt:
-
可以将别的文件系统临时挂载这个目录下,为其他的系统文件提供挂载点。
-
/opt:
-
该目录经常提供给较大型的第三方应用程序使用,这样可以避免将文件散落至整个文件系统。
路径
用路径表示某个文件在目录中所处的位置。
路径可分为:
绝对路径:从/为起点的目录
相对路径:从当前所处目录为起点的目录
工作目录
用户当前所处的路径,使用pwd命令查看
更改当前的目录,即就是切换目录: cd 路径
cd - #切换到之前的目录
cd ~ #回到用户的家目录
目录操作命令
1.创建目录
mkdir [选项] [参数]
我们想要一步创建data目录以及子目录sub_data,这个时候我们就得代选项完成这个操作,这个选项放在最后也可以实现目的。
mkdir /home/data/sub_data -p
mkdir -v /home/data/sub_data #可以详细的展示创建目录的过程
我们可以使用ls -Rl /home 可以查看/home下的目录以及子目录,类似于一种递归的方法。在这里R的选项就是递归的意思。
ls -Rl /home #-R --recursive 是等效的
我们可以使用echo $?去查看上次命令是否执行成功,在这?指的是环境变量,echo类似于打印的意思,
2.统计目录及文件的空间占用 情况——— du命令
du [选项] [目录名]
-a 统计磁盘空间占用时包括所有的文件, 而不仅仅只统计目录-s 只统计每个文件所占用空间总的大小, 而不是统计每个子目录、文件的大小-h 以K,M,G 为单位显示磁盘使用情况 , 以提高信息的可读性。* 包含目录和文件,但不包含隐藏目录和文件
3.删除目录
rm [选项] [目录名]
rm 和 rm -i等效
alias rm可以查看rm的原型,是rm -i 交互式删除,有提醒是否需要删除
rm -r 目录 递归的删除的目录及子目录
4.创建 删除普通文件
touch [选项]
touch——如果文件存在,则改变文件的时间戳
如果文件不存在,默认创建一个空文件
touch file #创建一个新的空文件
三.通配符
*:代表所有字符,多个任意字符
?:代表单个所有字符
^:以什么开始
[abc]:代表一个集合,每次只匹配集合中的一个字符,a或b,或c
{1..6}:连续的
{1,6}:不连续的
四.复制粘贴
copy:cp(文件和目录)等效于cp -i
cp -a 文件 目标文件 # 拷贝过去的权限不会发生改变
cp 文件 目标文件
cp -r 目录 目标目录 #把整个目录copy过去,递归拷贝
cp 目录* 目标目录 #把目录中的所有文件copy过去
剪贴粘贴:
move:mv 文件 目标文件
在同一个目录里进行剪切操作,相当于给原文件重命名
五.数据流和重定向
1.数据流:
标准输入:(stidn) 代码为0
标准输出:(stdout) 代码为1
标准错误输出:(stdeer) 代码为2
2、重定向操作符:
将标准输出重定向到一个文件中,这两种方法时等效的
如果我们想把标准错误输出重定向到文件中,我们只能使用2>这种方式
我们也可以将标准错误输出重定向到一个空的字符设备/dev/null,这个时候我们的标准错误输出
就找不到了
[root@ls_Ok74kJfe ~]# test1451 2>/dev/null
将标准输出和标准错误输出同时重定向到一个文件中
test11111 &> file
echo 123 &>file
test11111 1>& file
echo 123 1>& file
#将标准错误输出重定向到一个文件,再将标准输出重定向到标准错误输出
[root@ls_Ok74kJfe ~]# ters456 2>file 1>&2
echo 45678 2>file 1>&2
#将标准输出重定向到一个文件,再将标准错误输出重定向到标准输出
[root@ls_Ok74kJfe ~]# echo 123456 1>file 2>&1test1111 1>file 2>&1
使用追加的方式将标准输出重定向到文件中:
[root@ls_Ok74kJfe ~]# echo 123 >> file
[root@ls_Ok74kJfe ~]# echo 456 >> file
[root@ls_Ok74kJfe ~]# head file
将文件重定向到标准输入 ,在这里cat读取的是标准输入的内容,并不是直接去读取文件内容
[root@ls_Ok74kJfe ~]# cat < file
使用cat从标准输入读取内容,然后输出到文件中
[root@ls_Ok74kJfe ~]# cat << EOF > file1
> 123
> hello
> world
> apple
> EOF
[root@ls_Ok74kJfe ~]# head file1
123
hello
world
apple
在这 if代表input file,of代表output file,dd命令可以创建指定大小的文件,所创建的文件为空的,但是是真实占用磁盘的大小。
[root@localhost ~]# dd if=/dev/zero of=/file1.txt bs=1M count=2[root@localhost ~]# dd </dev/zero >/file2.txt bs=1M count=2