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

2023-11-04

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.Linux文件管理和 I/O 重定向 的相关文章

  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 当安装的 RPM 取代了另一个 RPM 时如何检测升级

    RPM scriptlet 被传入 1 https fedoraproject org wiki Packaging Scriptlets rd Packaging ScriptletSnippets Syntax 操作完成后 系统中将保留
  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐

  • 贪心算法之活动安排问题(填表详解+思路解析)

    贪心算法 总是选择当前看起来最优的选择 局部最优解 得到的结果是一个整体最优解 但是总是选择局部最优解并不总是能得到整体最优解 需要在问题具有 贪心选择性和优化子结构时才成立 贪心选择性 第一次做出贪心选择是正确的 优化子结构 第一次做完贪
  • Tarjan 强连通分量算法的 Java 实现

    强连通分量算法是图论中的一个重要算法 用于将有向图分解为若干个强连通分量 Tarjan 算法是其中一种常用的实现方式 它可以高效地找到图中的所有强连通分量 本文将介绍 Tarjan 强连通分量算法的 Java 实现 并提供相应的源代码 首先
  • 万用表的使用

    deprecate 反对 轻视 declaration 宣告 声明书 宣布 宣告 申报 arg argue 争论 论证 争辩 主张 认为 提供证据 证明 表明 原因等 type 类型 种类 打字 成为 的典型 function 功能 作用
  • [721]linux安装kafka及命令行使用

    文章目录 一 安装kafka 二 解压kafka 三 修改server properties文件 四 修改zookeeper properties文件 五 添加kafka启动脚本 六 启动kafka 七 命令行使用kafka 创建topic
  • Vue知识系列(4)每天10个小知识点

    目录 系列文章目录 Vue知识系列 1 每天10个小知识点 Vue知识系列 2 每天10个小知识点 Vue知识系列 3 每天10个小知识点 知识点 31 Vuex 四种属性的概念 作用 使用示例 32 Vuex 和单纯的全局对象 的概念 作
  • Linux磁盘分区和文件系统的关系

    一 Linux磁盘相关命令及作用 1 df命令 用于显示文件系统的磁盘空间使用情况 2 du命令 用于查看文件或目录的磁盘使用情况 3 fdisk命令 用于磁盘分区表的创建和管理 4 mkfs命令 用于创建文件系统 5 mount命令 用于
  • 华北电力计算机专业排名,华电考研计算机专业排名

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1354计算机软件与理论359 1355计算机软件与理论340 1356计算机软件与理论334 1357计算机软件与理论329 1358计算机软件与理论326 1359计算机软件与理论324 1
  • C++/C++11中引用的使用

    引用 reference 是一种复合类型 compound type 引用为对象起了另外一个名字 引用类型引用 refer to 另外一种类型 通过将声明符写成 d的形式来定义引用类型 其中d是声明的变量名 一 一般引用 一般在初始化变量时
  • Cocos2dx on Qt

    讨论贴在这里 http www cocos2d x org boards 6 topics 8043 page 1 准备 glew 库 bin glew32 dll gt windows system32 include GL gt VC
  • STM32F103时钟配置流程

    知识点 系统复位后 HSI振荡器被选为系统时钟 当时钟源被直接或通过PLL间接作为系统时钟时 它将不能被停止 STM32F103的三个可以作为系统时钟的时钟源 分别是HSI HSE PLL 而PLL的时钟源是HSI 2 内部RC振荡器二分频
  • 华硕计算机cpu怎么超频怎么设置,内存和CPU超频操作_华硕 ROG Rampage VI Apex_主板评测-中关村在线...

    进阶操作 进BIOS可能很多人都是为了去给CPU和内存进行超频 首先按F7进入到高级模式 华硕的主板选择Extreme Tweaker选项卡 有的主板是AI Tweaker或者超频设置等名字 Extreme Tweaker选项卡 内存超频
  • 如何使用postman做接口测试

    常用的接口测试工具主要有以下几种 Postman 简单方便的接口调试工具 便于分享和协作 具有接口调试 接口集管理 环境配置 参数化 断言 批量执行 录制接口 Mock Server 接口文档 接口监控等功能 JMeter 开源接口测试及压
  • Python中is和==(is not和!=)的区别

    Python中有很多种运算符 本文主要记录一下is和 这两种运算符的区别 id 函数是查看该对象所在内存地址 每个对象都有对应的内存地址 如 is 用于判断两个变量引用对象是否为同一个 用于判断引用变量的值是否相等 类似于Java中的equ
  • 华为OD机试 - 按单词下标区间翻转文章内容(Java)

    题目描述 给定一段英文文章片段 由若干单词组成 单词间以空格间隔 单词下标从0开始 请翻转片段中指定区间的单词顺序并返回翻转后的内容 例如给定的英文文章片段为 I am a developer 翻转区间为 0 3 则输出 developer
  • HJ26 字符串排序

    Powered by NEFU AB IN Link 文章目录 HJ26 字符串排序 题意 思路 代码 HJ26 字符串排序 题意 编写一个程序 将输入字符串中的字符按如下规则排序 规则 1 英文字母从 A 到 Z 排列 不区分大小写 如
  • PCL 计算点云法向量并显示

    目录 一 算法原理 1 法向量估计 2 法向量定向 3 表面曲率 4 参考文献 5 法向量定向的理解 6 CloudCompare 二 pcl Normal的定义 三 pcl Normal的几种输出方式 四 计算法线并显示 1 计算输入点云
  • 单点登录(简单的实现)

    假设现在有两个域名 分别为 分别记为client1 client2 client1 com client2 com 一个认证服务器 域名 ssoserver com client1 client2都需要登陆后才能访问到数据 现在想要实现cl
  • 76-C语言-输入班级学生的姓名和三科成绩,按总分排名

    问题 输入50分学生的姓名和三科成绩 按降序输出名字和总分 成绩相同的并列排名 思路 因为要学生排名 且一个学生有姓名 成绩 以及总分 所以弄一个学生的结构体 有多少学生 就输入该结构体的数组 一个for循环 给每个学生赋值 排序 降序 用
  • 【c++中的细节问题】关于typedef的详细用法

    请见 C C typedef用法详解 真的很详细 superhoy的专栏 CSDN博客 c typedef
  • 3.Linux文件管理和 I/O 重定向

    Linux文件管理和 I O 重定向 Linux文件系统目录结构 常见目录说明 根目录 一般根目录下只存放目录 在Linux下有且只有一个根目录 所有的东西都是从这里开始 当你在终端里输入 home 你其实是在告诉电脑 先从 根目录 开始