小编Ant*_*gan的帖子

使用“mail”命令删除一系列电子邮件

我的收件箱中有大约 1k+ 封邮件(旧的 cronjob 标准输出)。如何批量删除它们?

我在Solaris 8和我只有mail可用的,没有pinemutt或类似的“UI”为基础的客户端。

内联帮助和手册页仅d #用于删除特定邮件。例如,我尝试过,d 1 - 100但没有运气。我不想做d1000 次。

任何想法如何清理这个收件箱?我实际上想清除所有超过 x 天的邮件。

solaris email mail-command

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

无法在绑定挂载的文件系统中删除要回收的文件

我正在尝试为两个 Linux 安装设置共享主目录,因此我正在使用绑定安装。我的用户被命名dbz,他的主目录是/home/dbz. 我还有共享目录/home/shared,用于存储我的共享文件(该文件夹也归用户所有dbz)。

我使用绑定将此共享目录中的另一个目录挂载到我的主目录中:

mount -B /home/shared/work /home/dbz/work
Run Code Online (Sandbox Code Playgroud)

此解决方案解决了我的需求,我遇到但不知道如何解决的唯一问题是 - 当我尝试从挂载目录中删除文件或目录时,我无法将其删除到垃圾箱,只能永久删除。例如:

  • 删除文件/home/shared/work/test.txt:好的,因为从文件test.txt所在的目录中删除;
  • 删除文件/home/dbz/work/test.txt:不能,因为...顺便说一下,因为什么?绑定挂载对文件删除有一些限制吗?

最后一个问题提交到 bugzilla.kernel.org

mount trash bind-mount

10
推荐指数
2
解决办法
3455
查看次数

tmux 不尊重禁用的控制流

在我的 shell 中,我使用stty -ixon. 这在 shell 中完美运行,当我tmuxtmux.

但是,从命令行启动新会话并直接启动命令时,不遵守流量控制设置并 ctrl-s冻结终端。

这有效:

tmux new-session -s foo
vim
Run Code Online (Sandbox Code Playgroud)

这不尊重stty流量控制设置:

tmux new-session -s foo vim
Run Code Online (Sandbox Code Playgroud)

即使在后一种情况下,如何禁用流量控制?

terminal keyboard tmux

8
推荐指数
2
解决办法
1668
查看次数

与 yum 相比,rpm 报告的已安装软件包列表不同

我想让服务器 B 与服务器 A 具有完全相同的设置。服务器 A 和 B 具有相同的 Arch 和相同的硬件。

我的计划是在服务器 A 上列出所有已安装的内容,并使用服务器 B 上的列表进行安装,例如:

yum -y install $(cat installed.txt)
Run Code Online (Sandbox Code Playgroud)

在服务器 A 中,我应该使用:

rpm -qa > installed.txt
Run Code Online (Sandbox Code Playgroud)

或者:

yum list installed > installed.txt  
Run Code Online (Sandbox Code Playgroud)

列表似乎不同,我不知道为什么。

yum list installed有 930 行而rpm -qa有 895 行,可能有什么区别?

yum rpm centos

8
推荐指数
2
解决办法
9927
查看次数

编写 FTP 传输脚本

有没有办法shebang-ify ftp并编写小的FTP脚本?

例如:

#!/usr/bin/ftp
open 192.168.1.1
put *.gz
quit
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

shell ftp shell-script

7
推荐指数
1
解决办法
827
查看次数

Readline 的绑定命令的意外行为

我还没有研究我的 Ubuntu 16.04 系统上的 Bash/Readline 版本是否支持括号粘贴模式(它不是),出于好奇,我运行了这个Ask Ubuntu answer 中提供的以下命令。

bind 'set-enable-bracketed-paste off'
Run Code Online (Sandbox Code Playgroud)

如果set-enable-bracketed-paste设置不存在,我希望bind要么抱怨语法错误,要么什么都不做。相反,它取消了小写字母的绑定p,即,字符在键入时消失在黑洞中。

