Unix & Linux

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

1
Bash脚本函数名称包含双冒号'::'
我今天遇到了一个Bash脚本,其中包含带有双冒号的函数名称::,例如file::write()和file::read()。我以前从未在Bash脚本中看到过这种语法,当我调用该脚本时,它运行得很好(令我惊讶)。 在系统上(和在线)上查看Bash的手册页后,我在文档中找不到支持此函数名语法的任何内容。例如,本节Shell Defined Functions将shell函数的语法定义为 function name [()] compound-command [redirection] 然后(在手册的其他地方)令牌name定义为 name A word consisting only of alphanumeric characters and underscores, and beginning with an alphabetic character or an underscore. Also referred to as an identifier. 没有任何提及函数名的双冒号语法。 到目前为止,我在此《Shell Style Guide》(请参阅小节Naming Conventions > Function Names)中找到了对此双冒号语法的唯一其他参考,该指南建议对“包”中的函数名使用双冒号语法-例如,mypackage::myfunction()。 函数名称的这种双冒号语法是Bash shell的合法功能,还是未公开的功能?如果合法,Bash手册中将其记录在哪里?我已经看了看,但是在手册中找不到任何有关它的信息。我发现最接近的是::在PATH环境变量中使用,将当前工作目录添加到搜索路径。 例 #!/bin/bash function abc::def() { …

2
反斜杠点是什么命令?
我安装的软件在个人资料中插入了以下内容: [ -s "$SOME_FILE" ] && \. "$SOME_FILE" 我知道dot .是的代名词source,所以我怀疑这只是在寻找文件,但是我从未见过\.。它还有其他作用吗? 编辑有关DV的内容:搜索“反斜杠点”会导致有关./调用可执行文件时的问题,并man source导致手册页\.不出现。我不知道还能尝试什么,因此是一个问题。 编辑2:查看相关问题 为什么用反斜杠启动shell命令 命令开头的反斜杠 为什么反斜杠阻止别名扩展 运行被别名遮盖的命令
17 bash 

2
使用echo将敏感数据传递到chpasswd是否安全?
我正在尝试使用批量设置一些用户帐户密码chpasswd。密码应随机生成并打印到stdout(我需要写下来或将它们放在密码存储区中),然后再传递到中chpasswd。 天真的,我会这样 { echo student1:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') echo student2:$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') } | tee >(chpasswd) 但是,我担心将新密码作为命令行参数传递给echo,因为参数通常对中的其他用户可见ps -aux(尽管我从未看到中echo出现任何行ps)。 是否有其他方法可以在返回的密码前添加一个值,然后将其传递给chpasswd?

2
为什么mv比cp快得多?如何从错误的mv命令中恢复?
我在FileZilla中错误地将文件夹拖放到另一个文件夹中。 ~/big_folder ~/some_other_folder 被移动的文件夹非常大。它包含数十万个文件(node_modules,小的图像文件,很多文件夹) 奇怪的是,释放鼠标后,移动完成了。文件夹“ big_folder”被移至“ some_other_folder”。 ~/some_other_folder/big_folder (没有big_folder在~/移动之后) 然后我意识到了这个错误,然后尝试移回去,但是在FileZilla和终端上都失败了。 然后,我必须cp -r将文件复制回去,因为有服务器端代码可以访问这些文件~/big_folder 它需要永远的等待... 我该怎么办? 顺便说一句,这是FileZilla的输出(这是后退的失败): Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder' Status: /root/big_folder -> /root/some_other_folder/big_folder Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder' Command: mv "big_folder" "/root/big_folder" Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
17 cp  mv 

1
引用$(command $ arg)的正确方法是什么?
现在是解决困扰我多年的难题的时候了... 我不时遇到这个问题,并认为这是要走的路: $(comm "$(arg)") 并且认为我的观点得到了经验的大力支持。但是我不太确定了。Shellcheck也无法下定决心。两者都是: "$(dirname $0)"/stop.bash ^-- SC2086: Double quote to prevent globbing and word splitting. 和: $(dirname "$0")/stop.bash ^-- SC2046: Quote this to prevent word splitting. 背后的逻辑是什么? (这是Shellcheck 0.4.4版,顺便说一句。)


2
如何检查Linux内核是否启用了“ Retpoline”?
对于“ Spectre”安全漏洞,引入“ Retpoline”是减轻风险的解决方案。但是,我读了一篇提到的文章: 如果您构建内核而没有 CONFIG_RETPOLINE,则无法使用retpoline来构建模块,然后再期望它们加载—因为不会导出thunk符号。 如果您使用retpoline构建内核,则可以成功加载不是使用retpoline构建的模块。(来源) 有没有一种简单且通用/通用/统一的方法来检查内核是否启用了“ Retpoline”?我想要这样做,以便安装程序可以使用要安装的内核模块的正确构建。

