小编0xC*_*22L的帖子

有没有透明结合zcat和cat的工具?

在处理日志文件时,由于某些原因,有些最终会成为 gzipped 文件,logrotate而有些则不会。所以当你尝试这样的事情时:

$ zcat *
Run Code Online (Sandbox Code Playgroud)

你最终得到一个命令行zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gz,然后是:

gzip: xyz.log: not in gzip format
Run Code Online (Sandbox Code Playgroud)

是否有一种工具可以使用魔术字节,类似于file工作原理,并使用zcatcat取决于结果,以便我可以将输出传输到grep例如?

注意:我知道我可以编写脚本,但我想知道是否已经有工具了。

gzip text-processing cat

85
推荐指数
4
解决办法
2万
查看次数

有没有一种简单的方法可以“重新启动” tmux 窗格?

假设我有一个tmux(1.7) 窗口拆分如下:

 ________________________
|           1            |
|                        |
|-----------+------------|
|     2     |      3     |
|___________|____________|
Run Code Online (Sandbox Code Playgroud)

现在,垂直尺寸已被自定义,因此它绝不是默认布局之一。

有时,当程序卡住或重新启动通过 连接的机器时ssh,窗格会“挂起”。即除了kill-pane似乎工作之外别无他物。

但是,因为一旦窗格 #1 被kill-pane删除,就没有简单的方法来重建上面的拆分配置,所以我想“重新启动”它。

tmux

76
推荐指数
1
解决办法
5万
查看次数

如何测量程序执行时间并将其存储在变量中

为了找出 Bash (v4+) 脚本中的某些操作需要多长时间,我想time“单独”解析命令的输出,并(最终)在 Bash 变量 ( let VARNAME=...) 中捕获它。

现在,我正在使用time -f '%e' ...(或者更确切地说command time -f '%e' ...是因为内置了 Bash),但是由于我已经重定向了执行命令的输出,我真的不知道我将如何捕获time命令的输出。基本上这里的问题是到输出分离time从被执行的命令(或多个)的输出。

我想要的是计算启动命令和完成命令之间的时间(以秒为单位)的功能。它不必是time命令或相应的内置命令。


编辑:鉴于以下两个有用的答案,我想添加两个说明。

  1. 我不想丢弃已执行命令的输出,但它最终是在 stdout 还是 stderr 上并不重要。
  2. 我更喜欢直接方法而不是间接方法(即直接捕获输出而不是将其存储在中间文件中)。

date到目前为止使用的解决方案接近我想要的。

bash shell-script time

75
推荐指数
5
解决办法
17万
查看次数

仅对单个存储库绕过 GPG 签名检查

我已阅读以下文章:如何绕过/忽略 apt 的 gpg 签名检查?

它概述了如何配置apt不检查包的签名在所有

但是,我想将此设置的影响限制为单个(在本例中为本地托管)存储库。

也就是说:除了本地 repo之外所有官方存储库都应该像往常一样使用 GPG 签名检查。

我该怎么做?

如果做不到这一点,在自动构建(一些元包和一些程序)期间签署包然后执行所有安全apt规定的优势(安全方面)是什么?毕竟,拥有 repo 的主机也将是秘密 GPG 密钥所在的主机。

apt repository

45
推荐指数
2
解决办法
7万
查看次数

使用 virt-manager 在 Linux 主机和 Windows 来宾之间共享文件?

是否可以使用 virt-manager 中的“Filesystem Passthrough”虚拟硬件选项与我的 Windows 来宾共享 Linux 主机上的文件夹?我找到了一些关于如何使用 Linux 客户机执行此操作的教程,但是当我使用 Windows 客户机尝试此操作时,我在尝试启动 VM 时收到以下错误消息:

Error starting domain: Unable to read from monitor: Connection reset by peer

Traceback (most recent call last):   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 100, in cb_wrapper
    callback(asyncjob, *args, **kwargs)   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 122, in tmpcb
    callback(*args, **kwargs)   File "/usr/share/virt-manager/virtManager/domain.py", line 1210, in startup
    self._backend.create()   File "/usr/lib64/python2.7/site-packages/libvirt.py", line 698, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: Unable to read from monitor: Connection reset by peer …
Run Code Online (Sandbox Code Playgroud)

kvm file-sharing virt-manager

44
推荐指数
5
解决办法
19万
查看次数

使用临时命令列出主机或组的所有 Ansible 变量?

Ansible 变量来自各种来源。例如,可以通过在包含清单文件的文件夹中分别命名为host_vars和的子文件夹中创建 YAML 文件来提供 host_vars 和 group_vars group_vars

