我想看看一些 ASCII 艺术在终端中的样子:
$ cat <<EOF
> # ____ _
> # _ _ / __/ ___ _ | |_
> # | | | |/ / / _` || __|
> # | |_| |\ \__ (_| || |_
> # | _,_| \___\ \___,_| \__|
> # |_/
> #
> EOF
bash: bad substitution: no closing "`" in ` || __|
# | |_| |\ \__ (_| || |_
# | _,_| \___\ \___,_| \__|
# |_/ …Run Code Online (Sandbox Code Playgroud) 我正在使用运行 El Capitan v 10.11.6 的 Macbook Pro。我正在学习符号链接,在man ln页面中,我发现了以下内容:
符号链接上的 stat(2) 将返回链接到的文件;必须执行 lstat(2) 以获取有关链接的信息。
作为测试,我创建了一个文件的符号链接(在另一个文件系统中,如果重要的话),如下所示:
ln -s /Volumes/foobardir/foobarfile foobarlink
然后我跑去lstat foobarlink获取符号链接文件本身的信息,但我得到了以下输出:
-bash: lstat: command not found
该命令不which lstat返回任何内容,这确认在我的文件路径中没有具有此名称的可执行文件。
我能够执行stat foobarlink,但我不确定返回的统计数据是针对链接文件还是符号链接本身。我确实在该命令的输出中以时间戳形式看到今天的日期,而运行stat foobarfile显示的是几个月前的日期。所以我猜这是我正在寻找的输出,但我想要第二种意见。
顺便说一句,运行which stat返回/usr/bin/stat。一个grep在/usr/bin与所有的可执行文件的目录stat以他们的名义返回以下内容:
如上所述,我的猜测是stat返回我期望返回的输出lstat。我的问题是:
lstat当man lstat识别lstat为有效命令时,为什么显然没有安装在我的系统中?ESC发送\x1b. 那是1 个字节:实际的转义字符。
Page Up发送\x1b[H. 那是3 个字节。
F2发送\x1b[OQ. 那是4 个字节。
F5发送\x1b[15~. 那是5 个字节。
其中之一的最大长度是多少?这是在某处记录的吗?
~是$HOME。对我来说,cd ~是/home/cat。到目前为止很简单,是吗?
在 Bash 中,会发生以下情况:
cat @ mint-kitty : ~/Downloads $ cd ~ # from /home/cat/Downloads to /home/cat/, as an example, but behaviour happens with any directory
cat @ mint-kitty : ~ $ cd ~<TAB>proxy/ # oh? what's this?
cat @ mint-kitty : /bin $ cd ~<TAB><TAB>
~ais ~clamav/ ~debian-tor/ ~gitlog ~list ~mixmaster/ ~ntp ~redis/ ~stunnel4 ~systemd-resolve ~uuidd/
~avahi/ ~cl-builder/ ~dirmngr/ ~gnats ~lp ~monkeysphere/ ~oident/ ~roard/ ~sync/ ~systemd-timesync/ ~vde2-net
~avahi-autoipd/ ~clickpkg ~dnsmasq/ ~irc …Run Code Online (Sandbox Code Playgroud) 我正在ssh使用我使用的某个计算系统。我试图按照一些涉及到的 Linux 说明进行操作sudo,并尝试了几次输入密码失败,然后才意识到我输入错误,因为我是在 ssh 终端中输入的。
然后,我收到了一封指责性很强的电子邮件,内容涉及我的尝试如何sudo对系统构成威胁。即使在我解释这是一次意外之后,语气仍然保持不变。
我的具体问题是:未经许可多次尝试 sudo 被视为严重违反系统安全的威胁模型是什么?
注意:我原则上理解规则存在的原因。我的猜测是您不希望人们编写自动化脚本来尝试破解密码 - 或者我想尝试输入通过社会工程获得的密码。但是对一些愚蠢的命令进行了一些不成功的猜测……威胁模型是什么?
X在 Unix 上安全、原子地写入文件的正常方法是:
Y。rename(2) Y 到 X在两个步骤中,我们似乎除了X“就地”更改之外什么也没做。
它可以防止竞争条件和意外数据丢失(X被破坏但Y不完整或被破坏)。
这样做的缺点(在这种情况下)是它不会写入X就地引用的 inode ;rename(2)makeX引用一个新的 inode 编号。
当X链接计数> 1(显式硬链接)的文件时,现在它不像以前一样引用相同的inode,硬链接已损坏。
消除缺点的明显方法是就地写入文件,但这不是原子的,可能会失败,可能导致数据丢失等。
有没有办法像原子一样做到rename(2)但保留硬链接?
也许将Y(临时文件)的 inode 编号更改为与 相同X,并为其X命名?一个 inode 级别的“重命名”。
这将有效地写入XwithY的新内容引用的 inode ,但不会破坏其硬链接属性,并且会保留旧名称。
如果假设的 inode“重命名”是原子的,那么我认为这将是原子的并且可以防止数据丢失/竞争。
如果我有一个 Bash 脚本,例如:
function repeat {
while :; do
echo repeating; sleep 1
done
}
repeat &
echo running once
Run Code Online (Sandbox Code Playgroud)
running once只打印一次,但repeatfork 永远存在,无休止地打印。
我应该如何防止repeat在创建它的脚本退出后继续运行?
我认为可能明确实例化一个新的bash -c解释器会迫使它在其父级消失时退出,但我猜孤立进程被initPID 1 采用。
使用另一个文件对此进行测试:
# repeat.bash
while :; do echo repeating; sleep 1; done
# fork.bash
bash -c "./repeat.bash & echo an exiting command"
Run Code Online (Sandbox Code Playgroud)
运行./fork.bash仍然会导致repeat.bash永远在后台继续运行。
简单而懒惰的解决方案是将行添加到fork.bash:
pkill repeat.bash
Run Code Online (Sandbox Code Playgroud)
但是你最好不要有另一个重要的过程以这个名字命名,否则它也会被抹杀。
我想知道,是否有更好或可接受的方法来处理在创建它们的脚本(或进程)退出时应该退出的分叉 shell 中的后台作业?
如果没有比盲目地pkilling使用相同名称的所有进程更好的方法,那么应该如何处理与网络服务器之类的东西一起运行的重复作业以退出?我想避免cron工作,因为脚本位于git存储库中,并且代码应该是自包含的,而无需更改 …
如果你在 AskUbuntu 上有 10k 代表,你可以看到这个答案,我删除了,因为我显然错了。
基本上,用户的问题是关于如何更改主题文件的权限,/usr/share/themes以便可以打开它们进行写入。
我回答说,sudo chmod a+rw /usr/share/themes会做的伎俩,并承认gksudo whateveryouwannado可能是更好的选择,但我大概走了不少的风险与我的系统是别人没有与他们(和在由穆鲁得到大喊了它)。
撇开细节不谈,仅仅因为themesin的存在/usr/share/,我确信/usr/share是所有用户都可以写的东西,比如主题,我对此表示纠正。
那么,包/我应该把所有用户都可以写和可读的东西放在哪里?(假装安全不是问题,这对我来说不是问题。)
bash ×3
autocomplete ×1
cat ×1
command-line ×1
concurrency ×1
darwin ×1
debian ×1
fork ×1
hard-link ×1
inode ×1
jobs ×1
osx ×1
permissions ×1
rename ×1
security ×1
stat ×1
sudo ×1
system-calls ×1
write ×1