首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么shell在父目录中保存、复制和恢复重定向的描述符,而不是在子目录中进行重定向?

在shell中,保存、复制和恢复重定向的描述符通常是在父目录中进行,而不是在子目录中进行重定向的原因有以下几点:

  1. 父目录的权限更高:父目录通常具有更高的权限,可以对其下的子目录和文件进行管理。因此,在父目录中保存、复制和恢复重定向的描述符可以更方便地进行管理和控制。
  2. 子目录的变化不影响父目录:子目录可能会被删除、移动或重命名,但父目录通常是持久存在的。因此,在父目录中保存、复制和恢复重定向的描述符可以避免由于子目录变化而导致的重定向失效或错误。
  3. 父目录的作用域更广:父目录中保存的重定向描述符可以在整个父目录及其子目录中使用,而不仅仅局限于单个子目录。这样可以提高重定向的灵活性和可复用性。
  4. 父目录的层级更高:父目录通常是整个目录结构的顶层,保存重定向描述符的父目录可以更好地组织和管理整个目录结构中的重定向操作。

综上所述,将保存、复制和恢复重定向的描述符放在父目录中而不是子目录中进行重定向,可以提高管理和控制的便利性,避免重定向失效或错误,提高重定向的灵活性和可复用性,并更好地组织和管理整个目录结构中的重定向操作。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MIT 6.S081 (BOOK-RISCV-REV1)教材第一章内容 --- 操作系统接口

如果exec成功,那么子进程将从echo不是runcmd执行命令,某刻echo会调用exit,这将导致进程从main(*user/sh.c:78*)wait返回。...你或许想知道为什么execfork没有组合成为一个系统调用,稍后我们将会看到shell在其I/O重定向实现利用了这种分离。...O_TRUNC 将文件截断为零长度 现在应该很清楚为什么forkexec分离用处了: 在这两个调用之间,shell有机会对子进程进行I/O重定向不会干扰主shellI/O设置。...进程写操作(由于等待,只有子进程完成后才运行)子进程停止写入位置进行。...例如,只需进行上述修改,sleep 10 | echo hi将立即打印“hi”,不是10秒后,因为echo将立即运行并退出,不是等待sleep完成。

27520

【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口

当一个进程不再执行让出CPU时,Xv6保存了该进程CPU上某些相关寄存器内容,方便该进程在下次占用CPU时恢复到上次运行状态并接着运行。...Xv6通常隐式地分配用户空间内存:当子进程复制进程内存时,fork为子进程分配内存,exec分配了足够内存来保存可执行文件。...文件描述符与fork共同作用,使得I/O重定向易于实现。fork复制进程文件描述符表与内存,所以子进程具有与进程完全相同文件描述符。...现在你应该很清楚为什么把fork与exec分开调用是个好主意了:这种分离使得shell可以子进程执行指定程序之前对子进程进行修改。...2>&1通知shell把文件描述符2给命令,这个文件描述符2是文件描述符1拷贝。已存在文件名称与因文件不存在引发错误信息将显示文件temp1

