我有一个 tmp 目录,里面装满了程序创建但没有正确清理的各种文件。这些文件中的每一个都有一个简单的 6 个随机字符的文件名。除此之外,目录中还有几十个合法文件我不想删除。我可以将它们移出然后 rm -rf 整个目录,但我认为会有一种更简单的方法,因为方便的是,没有一个合法文件的文件名长度为 6。
例子:
-rw------- 1 root root 0 Sep 8 08:59 BxP6dX
-rw------- 1 root root 0 Sep 7 03:29 c93Rb2
-rw------- 1 root root 0 Sep 8 12:29 Cq8S3f
-rw------- 1 root root 0 Sep 8 03:59 CV_6kc
-rw------- 1 root root 0 Sep 7 15:29 d5cBqw
drwxr-xr-x 2 root root 40 Sep 6 16:03 legitimateFile
-rw------- 1 root root 0 Sep 7 21:29 qC5XQD
-rw------- 1 root root 0 Sep 9 …Run Code Online (Sandbox Code Playgroud) 由于错误的目标参数导致 rsync 删除错误文件的严重事故后,我想限制 rsync(或运行它的 bash 脚本)只能删除/修改某个目录下的文件。我想到了:
在仅具有该目录权限的用户下创建并运行 rsync/script。这里的问题是:如何动态使用/创建这样的用户?(这是构建脚本的一部分,应该为其他用户“运行”)。
验证提供给 rsync 的目标路径是否在某个目录下。方向好像是在使用test命令,但是我想不通怎么正确使用,也不是那么安全,因为path参数的测试还是会与实际运行的path参数不同步,所以我认为(1)更健壮。
我正在编写一个脚本,如果以错误的方式运行,它可能会很危险。作为一项安全功能,我希望脚本要求用户首先重新输入他们的密码,就像这样sudo做一样。
那么我该怎么做呢?换句话说,我如何
a) 输入密码而不回显,
b) 验证密码,以及
c)(为了奖励积分)这样做时不会将明文密码留在内存中,以便一些聪明的人从 /proc 或类似的东西中刮出来?
这是在,bash但如果这更容易的话,任何其他标准的 Linux shell 变体都可以。
我正在尝试从 Fedora 19 上的 systemd 运行一个小的交互式配置脚本。它必须以 root 身份运行,并在用户登录之前运行。我创建了一个看起来像这样的服务:
[Unit]
Description=blah
Before=graphical.target
[Service]
Type=oneshot
ExecStart=/path/to/script.sh
[Install]
RequiredBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
为简单起见,脚本如下所示:
#!/bin/sh
whiptail --msgbox "test" 0 78
Run Code Online (Sandbox Code Playgroud)
但是,当我加载此服务并重新启动时,不会显示脚本输出,并且在 /var/log/messages 中它建议应该设置 TERM 变量。但我希望脚本能在第一个虚拟终端上运行。
任何建议或见解将不胜感激。
与英国键盘斗争,最近搬到这里!很抱歉这个奇怪的问题,但事实证明这个话题很难用谷歌搜索。
在 key number 的左边1,我曾经有反引号`和波浪号~,而是有这个符号 ¬ 我以前从未需要过。它在 bash 中做任何有用的事情吗?它叫什么?为什么在英国键盘映射上出现足够重要?有什么理由不重新映射我的旧 homedir 曲线 ~ 回到那个位置?
现在,在您将其标记为重复之前,请理解我确实搜索了这个问题,并且我已经尝试了所有解决方案都没有效果。
我的脚本:
#!/bin/bash
echo "Enter the number 3"
read t1
if [$t1 -eq 3]; then
echo "it is 3"
elif [$t1 > 3]; then
echo "it is greater than 3"
fi
exit 0
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
./g.sh: line 5: [3: command not found
./g.sh: line 7: [3: command not found
Run Code Online (Sandbox Code Playgroud) 我在 bash 备份脚本中非常尴尬,并且错过了一些重要的事情。我知道 ext3 文件系统不跟踪创建日期,但是在 ext3 中复制文件会更新通过 stat 看到的更改时间(这会起作用)。但是,当文件从一台 Windows 服务器复制到另一台(我通过 smb/cifs 安装的)时,根据我的测试,更改的时间不会更新。我正在使用 find 对 cifs 共享进行搜索。真的没有办法检测何时使用“查找”从 Linux 通过 cifs 共享创建新文件?
此外,我对 rsync 非常熟悉,在这种情况下,rsync 的限制将其排除在外。我想我可以使用 rsync 进行搜索并尝试将结果通过管道传递给操作 (gzip),但我认为子外壳会很荒谬。当然可能是错的。任何建议将不胜感激。可以提供更多细节,但从我的研究来看,我认为这是不可能的。
是否有一个 SSH 选项(类似于-o ConnectTimeout=$seconds)来限制它在password:提示时等待的时间?
请注意,我确实将密钥对用于无密码 ssh,但我仍然password:每周看到几次提示,因为我在后台窗口中运行了 bash 函数,每当它们断开时就会重新连接我的 SSH 隧道(当我在 WiFi 网络之间徘徊并关闭MacBook 盖子随机)。因此,有时 SSH 协商会进入“密码:”状态,然后它会一直停留在那里,直到我手动干预^C或killall ssh...
dtunnel-home () {
while true ; do
title "XXX-TTT-..."
wait-for-host.sh "$g" ## sleep until ping-able.
time (
set -x
ssh -o ConnectTimeout=10 \
-Y -L 5920:$t:5900 -L ... \
$g_user@$g
) ; date "+%Y-%m-%d_%H-%M-%S"
done
}
Run Code Online (Sandbox Code Playgroud) 尝试:
awful.util.spawn("scrot -s")
awful.util.spawn("urxvt -e \"scrot -s\"")
os.execute("scrot -s")
Run Code Online (Sandbox Code Playgroud)
以及所有可能的组合,甚至与sleep.
也试过守护进程。
没有任何作用 =( PS 所有命令都在键绑定中,如果我替换scrot -s为scrot,则所有命令都有效,除了选择区域。
我的数据如下所示:
60 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
61 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
62 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
63 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
64 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
我想通过行前缀将其拆分为单独的文件..像这样:
file 60 contains all lines prefixed with "60"
file 61 contains all lines prefixed with "61"
...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我想出的最好的想法是对所有行前缀进行 grep,然后循环遍历并将它们中的每一个 grep 放到一个单独的文件中,但它是一个相当大的文件,因此可能需要很长时间。也许有比循环和 grepping 更好的方法?某种grep分组方式?我知道如果每个部分之间都有标记,那么有一种方法可以将文件剪切掉,例如 --- …
bash ×10
linux ×7
rsync ×2
awesome-wm ×1
command-line ×1
grep ×1
keyboard ×1
lua ×1
macos ×1
mount ×1
passwords ×1
permissions ×1
rm ×1
samba ×1
shell ×1
shell-script ×1
ssh ×1
systemd ×1
unix ×1