4
为什么默认情况下仍启用bash历史记录替换?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 去年关闭。 有人知道为什么默认情况下bash仍启用历史记录替换吗?我.bashrc已经加入set +H了很多年,但其他一些人仍被该功能所困扰。 鉴于几乎每个人都在使用具有复制粘贴功能的终端,并且使用readline库编译的bash 和默认情况下仅在交互式shell中启用了历史替换,是否真的有理由完全使用该功能?即使默认情况下所有外壳程序都禁用了此脚本,也不会破坏现有脚本。 如果您不知道为什么历史替换被破坏,请尝试以下操作: $ set +H # disable feature history substitution $ echo "WTF???!?!!?" WTF???!?!!? $ set -H # enable feature history substitution $ echo "WTF???!?!!?" echo WTF???echo WTF???!?!!? WTF???echo WTF???!?!!? (很明显,如果默认情况下所有脚本都禁用了该功能,并且存在在执行之前验证结果的功能,则该功能存在重大问题shopt -s histverify。) 也可以看看: 为什么感叹号`!`有时会使bash烦躁? 为什么Bash历史记录不记录此命令? 如何回响一声巨响! Bash:在同一行中的双引号之后,单引号内的历史记录扩展

1
完全隔离VirtualBox计算机
我想使用VirtualBox安装一些不应该访问我的主机的软件(反之亦然)。但是,我还设想了尝试更多“危险”东西的可能性,例如尝试运行零时差攻击并查看它们可以做什么。 虚拟机如何与主机隔离?我应该(或者可以吗?)在访客和主机之间设置防火墙?来宾附加组件是否存在安全风险?共享目录呢? 目前,来宾计算机正在运行GNU / Linux Debian测试。

1
任务如何在挂起时“拒绝冻结”?
昨天,当关闭我的笔记本电脑时,它没有立即进入待机模式。根据日志,它正在尝试,但是一个任务拒绝冻结: Freezing of tasks failed after 20.005 seconds (1 tasks refusing to freeze, wq_busy=0): 持续进行了几个小时,直到系统真正挂起。在syslog满像的消息的这个问题,因为systemd一次又一次的尝试。 怎么会这样 调度程序为什么不能停止调度该应用程序?然后有效地冻结了?我读到有多个STOP命令,其中一个很好地询问,其中一个强制冻结。为什么systemd不使用它,或者为什么在这里不起作用?
17 debian  kill  suspend 

2
用Vim编辑文本文件不会更新tai​​l -f
我一直tail -f a.txt在观看名为的文件的更新a.txt。 如果我ls -a >> a.txt在第二个虚拟控制台中使用类似的方式更新文件,则更改将在第一个虚拟控制台中实时显示。 如果我在第二个虚拟控制台中使用Vim更新文件,则更改将不会显示在第一个虚拟控制台中。 我不一定希望它会触发该窗口中的更新-但是为什么这不更新运行tail -f命令的终端呢?
17 files  vim  tail 

1
“ <Cb> m”或右键单击tmux窗格有什么作用?
我是普通tmux用户,通常与set -g mouse on和结合使用vi。随着时间的流逝,我注意到一种行为,我无法轻松找到其文档。本质上,在tmux具有多个拆分窗格的会话中,右键单击窗格或单击&lt;C-b&gt;m似乎可以通过反转窗格分隔符上的bg / fg颜色来“选择”该窗格,从而使边框看起来更粗。 这里实际发生了什么,如何使用此功能?
17 tmux 

3
意外令牌`fi`附近的语法错误
我不一定想要答案,但是如果有人可以指出一些文献或例子。我想弄清楚。 当我运行脚本时,收到错误消息: 意外令牌附近的语法错误 fi 我if通过在if语句中添加注释并在echo "$NAME"中显示名称来推断出问题出在我的语句中/etc/。 进行更改时,#从if和删除fi并添加#到 wc -c "$NAME",我收到上面列出的语法错误。;在此之间我添加了]。我也then没有解决地移到了下一行。 #!/bin/bash for NAME in /etc/* do if [ -r "$NAME" -af "$NAME" ] then wc -c "$NAME" fi done
17 bash 

4
如果不是root用户,如何停止脚本运行(并回显“不是root用户运行!正在退出...”)
这是我的资料来源: #!/bin/bash echo "Running script to free general cached memory!" echo ""; echo "Script must be run as root!"; echo ""; echo "Clearing swap!"; swapoff -a &amp;&amp; swapon -a; echo ""; echo "Clear inodes and page file!"; echo 1 &gt; /proc/sys/vm/drop_caches; echo ""; 它清除缓存和内容,并回显它需要以root用户身份在终端中运行。我基本上只是希望脚本检测到没有以root身份执行时停止运行。 例: "Running script to free general …

5
像$ 0和$ 1这样的变量是否是shell /环境变量?
还有在shell变量一样$0,$1,$2,$?,等。 我尝试使用以下命令打印shell和环境变量: set 但是这些变量不在列表中。 因此,基本上,这些变量不被视为外壳/环境变量,对吗?(即使要输出它们,也必须$像在shell / environment变量中一样在它们前面加上)
17 shell 

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.