小编ctr*_*lor的帖子

某些应用程序不接受来自 «Compose» 键的某些字符

问题是撰写键工作正常,但某些应用程序不接受其中的某些字符。例如,我可以?在 Emacs ( Compose+ 8+ 8) 中输入字符,但这在 FireFox、Konsole 和 Kate 中不起作用。但是许多其他字符,例如在€那里输入(在 FireFox、Konsole 和 Kate 中)使用Compose工作得很好。此外,我可以通过简单的复制粘贴(从两个剪贴板中的任何一个)插入问题符号。

那么,是什么原因造成的,如何解决呢?

抱歉,我不知道如何研究这个问题。我发现有些人的 Compose 键在某些应用程序中根本不起作用,但在我的情况下它是有效的,尽管部分原因。

设置:在/etc/default/keyboardKDE 和 KDE 键盘设置中,组合键都绑定到右侧的 Super 键。

kde character-encoding x11 compose-key

12
推荐指数
1
解决办法
1194
查看次数

Linux 中的“泄漏”管道

假设您有一个如下所示的管道:

$ a | b

如果b停止处理标准输入,一段时间后管道填满,并从a标准输出写入,将阻塞(直到b再次开始处理或死亡)。

如果我想避免这种情况,我可能会尝试使用更大的管道(或更简单地说,buffer(1)),如下所示:

$ a | buffer | b

这只会为我争取更多时间,但最终a会停止。

我想要的(对于我正在解决的一个非常具体的场景)是有一个“泄漏”的管道,当它满了时,会从缓冲区中删除一些数据(理想情况下,逐行)让我们a继续处理(正如您可能想象的那样,在管道中流动的数据是可消耗的,即处理数据b不如a能够无阻塞地运行重要)。

总而言之,我希望有一个像有界的、泄漏的缓冲区之类的东西:

$ a | leakybuffer | b

我可能可以用任何语言很容易地实现它,我只是想知道是否有我遗漏的“准备使用”(或类似 bash one-liner 之类的东西)。

注意:在示例中我使用的是常规管道,但该问题同样适用于命名管道


虽然我给出了下面的答案,但我也决定实施leakybuffer 命令,因为下面的简单解决方案有一些限制:https : //github.com/CAFxX/leakybuffer

linux pipe buffer fifo

12
推荐指数
1
解决办法
1217
查看次数

条件表达式中“set -e”下“eval”的行为

考虑命令

eval false || echo ok
echo also ok
Run Code Online (Sandbox Code Playgroud)

通常,我们希望它执行false实用程序,并且由于退出状态非零,然后执行echo ok和echo also ok。

在我使用的所有类似 POSIX 的 shell(ksh93、zsh、bash、dash、 OpenBSDksh和yash)中,都会发生这种情况,但是如果我们启用set -e.

如果set -e有效,OpenBSDsh和kshshell(均源自pdksh)将在执行eval. 没有其他外壳能做到这一点。

POSIX 表示特殊内置实用程序(例如eval)中的错误应导致非交互式 shell 终止。我不完全确定执行是否false构成“错误”(如果是,则与set -e活动无关)。

解决此问题的方法似乎是将其放入eval子外壳中,

( eval false ) || echo ok
echo also ok
Run Code Online (Sandbox Code Playgroud)

问题是我是否需要在 POSIX-ly 正确的 …

openbsd posix eval

12
推荐指数
1
解决办法
533
查看次数

超级用户进程是否可以更改进程的真实用户 ID 和组 ID,而不是密码文件中的那些?

来自 APUE

进程的真实用户 ID 和真实组 ID 标识了我们的真实身份。这两个字段取自我们登录时密码文件中的条目。通常,这些值在登录会话期间不会更改,尽管超级用户进程可以通过多种方式 更改它们

超级用户进程是否可以更改进程的真实用户ID和真实组ID,从而使真实用户ID和真实组ID之间的关系与密码文件中的关系不匹配?例如,如果用户Tim不是ocean每个密码文件的组成员,超级用户进程是否可以将进程的真实用户 ID 和真实组 ID分别更改为Tim和ocean?

