Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答

11
为什么Shell无法自动修复“猫的无用使用”?[关闭]
很多人使用单行代码和包含代码的脚本 cat "$MYFILE" | command1 | command2 > "$OUTPUT" 第cat一种通常称为“猫的无用使用”,因为从技术上讲,它需要启动一个新进程(通常是/usr/bin/cat),如果已经执行了该命令,则可以避免这种情况 < "$MYFILE" command1 | command2 > "$OUTPUT" 因为shell只需启动command1,只需将其stdin指向给定文件即可。 Shell为什么不自动执行此转换?我觉得“猫的无用使用”语法更容易阅读,shell应该有足够的信息来自动摆脱无用的cat。的cat是在POSIX标准定义,因此壳应该允许执行它在内部,而不是在路径使用二进制的。Shell甚至可以只包含一个参数版本的实现,并在路径中回退到二进制。

5
为什么我需要将“ do”与“ for”放在同一行?
1.总结 我不明白,为什么我需要E010打击规则。 2.细节 我用bashate了掉毛.sh的文件。E010规则: 这样做不是在同一行的 for 打击 正确: #!/bin/bash for f in bash/*.sh; do sashacommand "$f" done 错误: #!/bin/bash for f in bash/*.sh do sashacommand "$f" done 是否有任何有效的论据,为什么我需要for并do在同一行? 3.没用 我在以下位置找不到我的问题的答案: 谷歌 有关最佳编码实践的文章(示例) bashate文档。我只找到: 一组有助于使控制块中的内容保持一致的规则。这些在连续的长行中被忽略,因为展开是一种“有趣的”

1
&&和||之后的bash行继续在哪里 有记载吗?
我已经在脚本中看过很多这种结构,并且自己使用过,但是令我感到困扰的是,我似乎在文档中找不到它。 例: [ -f file1 ] && [ -f file2 ] && echo "Both files exist." || echo "One or the other file doesn't exist." 也可以在换行符之前用反斜杠来完成,如man bash: If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, it …

4
Shell函数中局部变量的范围
看完24.2。局部变量,我认为var使用关键字声明变量local意味着var仅在函数的花括号分隔的代码块中可以访问的值。 但是,在运行以下示例之后,我发现var也可以从该代码块调用的函数中进行访问,读取和写入-即,即使var被声明local为outerFunc,innerFunc也仍然可以读取和更改其值。 Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" 输出: global: before outerFunc: [var:] …

3
如何从外壳中永久删除别名
当我不在电脑旁时,有人得到了它,并ls在我的根文件夹中设置了别名。他将其设置为'yes NeverGonnaGiveYouUp'。所以现在当我在我的根文件夹中并键入时,ls我得到一个NeverGonnaGiveYouUp的无限循环。它让我发疯,我不知道如何摆脱它。 我已经尝试过了unalias,unalias -a但是那些只是暂时将其删除。一旦我关闭外壳并重新打开它,它就会回来。我如何摆脱这种胡扯?
28 shell  terminal  alias 


5
立即返回特定返回码的Unix命令?
是否有标准的Unix命令,其执行的操作与以下示例相似 $ <cmd here> 56 $ echo Return code was $? Return code was 56 $ <cmd here>应该是可以分叉执行的东西,当进程退出时将56作为退出代码。在exit和returnshell内建不适合我要找的,因为它们影响调用shell本身它退出了。<some cmd>应该是我可以在非shell上下文中执行的东西-例如,使用调用Python脚本subprocess。 例如,/usr/bin/false总是立即返回返回码1,但是我想精确控制返回码是什么。我可以通过编写自己的包装脚本来达到相同的结果 $ cat my-wrapper-script.sh # i.e., <some cmd> = ./my-wrapper-script.sh #!/usr/bin/bash exit $1 $ ./my-wrapper-script.sh 56 $ echo $? 56 但是我希望这里确实存在可以为我做的标准Unix命令。

