硬软链接的区别 节点 以及重定向和管道

INODE全称叫index node


表中包含文件系统所有文件列表  

一个节点是在一个表项 包含有关文件的信息 ( 元数据 )

包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数


1 文件引用一个是 inode号  

2 我们是通过文件名来引用一个文件  

3 一个目录是目录下的文件名和文件inode号之间的映射


由于 inode 找数据是不断地 创建新的节点 所以他的节点创建有局限性 而他的最大数量可为 1T


而之前我们所学的 cp mv rm 等命令 都可以用 inode来解释 例如


rm 命令 删除


rm 命令相当于链接数递减 从而释放的inode号可以被重用 把数据块放在空闲列表中 删除目录项 数据实际上不会马上被删除 但当另一个文件使用数据块 时将被覆盖



硬链接 


  1 创建硬链接会增加额外的记录项以引用文件  

  2 对应于同一文件系统上一个物理文件  

  3 每个目录引用相同的inode号  

  4 创建时链接数递增  

  5 删除文件时 rm命令递减计数的链接 文件要存在

  6 至少有一个链接数 当链接数为零时 该文件被删除  

  7 硬链接不能跨越驱动器或分区 指向

  8 硬链接与硬连接之间 指向同一个文件 地位 等同

    语法 ln filename  [linkname ]



软链接也称符号链接


  1 一个符号链接指向另一个文件

  2 ls – l的 显示链接的名称和引用的文件  

  3 一个符号链接的内容是它引用文件的名称  

  4 可以对目录进行 可以跨分区 指向的是另一个文件的路径

  5 其大小为指向的路径字符串的 长度 不增加或减少目标文件inode的引用计数

  7 软链接可以对应多个文件 但这些文件 都不相同  

    语法 ln   -s  filename  [linkname]



硬链接和软连接之间的区别 


 硬链接是相对于同一文件系统上的物理文件 可以有多个别名 但只有一个文件 而软连接可以指向多个文件虽然文件不同 但 软链接可以跨区 指向 创建硬连接时需要占用节点 而软连接则直接指向路径字符串 不增加或减少节点 

 

硬软连接的简单 演示 硬盘 到 系统上的文件 到 硬链接 再到 软链接



重定向 标准输入输出 和管道 


标准输入输出简称 IO


Linux给程序提供三种I/O设备 

   标准输入(STDIN)-0 默认接受来自键盘的输入  

   标准输出(STDOUT)-1 默认输出到终端窗口  

   标准错误(STDERR)-2 默认输出到终端窗口 


程序:指令+数据 读入数据 Input 输出数据 Output  

打开的文件都有一个fd  file descriptor 文件描述符


 

 I/O重定向就是 改变默认位置


把输出和错误重新定向到文件


下面是重定向的一些命令

1  > 把STDOUT重定向到文件 

2  2> 把STDERR重定向到文件 

3  &> 把所有输出重定向到文件

4  > 文件内容会被覆盖 

5  # set -C 禁止将内容覆盖已有文件 但可追加 

6  强制覆盖 >| 

7  # set +C  允许覆盖

8  >>  原有内容基础上 追加内容


9   2> 覆盖重定向错误输出数据流;

10  2>>  追加重定向错误输出数据流;  

11  标准输出和错误输出各自定向至不同位置: 

12  COMMAND > /path/to/file.out 2> /path/to/error.out  

13  合并标准输出和错误输出为同一个数据流进行重定向: 

14  &>:覆盖重定向 &>> 追加重定向 

15  COMMAND > /path/to/file.out 2> &1 (顺序很重要) 

16  COMMAND >> /path/to/file.out 2>> &1 find /etc -name passwd 2> /dev/null  

17  () 合并多个程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt


重定向 属于将数据流 导入或导出 一般和管道符使用 最佳


tr命令


tr – 转换和删除字符 

  tr [OPTION]… SET1 [SET2] 选项 

  -c或——complermen 取字符集的补集 

  -d或——delete 删除所有属于第一字符集的字符 

  -s或—squeeze-repeats 把连续重复的字符以单独一个字符 表示 

  -t或–truncate-set1 将第一个字符集对应字符转化为第二 字符集对应的字符


管道


管道(使用符号“|”表示)用来连接命令 

例如命令1 | 命令2 | 命令3 | … 将命令1的STDOUT发送给命令2的STDIN 命令2的 STDOUT发送到命令3的STDIN STDERR默认不能通过管道转发 可利用2>&1 或 |& 实现 最后一个命令会在当前shell进程的子shell进程中执行用来 组合多种工具的功能 ls  | tr 'a-z' 'A-Z'


管道是在 shell 脚本中连接 命令 字符 文件 的最佳 粘合剂 

