标签: bash

如何从具有特定文件名长度的目录中删除所有文件?

我有一个 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)

linux bash rm

6
推荐指数
1
解决办法
1200
查看次数

将 rsync(或 bash 脚本)限制到一个目录

由于错误的目标参数导致 rsync 删除错误文件的严重事故后,我想限制 rsync(或运行它的 bash 脚本)只能删除/修改某个目录下的文件。我想到了:

  1. 在仅具有该目录权限的用户下创建并运行 rsync/script。这里的问题是:如何动态使用/创建这样的用户?(这是构建脚本的一部分,应该为其他用户“运行”)。

  2. 验证提供给 rsync 的目标路径是否在某个目录下。方向好像是在使用test命令,但是我想不通怎么正确使用,也不是那么安全,因为path参数的测试还是会与实际运行的path参数不同步,所以我认为(1)更健壮。

bash shell rsync permissions macos

6
推荐指数
2
解决办法
2065
查看次数

如何让我的脚本要求输入密码,比如 sudo?

我正在编写一个脚本,如果以错误的方式运行,它可能会很危险。作为一项安全功能,我希望脚本要求用户首先重新输入他们的密码,就像这样sudo做一样。

那么我该怎么做呢?换句话说,我如何

a) 输入密码而不回显,

b) 验证密码,以及

c)(为了奖励积分)这样做时不会将明文密码留在内存中,以便一些聪明的人从 /proc 或类似的东西中刮出来?

这是在,bash但如果这更容易的话,任何其他标准的 Linux shell 变体都可以。

linux unix bash passwords password-protection

6
推荐指数
1
解决办法
2333
查看次数

使用 systemd 在 multi-user.target 之后但在登录屏幕之前执行交互式(whiptail)脚本

我正在尝试从 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 变量。但我希望脚本能在第一个虚拟终端上运行。

任何建议或见解将不胜感激。

linux bash systemd

6
推荐指数
1
解决办法
4515
查看次数

¬ 键是什么?

与英国键盘斗争,最近搬到这里!很抱歉这个奇怪的问题,但事实证明这个话题很难用谷歌搜索。

在 key number 的左边1,我曾经有反引号`和波浪号~,而是有这个符号 ¬ 我以前从未需要过。它在 bash 中做任何有用的事情吗?它叫什么?为什么在英国键盘映射上出现足够重要?有什么理由不重新映射我的旧 homedir 曲线 ~ 回到那个位置?

keyboard bash

6
推荐指数
1
解决办法
2万
查看次数

Bash 脚本在 if elif 语句上给出“找不到命令”错误

现在,在您将其标记为重复之前,请理解我确实搜索了这个问题,并且我已经尝试了所有解决方案都没有效果。

我的脚本:

#!/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)

linux bash shell-script

6
推荐指数
1
解决办法
2万
查看次数

在 Linux 中真的没有办法为 cifs/smb 共享上的文件获取创建时间吗?

我在 bash 备份脚本中非常尴尬,并且错过了一些重要的事情。我知道 ext3 文件系统不跟踪创建日期,但是在 ext3 中复制文件会更新通过 stat 看到的更改时间(这会起作用)。但是,当文件从一台 Windows 服务器复制到另一台(我通过 smb/cifs 安装的)时,根据我的测试,更改的时间不会更新。我正在使用 find 对 cifs 共享进行搜索。真的没有办法检测何时使用“查找”从 Linux 通过 cifs 共享创建新文件?

此外,我对 rsync 非常熟悉,在这种情况下,rsync 的限制将其排除在外。我想我可以使用 rsync 进行搜索并尝试将结果通过管道传递给操作 (gzip),但我认为子外壳会很荒谬。当然可能是错的。任何建议将不胜感激。可以提供更多细节,但从我的研究来看,我认为这是不可能的。

linux samba mount bash rsync

6
推荐指数
1
解决办法
7723
查看次数

SSH 为“密码”提示设置超时?

是否有一个 SSH 选项(类似于-o ConnectTimeout=$seconds)来限制它在password:提示时等待的时间?

请注意,我确实将密钥对用于无密码 ssh,但我仍然password:每周看到几次提示,因为我在后台窗口中运行了 bash 函数,每当它们断开时就会重新连接我的 SSH 隧道(当我在 WiFi 网络之间徘徊并关闭MacBook 盖子随机)。因此,有时 SSH 协商会进入“密码:”状态,然后它会一直停留在那里,直到我手动干预^Ckillall 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)

ssh bash

6
推荐指数
2
解决办法
8733
查看次数

如何通过 scrot 在很棒的 wm 中截取屏幕截图(使用选择)

尝试:

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 -sscrot,则所有命令都有效,除了选择区域。

linux bash awesome-wm lua

6
推荐指数
1
解决办法
8038
查看次数

按行前缀拆分文件

我的数据如下所示:

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分组方式?我知道如果每个部分之间都有标记,那么有一种方法可以将文件剪切掉,例如 --- …

linux bash grep command-line

6
推荐指数
1
解决办法
1412
查看次数