30秒搞懂软链接和硬链接,快速入门Linux,简单易懂的数据流和重定向,快速理解linux的目录系统,教你怎么创建和删除文件

目录

一.软链接 (符号链接) 和硬链接

创建软链接: ln -s 原文件  软链接文件 

创建硬链接:ln 原文件 目标文件 

二.linux的目录系统

 路径

工作目录

目录操作命令

1.创建目录

2.统计目录及文件的空间占用 情况——— du命令

3.删除目录

4.创建 删除普通文件

三.通配符

四.复制粘贴

五.数据流和重定向

1.数据流:

2、重定向操作符:


一.软链接 (符号链接) 和硬链接

删除文件的实质:相当于删除了文件指向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.数据流:

标准输入( standard input ,简称 stdin ):默认情况下,标准输入指从键盘获取的输入
标准输出( standard output ,简称 stdout ):默认情况下,命令执行所回传正确的信息会输出到
屏幕上
标准错误输出( standard error output ,简称 stderr ):默认情况下,标准错误输出可理解为命令
执行失败后,所回传的错误信息会输出到屏幕上
不管正确或错误的数据都是默认输出到屏幕上,所以屏幕是混乱的。所以就需要用数据流重定向将这两条数据分开。数据流重定向可以将标准输出和标准错误输出分别传送到其他的文件或设备去。

标准输入:(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>&1

                                      test1111 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shadow_58

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值