3.Linux文件管理和 I/O 重定向

Linux文件管理和 I/O 重定向

Linux文件系统目录结构

常见目录说明:

Linux的目录结构

  • /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。

  • /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。

  • /boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。

  • /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。

  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。

  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。

  • /lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。

  • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。

  • /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。

  • /opt:给主机额外安装软件所摆放的目录。

  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。

  • /root:系统管理员root的家目录。

  • /sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。

  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。

  • /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。

  • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。

  • /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

说明:

  • 文件和目录被组织成一个单根倒置树结构
  • 文件系统从根目录下开始,用“/”表示
  • 根文件系统(rootfs): root filesystem
  • 标准Linux文件系统(如: ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAilL
  • 以 . 开头的文件为隐藏文件
  • 路径分割的 /
  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色–> 目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其它文件
  • 每个文件都有两类相关数据:元数据:metdata,即属性,数据:data,即文件内容。

Linux下的文件类型

-  普通文件
d  目录文件directory
|  符号1链接文件link
b  块设备block
c  字符设备character
p  管道文件pipe
s  套接字文件socket
范例:
[root@Centos7 ~]# ls -l /run/
-rw-r--r--  1 root root              4 Aug 10 13:25 acpid.pid
srw-rw-rw-  1 root root              0 Aug 10 13:25 acpid.socket
-rw-r--r--  1 root root              5 Aug 10 13:27 atd.pid
-rw-r--r--  1 root root              5 Aug 10 13:26 crond.pid
----------  1 root root              0 Aug 10 13:25 cron.reboot
drwx------  2 root root             40 Aug 10 13:25 cryptsetup
drwxr-xr-x  2 root root             60 Aug 10 13:25 dbus
-rw-r--r--  1 root root              4 Aug 10 13:25 dhclient-eth0.pid
prw-------  1 root root              0 Aug 10 13:25 dmeventd-client
prw-------  1 root root              0 Aug 10 13:25 dmeventd-server
-rw-------  1 root root              0 Aug 10 17:01 ebtables.lock
drwxr-xr-x  2 root root             40 Aug 10 13:25 faillock
-rw-r--r--  1 root root              5 Aug 10 13:26 lvmetad.pid
drwxr-xr-x  2 root root             40 Aug 10 13:25 mount
drwxr-xr-x  2 root root             40 Aug 10 13:25 setrans
-rw-r--r--  1 root root              5 Aug 10 13:25 sshd.pid
-rw-r--r--  1 root root              5 Aug 10 13:26 stargate.tencentyun.pid
drwx--x--x  3 root root             60 Aug 10 13:25 sudo
-rw-------  1 root root              4 Aug 10 13:26 syslogd.pid
drwxr-xr-x 17 root root            440 Aug 10 17:01 systemd
-rw-r--r--  1 root root              4 Aug 10 13:25 tat_agent.pid
drwxr-xr-x  2 root root             60 Aug 10 13:25 tmpfiles.d
drwxr-xr-x  3 root root             60 Sep  7 20:50 user
-rw-rw-r--  1 root utmp           2304 Sep 14 21:07 utmp
-rw-------  1 root root              0 Aug 10 13:26 xtables.lock
drwxr-xr-x  3 root root             60 Aug 10 13:26 ydeyes
-rw-r--r--  1 root root              0 Aug 10 13:25 YDLive.pid
-rw-r--r--  1 root root              4 Aug 10 13:26 YDService.pid

文件操作命令

显示当前工作目录

每个shell和系统进程都有一个当前的工作目录 CWD:current work directory

显示当前shell CWD的绝对路径

pwd命令:printing working directory

  • -P 显示真实物理路径
  • -L 显示链接路径(默认)

范例:

[root@Centos7 ~]# cd /opt/
[root@Centos7 opt]# pwd
/opt
[root@Centos7 opt]# pwd -P
/opt
[root@Centos7 opt]# cd /bin/
[root@Centos7 bin]# pwd
/bin
[root@Centos7 bin]# pwd -P
/usr/bin
[root@Centos7 bin]# 

绝对和相对路径

  • 绝对路径

    以正斜杠 / 即根目录开始

    完整的文件的位置路径

    可用于任何想指定一个文件名的时候

  • 相对路径

    不以任何斜杠开始

    一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相于某目录的位置可以作为一个简短的形式指定一个文件名

基名:

用户目录

位于/home/user,称之为用户的工作目录或家目录。表示方式:

/home/user
~

从 / 目录开始描述的路径为绝对路径,如:

cd /home
ls /usr

从当前位置开始描述的路径为相对路径,如:

cd ../../
ls abc/def

每个目录下都有**.和…**

. 表示当前目录

… 表示上一级目录,即父目录

根目录下的.和…都表示当前目录

文件的颜色含义
蓝色目录
绿色可执行文件
红色压缩文件
浅蓝色链接文件
灰色其他文件

软硬链接

硬链接(hard)

硬链接本质是给一个文件起个新名称,实质是同一个文件。

硬链接特性

  • 创建硬链接会对对应的目录中增加额外的记录项以引用文件
  • 对应于同一个文件系统上一个物理文件
  • 每个目录引用相同的inode号
  • 创建时链接数递增
  • 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
  • 不能跨驱动器或分区
  • 不支持对目录创建硬链接

格式:

ln filename [linkname]
软链接

一个符号链接指向另一个文件,就像windows中快捷方式,软链接文件和原文件本质上不是同一个文件软链接特点。

  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录创建软链接
  • 可以跨分区的文件实现
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
  • 在创建软链接时,如果源文件使用相对路径,是相对于软链接文件的路径,而非相对于当前工作目录,但是软链接的路径如果是相对路径,则是相对于当前工作目录

格式:

ln -s filename [linkname]

范例:

# 绝对路径
ln -s /date/dir /data/dirlink
# 相对路径
cd /data
ln -s ../data/dir /root/dirlink
rm -rf /data/dirlink #删除软连接本身不会,删除源目录内容
rm -rf /data/dirlink #删除硬链接目录的文件,不会删除链接文件

# 查看链接文件指向的原文件
readlink /data/dirlink
硬链接和软链接的区别
  1. 本质:

    硬链接:本质是同一个文件

    软连接:本质不是同一个文件

  2. inode

    硬链接:相同

    软链接:不相同

  3. 文件夹

    硬链接:不支持

    软链接:支持

  4. 相对路径

    硬链接:原始文件相对路径是相对于当前工作目录

    软链接:原始文件的相对路径是相对于链接文件的相对路径

  5. 文件类型

    硬链接:和源文件相同

    软链接:源文件的路径的长度

IO重定向和管道

标准输入和输出

程序:指令 + 数据

读入数据:input

输出数据:Output

打开的文件都有一个fd:fine descriptor(文件描述符)

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

  • 标准输入(STDIN):-0 默认接受来自终端窗口的输入

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

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

实例:文件描述符

[root@ouou ~]# ls /opt/
b  containerd  mellanox  rh
[root@ouou ~]# ls /opt/aaha*
ls: cannot access /opt/aaha*: No such file or directory
I/O重定向 redirect

I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标。

标准输出和错误重新定向

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端。

格式:

命令 操作符号  文件名
支持的操作符号包括:
1> 或 >     把标准输入重定向到文件
2>          把标准输出重定向到文件
&>          把标准输入和输出都重定向

以上如果文件已存在,文件内容会被覆盖

set -c 禁止将内容覆盖已有文件,但可追加, 利用 >| 仍可强制覆盖。
set +c 允许覆盖,默认。

追加

>> 可以在原有内容基础上,追加内容
把输出和错误重新定向追加到文件

>> 追加标准输出重定向至文件
2 >> 追加标准错误重定向至文件

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

COMMAND > /path/to/file.out 2> /path/toerror.out

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

&> 覆盖重定向

&>> 追加重定向

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

COMMAND >> /path/to/file.out 2&1

合并多个程序

(CMD1;CMD2…)或者{CMD1;CMD2;…;}合并多个程序的STDOUT

范例:

ls 1> /opt/test

范例:标准错误重定向

rm /data/f1.log 2> /data/all.log

范例:清除大文件

cat /dev/null > /data/file.log
> /data/file.log

范例:分别重定向

ls /data /xxx > stdout.log 2> stderr.log
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值