linux users group

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

为什么 sudoedit 写入临时目录?

我曾经sudoedit创建一个文件:

 $ sudoedit /etc/systemd/system/apache2.service
Run Code Online (Sandbox Code Playgroud)

但是当我去保存文件时,它把它写在一个临时目录(/var/temp/blahblah)中。到底是怎么回事?为什么不把它保存到系统目录?

sudoedit

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

如何让 Gnu/Linux 信任 Windows 开箱即用的证书?

正如此 SSL 检查报告的那样,存在一个 SSL 链损坏的服务器:

SSL检查报告

我知道这是一个应该在服务器本身上解决的问题,但有时这很难解决(我不是服务器的管理员)。

问题是,Windows 上的 Chrome/Mozilla/Edge无论如何都信任站点证书:

在此处输入图片说明

但是,在 Gnu/Linux 部署(Docker 中的 Ubuntu 18.04)中,证书不受信任:

curl: (60) SSL certificate problem: unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)

我尝试update-ca-certificates甚至导入了 Globalsign 根证书。update-ca-certificates在这种情况下报告了重复的证书。无论如何,没有任何作用。

如何繁殖

使用 Docker:

docker run -it ubuntu:18.04

# within container:
apt-get update
apt-get -y install curl
curl https://betriebsheft.vog.it  # <---- "unable to get local issuer certificate"
Run Code Online (Sandbox Code Playgroud)

我怎样才能让 Gnu/Linux 信任这个证书?

PS:在另一台服务器上正确部署了相同的证书。

ssl openssl curl certificates

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

防止 /tmp 中的目录被删除

我经常使用/tmpLinux 机器上的目录来存储临时文件(例如,来自希望我先下载它的站点的 PDF 等),并且我经常使用我的用户名创建一个目录。但是在每次启动时它(包括所有文件)都会被删除。现在我知道我可以把它放进去/var/tmp,但我想删除它的所有内容,但要保留目录本身。所以:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?也许有权限或有特殊配置?

tmp

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

如何处理主机名中的下划线?

我在我公司的服务器上设置了 DNS,它工作得很好,除了我的一些电话有问题。例如其中一部手机是“Huawei P9 lite”,它的主机名(在手机上设置,没有root就没有机会更改)是“HUAWEI_P9_lite”,这导致我的日志充斥着错误。

有没有办法处理主机名中的下划线?我知道我可以设置一个选项来忽略check-names,但我宁愿不这样做。也许我可以以某种方式为某些设备(基于 MAC 地址)强制使用主机名?

在同一台服务器上还有一个 DHCP 服务器。

dns hostname bind

10
推荐指数
1
解决办法
2017
查看次数

bash: echo: 写错误: 系统调用中断

我想生成一个包含所有 8 位数字的排序列表——从 00000000 到 99999999。我在 shell 中输入:

f() {
 while IFS="" read -r line; do
   for i in {0..9}; do 
       echo "$line$i";
   done;
 done
}

echo | f | f | f | f | f | f | f | f | tee result.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

回应是

bash: echo: write error: Interrupted system call
bash: echo: write error: Interrupted system call
bash: echo: write error: Interrupted system call
99998890
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这三个错误和格式错误的 result.txt ?

我用

GNU bash,版本 4.4.12(1)-release (x86_64-pc-linux-gnu) …

bash

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

如何替换文件扩展名

我们要替换脚本文件扩展名

所以我们做了以下事情:

 new_name=` echo run_fix.bash  |  sed 's/[.].*$//' `
 new_file_extension=".in_hold.txt"
 new_name=$new_name$new_file_extension

 echo $new_name
 run_fix.in_hold.txt
Run Code Online (Sandbox Code Playgroud)

但我觉得我的方法不是那么优雅

注意 - 因为脚本扩展名可以是 bash、perl 或 python,而且目标扩展名可以是“.”之后的任何内容。我们想要全球更换


我使用的是红帽 7.2

bash shell-script

10
推荐指数
1
解决办法
9018
查看次数