通过管道 我们可以把一些单一的命令组织起来 完成一项复杂的任务


例如 重定向到多个目标


$命令1 | tee 文件名 | 命令2 把命令1的STDOUT保存在文件名中,然后管道输入给命令2 使用   保存不同阶段的输出 复杂管道的故障排除 同时查看和记录输出

相关练习:

1、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和

    

    echo $[1+2+3+4+5+6+7+8+9+10]

    echo "1+2+3+4+5+6+7+8+9+10" | bc


电脑演示

[root@localhost Desktop]# echo $[1+2+3+4+5+6+7+8+9+10]

55

[root@localhost Desktop]#  echo "1+2+3+4+5+6+7+8+9+10" | bc

55

[root@localhost Desktop]# 



2、处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格

     echo "xt.,l 1 jr#!$mn2 c*/fe3 uz4" | tr -d "xt.,ljr#!$mnc*/feuz"


电脑演示

[root@localhost Desktop]#  echo "xt.,l 1 jr#!$mn2 c*/fe3 uz4" | tr -d "xt.,ljr#!$mnc*/feuz"

 echo "xt.,l 1 jr#bcmn2 c*/fe3 uz4" | tr -d "xt.,ljr#bcmnc*/feuz"

 1 2 3 4

[root@localhost Desktop]# 


3、将PATH变量每个目录显示在独立的一行

     echo $PATH | tr ":" "\n"


电脑演示

[root@localhost Desktop]#   echo $PATH | tr ":" "\n"

/usr/lib64/qt-3.3/bin

/usr/local/sbin

/usr/sbin

/sbin

/usr/local/bin

/usr/bin

/bin

/root/bin

[root@localhost Desktop]# 


4、删除指定文件的空行

     cat /root/install.log | tr -s "\n"【利用-s的循环】


电脑演示


[root@localhost Desktop]#  cat /root/install.log | tr -s "\n"

{

333

anaconda-ks.cfg

Desktop

Documents

Downloads

f1

f22

f99

f[a,b,c,d,e,f]

history.log

install.log

install.log.syslog

Music

nusers

Pictures

Public

Templates

Videos

[root@localhost Desktop]# 


5、将文件中每个单词(字母)显示在独立的一行,并无空行

     cat /root/install.log | tr " " "\n" | tr -s "\n"


电脑演示


[root@localhost Desktop]#  cat /root/install.log | tr " " "\n" | tr -s "\n"

{

333

anaconda-ks.cfg

Desktop

Documents

Downloads

f1

f22

f99

f[a,b,c,d,e,f]

history.log

install.log

install.log.syslog

Music

nusers

Pictures

Public

Templates

Videos


6、创建用户tiantian,附加组为bin和root,默认shell为/bin/csh,注释信息为"Tiantian Distribution"

     useradd -G bin,root -s /bin/csh -c "Tiantian Distribution" tiantian


电脑演示


[root@localhost Desktop]#   useradd -G bin,root -s /bin/csh -c "Tiantian Distribution" tiantian


rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

abrt:x:173:173::/etc/abrt:/sbin/nologin

rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

gdm:x:42:42::/var/lib/gdm:/sbin/nologin

pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

tianya:x:500:500:tianya:/home/tianya:/bin/bash

gentoo:x:501:501:Gentoo Disttibuution:/home/gentoo:/bin/csh

tian:x:502:502::/home/tian:/bin/bash

tiantian:x:503:503:Tiantian Distribution:/home/tiantian:/bin/csh

[root@localhost Desktop]# ^C

[root@localhost Desktop]# 




7、创建下面的用户、组和组成员关系

名字为admins 的组

用户natasha,使用admins 作为附属组

用户harry,也使用admins 作为附属组

用户sarah,不可交互登录系统,且不是admins 的成员,natasha,harry,sarah密码都是centos

  

  1 #!/bin/bash

  2 groupadd admins

  3 useradd -G admins natasha

  4 useradd -G admins harry

  5 useradd -s /sbin/nologoin sarah

  6 echo "centos" | passwd –stdin natasha

  7 echo "centos" | passwd –stdin harry

  8 echo "centos" | passwd –stdin sarah


电脑演示


[root@localhost Desktop]# nano f1.xt

[root@localhost Desktop]# cat f1.xt

#!/bin/bash

   groupadd admins

   useradd -G admins natasha

   useradd -G admins harry

   useradd -s /sbin/nologoin sarah

   echo "centos" | passwd –stdin natasha

   echo "centos" | passwd –stdin harry

   echo "centos" | passwd –stdin


原创文章,作者:a1215276209,如若转载,请注明出处:http://www.178linux.com/33227