2
是否真正内置BusyBox命令?
我正在阅读著名的Unix Recovery Legend,这让我感到奇怪: 如果我打开了BusyBox外壳,并且BusyBox二进制文件本身也被删除,我是否仍然可以使用BusyBox二进制文件中包含的所有命令? 显然,我将无法从其他正在运行的外壳程序(如)中使用这些命令的BB版本bash,因为BusyBox文件本身将无法bash打开和运行。但是从我正在运行的BusyBox实例中,看来BB可以通过两种方法运行命令: 它可以派生并执行一个新的BusyBox实例,使用适当的名称调用它,然后从磁盘读取BusyBox文件。 它可以派生并执行一些内部逻辑来运行指定的命令(例如,通过将其作为函数调用运行)。 如果(1)是BusyBox的工作方式,我希望删除BB二进制文件后,某些正在运行的BUSYBOX提供的命令将从正在运行的BB实例中不可用。 如果(2)是它的工作方式,则即使已删除BB本身的系统,也可以使用BusyBox进行恢复-前提是仍可以访问正在运行的BusyBox实例。 这在任何地方都有记录吗?如果没有,有没有办法对其进行安全测试?



5
Linux如何区分真实文件和不存在的文件(例如:设备)?
这是一个比较低级的问题,我知道这可能不是最好的问题。但是,它似乎比其他任何SE网站都更合适,所以请继续。 我知道在Linux文件系统上实际上存在一些文件,例如:/usr/bin/bash是存在的文件。然而,(据我所知),有的还没有实际存在本身和更虚拟的文件,如:/dev/sda,/proc/cpuinfo等我的问题是(它们是两个,而是要独立的问题也密切相关): 当发出读取命令(或类似命令)时,Linux内核如何判断这些文件是真实的(并因此从磁盘读取)? 如果文件不是真实的:例如,从读取/dev/random将返回随机数据,而从读取/dev/null将返回EOF。如何计算要从该虚拟文件中读取哪些数据(以及如果/如果将数据也写入该虚拟文件中,那么该怎么做)-是否存在某种类型的映射,该映射具有用于分隔适用于每个文件的读/写命令的指针,甚至虚拟目录本身?因此,的条目/dev/null可以简单地返回EOF。

8
浏览某些网站时,几分钟内Linux可能无响应吗?
我使用的是Linux 4.15,当我浏览Google,Facebook或任何其他资源匮乏的网站时,这种情况经常发生在我身上-整个操作系统变得无响应,冻结且无用。我唯一能正常工作的是磁盘(主系统分区格式化为ext4),该磁盘已大量使用(I / O节流)。 我不得不等待一分钟或更长时间才能摆脱肿胀,有时它会在十二分钟内保持无反应,因此我感到沮丧。操作系统无法很好地处理多任务,这一事实倾向于反映出一种绝对怪异和不可接受的行为。 不仅发生这种情况与Firefox,但与任何的JavaScript解释器应用程序,包括微软VSCode或角-CLI(ng serve命令),以及执行任何其他渴求资源的线程-例如的情况下plantuml生成从一个非常大的图形时非常复杂的UML图。 如今,在为外部硬盘(通过ext4分区)启动数据恢复软件后,操作系统几乎变得无法管理。 我无法说出此类错误行为背后的根本原因 我在浏览器中打开了许多选项卡,根据df输出,操作系统分区的使用率为94%: Filesystem 1K-blocks Used Available Use% Mounted on udev 3964160 0 3964160 0% /dev tmpfs 798164 3192 794972 1% /run /dev/sda5 173466400 153224316 11407424 94% / tmpfs 3990820 62936 3927884 2% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 3990820 0 …
28 linux  freeze 


2
如何在第一次使用ssh登录时强制用户更改密码?
我试图强迫新创建的用户在第一次使用ssh登录时更改密码。为了安全起见,我想给他一个安全的密码,直到他第一次登录。到目前为止,我做了以下工作: useradd -s /bin/bash -m -d /home/foo foo passwd foo 这样做chage -d 0 foo只会给我Your account has expired; please contact your system administratorssh登录错误。
28 linux  bash  ssh  login  pam 

4
如何在Ubuntu VM上扩展文件系统分区?
我正在使用vmware Fusion在Mac上将VM作为虚拟机运行Ubuntu Desktop 14.04。我遇到了空间警告问题,现在想从20GB扩展到200GB。 我关闭了虚拟机电源,并在vmware端增加了分配的磁盘空间: 关闭虚拟机电源 VMWare Fusion->虚拟机->设置->硬盘(SCSI) 然后,它警告我应该增加来宾VM内的分区大小,这很不幸,因为我希望这将是自动的。 查看Ubuntu内部的磁盘使用情况分析器,当前仅能看到原始的20 GB。如何将其增加到分配的200 GB? 我正在寻找比这里发布更好的方向。 从Disks应用程序中,我看到:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.