60160
  • 《Linux命令行与shell脚本编程大全》第十五章 呈现数据

    shellshell运行程序脚本出错时生成错误消息都会发送到这个位置。 默认情况下STROUTSTDERR指向同样地方(显示器)。但是STDERR不会随着STDOUT重定向发生改变。...正常输出还是屏幕上。 15.2.2 永久重定向 如果有大量数据需要重定向,那么就会比较麻烦。 新方法:用exec命令告诉shell脚本执行期间重定向某个特定文件描述符 直接上例子: 1 #!...创建输入文件描述符 跟上面类似,先将STDIN保存到另外一个文件描述符,然后读取完文件将STDIN恢复 例子:   1 #!...可以利用同一个文件描述符对同一个文件进行读写。 用起来要小心:由于是对同一个文件进行数据读写,shell会维护一个内部指针,指明文件的当前位置。任何读或写都是从文件指针上次位置开始。...大部分linux发行版配置了系统启动时自动删除/tmp目录所有文件。 系统上任何用户账户都有权限在读写/tmp目录文件。 mktemp可以/tmp目录创建一个唯一临时文件。

    1.3K60

    Python实现守护进程

    # 退出子进程 sys.exit(0) # 此时,孙子进程已经是守护进程了,接下来重定向标准输入、输出、错误描述符(是重定向不是关闭, 这样可以避免程序...进程之所以退出,是因为终端敲击键盘、或者关闭时给它发送了信号;fork出来子进程,进程自杀后成为孤儿进程,进而被操作系统init进程接管,因此脱离终端控制。...umask权限掩码 我们知道,Linux,任何一个文件都有读(read)、写(write)执行(execute)三种使用权限。其中,读权限用数字4代表,写权限是2,执行权限是1。...因此,上面代码,子进程可以调用setsid(),进程不能,因为它本身就是会话组长。...3、守护进程改变了会话、进程组、工作目录和文件描述符,后台进程直接继承进程(shell 换句话说:守护进程就是默默地奋斗打拼有为青年,而后台进程是默默继承老爸资产富二代。

    2K80

    Linux命令重定向(>)管道(|)讲解

    日常使用Linux命令时候,经常使用重定向或者管道方式处理命令结果。以前对这两个命令使用场景存在一些困惑,所以本文对这两个命令进行详细总结。...我们又知道,Linux,子进程会继承进程文件描述符,所以说,Linux每个程序,执行每个shell命令,拥有这三个文件描述符程序后续打开文件,其文件描述符则(从3开始)依次增加。...对于一条shell命令,其从标准输入(键盘)获得输入,如果执行成功,则将输出打印标准输出(屏幕)上;如果执行出错,将结果打印标准错误(屏幕)上。...* 一条命令执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行输入重定向输入重定向输出重定向类似,其格式为:command [n] ...管道重定向区别管道触发两个子进程,执行|两边程序;重定向一个进程内执行。

    82310

    06-1重定向

    1.标准输出重定向 I/O 重定向功能可以重新定义标准输出内容发送目的地。 使用重定向操作符“ > ”,后面接文件名,就可以把标准输出重定向到另一个文件不是显示屏幕上。...(0)用法格式 命令 > 文件名 (1)为什么? 主要用于把命令输出内容保存到一个文件。...(2)例 ① 示例1 比如我们创建 /usr/bin 目录一个长列表信息,并把这个结果输出到 ls-output.txt 文件不是输出到屏幕上。...ls -l /bin/usr > ls-output.txt 我们会收到一条错误信息,因为我们指定是一个不存在目录,所以这个错误信息是正确,但是为什么这个错误信息显示屏幕上,不是重定向到 ls-output-noexist.txt...一个程序可以把生成输出内容发送到任意文件流,如果把这些文件流前三个分别对应标准输入文件、标准输出文件 标准错误文件,那么 shell 将在内部用文件描述符分别索引他们为 0、1 2 。

    85720

    Shell脚本管道符与重定向

    命令执行,都会继承进程文件描述符因此,所有运行shell命令,都会有默认3个文件描述符。...,命令输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符 5、一条命令执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行 (3)输入重定向 #基础语法 command-line...1>suc.txt ls -al ##执行命令,发现什么都不返回了,因为标准输出已经输出到suc.txt文件了 $exec 1>&6 ##恢复标准输出 #示例3.关闭fd 6描述符 #说明:使用前先将标准输入保存到文件描述符...EOF #示例2.shell脚本中进行使用 #!...”命名管道”),它是一种特殊文件类型,它允许独立进程通讯(反弹Shell你懂) 一个进程打开FIFO文件进行写操作,另一个进程对之进行读操作, 然后数据便可以如同在shell或者其它地方常见匿名管道一样流线执行

    1.8K42

    Shell脚本管道符与重定向

    命令执行,都会继承进程文件描述符因此,所有运行shell命令,都会有默认3个文件描述符。...,命令输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符 5、一条命令执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行 (3)输入重定向 #基础语法 command-line...描述:Here Document(”嵌入文档“)是 Shell 一种特殊重定向方式,它基本形式如下: << delimiter 将开始标记 delimiter 结束标记 delimiter...EOF #示例2.shell脚本中进行使用 #!...”命名管道”),它是一种特殊文件类型,它允许独立进程通讯(反弹Shell你懂) 一个进程打开FIFO文件进行写操作,另一个进程对之进行读操作, 然后数据便可以如同在shell或者其它地方常见匿名管道一样流线执行

    1K00

    如何优雅地将printf打印保存在文件

    我们都知道,一般使用printf打印都会直接打印终端,如果想要保存在文件里呢?我想你可能想到重定向。...例如: $ program > result.txt 这样printf输出就存储result.txt中了。相关内容可以参考《如何理解Linux shell“2>&1”》。...但是本文并不是说明如何实现一个logging功能,而是如何将printf原始打印保存在文件。...除了上面这种方式,还有一种方式是使用dup2: int dup2(int oldfd, int newfd); 它是用来复制文件描述符,会使得newfd成为oldfd副本.所以与上面看到不同是,标准输出往...有些后台进程有自己日志记录方式,不想让printf信息打印终端,因此可能会关闭。 总结 文本旨在通过将printf打印保存在文件来介绍重定向,以及0,1,2文件描述符

    9.9K31

    如何理解 Linux shell“2>&1”?

    由于系统不存在whatthis命令,因此执行会报错。 假如我们想保存该脚本打印结果,只需将test.sh结果重定向到log.txt即可: ....那么现在就容易理解前面的疑问了,2>&1表明将文件描述2(标准错误输出)内容重定向到文件描述符1(标准输出),为什么1前面需要&?...当没有&时,1会被认为是一个普通文件,有&表示重定向目标不是一个文件,而是一个文件描述符。.../home/hyb/workspaces/shell/log.txt 255 -> /home/hyb/workspaces/shell/test.sh 我们可以很明显地看到,文件描述符12都指向了...调用脚本时,可使用2>&1来将标准错误输出重定向。 只需要查看脚本错误时,可将标准输出重定向到文件,标准错误会打印控制台,便于查看。

    88430

    大数据学习之Linux基础

    编写shell 脚本案例——递归子目录 自定义Linux虚拟机安装 点击新建虚拟机 ?...注意 : 即使安装了中文包, 也不是每个命令都会被翻译成中文 文本流重定向 # 文件描述符fd cd /proc/$$/fd +tab键 ( $$就会转换成进程当前shellid) # 查看文件描述符...重定向 输出重定向 #输入重定向 # 见图1 1>xxx 标准输出覆盖重定向 1>>xxx 标准输出追加重定向 # 见图2 2>xxx 错误覆盖重定向 2>>xxx 错误追加重定向 # 一个文件如果同时输出标准输出内容错误内容...注意: test 应当总是花括号包围着。如果不是这样, for 命令开始之前就 作了变量替换,这意味着循环体变量变更在表达式中将不被考虑。...编写shell 脚本案例——判断目录下最大文件 思路 用户给定路径 输出文件大小最大文件 递归子目录 脚本内容 #!

    1.3K40

    常用命令、组合命令以及输入输出重定向

    -r选项告诉rm命令进入到它发现每个子目录中去删除文件,-f选项只是告诉rm命令完成任务但不要因为些细节问题(比如文件夹非空)烦扰用户。...# 在当前目录下创建了两个目录 dir1 dir2 mkdir dir1 dir2 3.3.创建目录中间必要子目录 如果在当前目录下创建一个新目录,然后再这个新目录创建一个新子目录,然后再创建子目录子目录...就是软链接末端加了一个简单斜杠(“/”)。 没有斜杠的话,移动是软链接本身,而且只是这个链接; 有了斜杠的话,移动将是软链接指定目录不是软链接本身。 一定要小心啊!...当在shell想快速成为root用户时,这个命令最常用,运行一两个命令,然后恢复到普通非root用户。 调用su命令并不难。只要输入su,后面跟上你想要采用用户身份就可以了。...与将stdout重定向到文件一样,也可以重定向stdin,让它接受来自文件不是键盘输入。 这有什么用呢? 有些命令不能直接打开文件,在这种情况下,<(小于号)就是你需要解决方法。

    1.7K30

    xv6(19) SHELL交互程序

    在说 $shell$ 实现之前先来看看 $shell$ 支持两种机制,重定向管道 重定向 重定向依赖于文件描述符这层抽象 $fork$ 实现机制。...管道本身就是块内存区,创建管道时候就分配文件结构体文件描述符来描述这个管道。...这里提一句虽然 $shell$ 里面区分了输出重定向覆盖追加两种情况,但实际 $xv6$ 还没有实现相应功能,这需要我们自行添加这个功能,具体点就是从文件结构体偏移量入手。...$exec$ 第一个参数是可执行程序路径,所以准确讲 $argv0$ 不是程序名,而是路径名,因为这些可执行程序都在根目录下,当前工作目录又是目录,所以说程序名也就当作是路径名了。...另外这最后解决前文控制台输入输出一文遗留一个问题,为什么控制台键入 Ctrl + D 会导致 shell 退出,从这里我们看出如果 getcmd 函数返回值小于 0 的话,那么 shell 就会执行

    37510

    小白也能学会 Linux 基础命令()

    目录相关命令 实际应用,与目录相关操作主要有两个:创建目录与删除目录。...如果是使用 cp 命令来复制文件夹,则 -r 就不是选项,而是必须项 注意:复制过程中文档名称是不变 用法一:复制 /root/readme.txt 到 /tmp 目录下 ?...移动过程中文档名称名称是不变,变是路径 剪切、移动文件: ? 剪切、移动文件夹: ? 3.3 重命名操作 Linux 重命名命令也是 mv,语法移动语法一样。...4.2 tar 打包命令 gzip 、bzip2 或 xz 命令带有多个文件作为参数时,执行操作是将各个文件独立压缩,不是将其放在一起进行压缩。...输出重定向 场景:一般命令输出都会显示终端,有些时候需要将一些命令执行结果保存到文件中进行后续 分析/统计,则这时候需要使用到 输出重定向技术。

    65630

    Linux(一)

    格式: file [目标路径] ls ls 是英文 list 缩写,用于列出文件。 Unix 类 Unix 操作系统中都有当前目录概念,也即程序目前目录位置。...GNU 版 ls 根据文件类型、扩展名使用权限来决定颜色, FreeBSD 版 ls 仅仅检查文件类型使用权限。 常用参数: a: 列出目录所有文件,包括以 ....pwd 类 Unix 系统其他一些操作系统,pwd(print working directory)用于输出当前工作目录绝对路径。...常用参数: p: 用于构建复杂目录层次结构,不论目录是否已经存在 touch touch 用于更改文件访问修改时间标准 Unix 程序,它也被用于创建新文件。...屏幕上错误输出,文件描述符为 2 相关符号 ‘<’ : 标准输入重定向 ‘>’ : 标准输出重定向 ‘2>’ : 标准错误重定向 ‘>>’ : 标准输出追加 ‘2>>’: 标准错误追加 ‘&>’ :

    51720

    Linux系列之重定向操作

    除此之外,一些程序从标准输入stdin获取输入。默认情况下,标准输入与键盘相连接。 默认情况下,stdoutstderr 都被链接到屏幕上,不是保存到文件。...重定向允许我们改变输出去向输入来源。 重定向标准输出 为了重定向到其他文件不是屏幕上,我们使用>重定向操作符,后面跟随文件名称。...举例来说,我们可以使用重定向操作符来告诉shell,发送ls命令输出到ls-output.txt文件不是屏幕上。...shell将stdout、stdinstderr分别作为文件描述符0、12内部引用。我们可以用这个符号重定向stderr。...使用这种方式命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。 tee命令 tee命令读取stdin并将其复制到stdout一个或多个文件

    1.3K20

    python 守护进程(daemon)

    inetd完成了    所有需要做事情,包括重定向标准文件描述符,需要做事情只有chdir()umask()了 ''' def daemon(stdin='/dev/null', stdout=...stdout, 'a+')     se = open(stderr, 'a+')     os.dup2(si.fileno(), sys.stdin.fileno())  # dup2函数原子化关闭复制文件描述符...1、fork子进程,进程退出 通常,我们执行服务端程序时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端盒shell都是进程,shell进程是终端进程子进程,通过ps命令可以很容易查看到...,在这个shell环境下一开始执行程序都是shell进程子进程,自然会受到shell进程影响,程序里fork子进程后,进程退出,对于shell进程来说,这个进程就算执行完毕,产生子进程会被...2.修改子进程工作目录 子进程创建时候会继承进程工作目录,如果执行程序是U盘里面,就会导致U盘不能卸载。

    1.1K30

    Linux 命令行操作和文件管理

    #以列表方式查看当前目录所有子目录和文件(包含隐藏文件) ls -al /usr       #以列表方式查看 /usr 目录所有子目录和文件 值得注意是:Linux,路径开头“/”表示根目录...递归持续复制,用于目录复制行为 -f 强制复制,有重复或疑问时不会询问 -p 保存源文件目录属性 -i 覆盖既有目录之前先询问 示例: cp /etc/profile Downloads/info...nano [文件名] nano常用命令(详见nano下方提示菜单): (1)保存:Ctrl+O (2)退出:Ctrl+X (3)写入:Ctrl+W 4 输入输出管道 重定向管道允许用户认为改变程序输入输出位置...(1)输出重定向:“>”“>>”        以下ls指令不会把目录列表显示出来,而是保存到一个名为ls_out文件。...下面可以把文件ls_out内容作为输入。 cat < ls_out        这cat ls_out效果一致,输入重定向并不常用。

    1.9K30

    如何在Bash Shell脚本中使用`exec`命令?

    3<&-在上面的示例,脚本首先保存了标准输入(文件描述符为0)到文件描述符3(exec 3<&0),然后使用 exec 命令将标准输入重定向到文件 input.txt。...接下来,脚本使用 echo 命令输出一行文本,该行文本将被重定向到文件不是默认标准输出。重定向标准错误输出:#!...使用 exec 命令进行输入输出重定向时,请确保目标文件存在并具有适当权限。否则,可能会出现错误。理解文件描述符概念。文件描述符是与打开文件相关联整数。...标准输入、输出错误输出分别使用文件描述符0、12。总结exec 命令Bash Shell脚本使用提供了灵活功能。...您可以使用 exec 命令替换当前Shell进程、切换到不同命令解释器以及重定向标准输入、输出错误输出。通过合理使用 exec 命令,您可以Shell脚本实现更高级功能控制。

    3.3K50
    领券