似乎该bind命令的这种用法解除了紧跟在第一个空格字符之前的最后一个连字符之后的字符(如果字符串中有任何空格)。例如,我运行了以下命令:

这会导致r角色未绑定:

bind '__-r anymorecharacters'
Run Code Online (Sandbox Code Playgroud)

这解除了字符的绑定2

bind 'xxxx-1-2xxx'
Run Code Online (Sandbox Code Playgroud)

仍然可以通过 在输入字符之前输入Ctrl- 来V输入字符,从而允许它们重新绑定:

bind 'r: self-insert'
bind '2: self-insert'
Run Code Online (Sandbox Code Playgroud)

对我来说,这是出乎意料和令人惊讶的行为,我认为这是一个错误。但是,我对 Readline 不是很熟悉,所以我想我会在这里询问是否对这种行为有合理的解释。

bash readline

7
推荐指数
1
解决办法
273
查看次数

如果其运行时间超过某个预定值,则自动终止进程

我想从一个 shell 脚本启动一个进程,允许它与用户交互(所以我不能只是后台它,获取 PID,启动,sleep然后是健全性检查和kill),但如果它在一段时间后仍在运行(比如说,两分钟),然后我才想杀死它。

目的是简单地为没有内置该功能的程序实现挂钟运行时超时。

有没有办法做到这一点,最好是从 bash shell 脚本?

bash timeout

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

如何使用 mv 命令删除文件?

我开始在我的大学学习 Solaris。老师告诉我用mv命令删除一个文件。
我试图将文件移动到 /dev/null。但这没有用。

如何使用mv命令删除文件?

solaris rm files mv

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

定位命令没有输出

我通常会找到所有已作为问答发布的 Unix 相关问题的答案。然而,这个特殊的问题在过去的一个小时里让我很难过,所以我想我会在这个网站上问我的第一个问题。

问题

我有一个运行 CentOS 5.11 的开发/登台服务器。locate以普通用户身份运行不会产生任何输出(甚至没有错误消息):

locate readdir
Run Code Online (Sandbox Code Playgroud)

但是,以超级用户身份运行命令会打印有效结果列表:

$ sudo locate readdir
/home/anthony/repos/php-src/TSRM/readdir.h
/home/anthony/repos/php-src/ext/standard/tests/dir/readdir_basic.phpt
... etc.
Run Code Online (Sandbox Code Playgroud)

strace通常可以帮助我调试任何此类问题并运行strace locate readdir显示:

stat64("/var/lib/mlocate/mlocate.db", 0xbff65398) = -1 EACCES (Permission denied)
access("/", R_OK|X_OK)                  = -1 EACCES (Permission denied)
exit_group(1)                           = ?
Run Code Online (Sandbox Code Playgroud)

检查权限

我检查了locate二进制文件及其默认数据库的所有权和权限。如所预期的命令是setgidslocate作为该组所有者而数据库具有适当的所有权和权限。

$ ls -l /usr/bin/locate
-rwx--s--x 1 root slocate 22280 Sep  3  2009 /usr/bin/locate

$ sudo ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 78395703 May  8 04:02 /var/lib/mlocate/mlocate.db

$ …
Run Code Online (Sandbox Code Playgroud)

setuid permissions locate

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

如何在 vi 模式下搜索 bash 的历史记录“foo.*bar”

我的 bash 环境处于 vi 模式 ( set -o vi)。所以我可以输入<ESC>/后跟一个词,然后回车,然后 bash 在历史记录中搜索这个词。由于/也是vi搜索正则表达式的方法,所以我在表达式下bash也会搜索正则表达式。

不幸的是,当我输入<ESC>/foo.*barbash 时,它在历史记录中找不到任何与正则表达式匹配的行foo.*bar

我是否忽略了某些东西,还是无法在历史记录中搜索正则表达式?

bash command-history regular-expression readline

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