如何列出所有的变量Ansible知道一个剧本内的组或主机?注意:我尝试过ansible -m debug -e 'var=hostvars' hostansible -m debug -e '- debug: var=hostvars'但无济于事。

提示:ansible <group|host> -m setup不是正确的答案,因为它并没有包括所有来自其他来源的变量(只包含{ "ansible_facts" : { ... } }在事实上,它甚至不包括通过由动态库存脚本(提供变量。_meta等)。

Ansible 版本:1.9.1。

ansible

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

bash: /dev/stderr: 权限被拒绝

升级到新发布版本后,我的bash脚本开始出现错误:

bash: /dev/stderr: Permission denied
Run Code Online (Sandbox Code Playgroud)

在以前的版本中的Bash将在内部承认这些文件的名称(这就是为什么这个问题不是重复这一个),并做正确的事(TM) ,但是,这现在已经不再工作。我该怎么做才能再次成功运行我的脚本?

我曾尝试将运行脚本的用户添加到组中tty,但这没有区别(即使在注销并重新登录后)。

我可以在命令行上毫无问题地重现这个:

$ echo test > /dev/stdout
bash: /dev/stdout: Permission denied
$ echo test > /dev/stderr
bash: /dev/stderr: Permission denied
$ ls -l /dev/stdout /dev/stderr
lrwxrwxrwx 1 root root 15 May 13 02:04 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 May 13 02:04 /dev/stdout -> /proc/self/fd/1
$ ls -lL /dev/stdout /dev/stderr
crw--w---- 1 username tty 136, 1 May 13 05:01 /dev/stderr
crw--w---- 1 …
Run Code Online (Sandbox Code Playgroud)

bash permissions stdout

25
推荐指数
1
解决办法
3万
查看次数

ls 忽略符号链接的目录内容

我有一个目录,我想在其中列出所有内容(文件和子目录)而不显示符号链接。我在 Linux 上使用 GNU 实用程序。该ls版本是8.13。

例子:

完整目录列表:

~/test$ ls -Gg
total 12
drwxrwxr-x 2 4096 Jul  9 10:29 dir1
drwxrwxr-x 2 4096 Jul  9 10:29 dir2
drwxrwxr-x 2 4096 Jul  9 10:29 dir3
-rw-rw-r-- 1    0 Jul  9 10:29 file1
-rw-rw-r-- 1    0 Jul  9 10:29 file2
lrwxrwxrwx 1    5 Jul  9 10:29 link1 -> link1
lrwxrwxrwx 1    5 Jul  9 10:30 link2 -> link2
Run Code Online (Sandbox Code Playgroud)

我想得到什么

~/test$ ls -somthing (or bash hack)
total 12
dir1 dir2 dir3 file1 …
Run Code Online (Sandbox Code Playgroud)

ls symlink recursive

23
推荐指数
4
解决办法
4万
查看次数

在系统范围内自定义日期/时间格式的最佳实践?

TL; 博士

自定义日期和时间格式设置的最佳实践是什么,同时坚持 DRY 原则,即没有不必要的重复内容?


我想为我的系统专门定制日期和时间格式,同时坚持其余的语言环境。我知道环境变量LC_TIME将使仅通过指向备用语言环境来自定义该方面成为可能。由于我使用的是 Linux(确切地说是 Ubuntu 14.04),我想使用 理解的格式localedef作为输入。

我已经阅读了以下三篇文档:

最后一个特别有帮助。

现在,我只是想自定义的部分LC_TIME,并想继承verything人。

所以我复制en_US到一个名为isodatein的文件/usr/share/i18n/locales并调整了我关心的值。在筛选文档后,我还决定用copy-keyword替换所有其他部分内容。

问题:我不清楚哪种方法应该是最佳实践。有谁知道(或者甚至是我给出的其他替代方案)?

例如,由于我只关心几个值(d_t_fmt, d_fmt, t_fmt, t_fmt_ampm, am_pm, date_fmt),所以继承所有en_USforLC_TIME然后仅用我的类似 ISO 的格式(ISO 8601)覆盖这些值会很好。但是,有关copy状态的文档(重点是我的):

复制

指定将用作此类别定义的现有语言环境的名称。如果指定了该关键字,则不得指定其他关键字。

这意味着我不能简单地输入 acopy然后添加更多关键字。

另外,仅定义该LC_TIME部分是否合法,还是会localedef完全拒绝编译该部分?


到目前为止我想出了什么:

escape_char /
comment_char % …
Run Code Online (Sandbox Code Playgroud)

linux date locale

23
推荐指数
1
解决办法
2517
查看次数

什么是非特权 LXC 容器?

如果 Linux 容器(LXC 容器)被称为“非特权”是什么意思?

lxc userns

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