小编mas*_*mas的帖子

管道如何限制内存使用?

Brian Kernighan 在此视频中解释了早期贝尔实验室对基于内存限制的小型语言/程序的吸引力

一台大机器将是 64 k 字节——K,而不是 M 或 G——这意味着任何单独的程序都不会很大,所以有一种自然的趋势,即编写小程序,然后是管道机制,基本上是输入输出重定向,可以将一个程序链接到另一个程序。

但考虑到数据必须存储在 RAM 中才能在程序之间传输,我不明白这如何限制内存使用。

来自维基百科

在大多数类 Unix 系统中,一个管道的所有进程同时启动[强调我的],它们的流适当连接,并由调度程序与机器上运行的所有其他进程一起管理。将 Unix 管道与其他管道实现区分开来的一个重要方面是缓冲的概念:例如,发送程序每秒可能产生 5000 个字节,而接收程序每秒只能接受 100 个字节,但不能数据丢失。相反,发送程序的输出保存在缓冲区中。当接收程序准备好读取数据时,管道中的下一个程序从缓冲区读取。在 Linux 中,缓冲区的大小为 65536 字节 (64KB)。如果需要,可以使用名为 bfr 的开源第三方过滤器来提供更大的缓冲区。

这让我更加困惑,因为这完全违背了小程序的目的(尽管它们在一定程度上是模块化的)。

我唯一能想到的解决我的第一个问题(内存限制有问题取决于大小数据)的唯一方法是,当时根本没有计算大型数据集,而真正的问题管道是要解决的程序本身所需的内存量。但是鉴于维基百科引用中的粗体文本,即使这让我感到困惑:因为一次没有实施一个程序。

如果使用临时文件,所有这些都会很有意义,但我的理解是管道不会写入磁盘(除非使用交换)。

例子:

sed 'simplesubstitution' file | sort | uniq > file2
Run Code Online (Sandbox Code Playgroud)

我很清楚这sed是读取文件并逐行吐出。但是sort,正如 BK 在链接的视频中所说的那样,是一个句号,所以所有的数据都必须被读入内存(或者是吗?),然后它被传递给uniq,这(在我看来)将是一个-一行一次的程序。但是在第一个和第二个管道之间,所有数据都必须在内存中,不是吗?

pipe history

40
推荐指数
2
解决办法
7641
查看次数

在 gpg 中设置默认密钥以进行签名

我使用 gpg 创建了多个密钥。

每当我尝试签署任何文件时,gpg 都会自动使用我创建的第一个文件。如何设置登录 gpg 的默认密钥。我还不想删除/撤销另一个。

否则,我如何更改用于签名的默认密钥?

encryption gpg signature

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

用于处理 Python 包的 Pip 与包管理器

Python 包经常托管在许多发行版的存储库中。阅读教程后,特别是标题为“您真的想这样做吗”的部分后,我避免使用 pip 并更喜欢使用系统存储库,仅在需要安装不在存储库中的软件包时才使用 pip。

但是,因为这是一种不一致的安装方法,所以只使用pip会更好吗?对于在两个地方都可用的软件包,在系统自己的存储库上使用 pip 有什么好处/批评者?

我包含的链接状态

始终使用标准 Debian / NeuroDebian 软件包的优势在于,这些软件包都经过仔细测试以确保彼此兼容。Debian 软件包记录了与其他库的依赖关系,因此您将始终获得所需的库作为安装的一部分。

我用拱。除了 apt 之外,其他包管理系统也是这种情况吗?

pacman python apt package-management pip

29
推荐指数
4
解决办法
5304
查看次数

安装程序中的 Debian 桌面环境

我已经研究了这个问题,找到了两页关于这个问题的页面,但没有澄清它。

在可选软件选择阶段的 debian-installer 中,您有以下选项:

Debian desktop environment (already ticked by default)
    ... GNOME (not ticked)
    ... xfce (not ticked)
    ... KDE (not ticked)
    ... Cinnamon (not ticked)
    ... MATE (not ticked)
    ... LXDE (not ticked)
Run Code Online (Sandbox Code Playgroud)

Debian 桌面环境实际安装了什么?它是否安装了 GUI(我的理解是 Gnome 是默认设置)还是只安装了一些对桌面用户有用但不包含 GUI 的程序?您是否必须勾选 Gnome 才能获得 GUI?如果没有,除了 Debian 桌面环境之外,勾选 Gnome 选项的目的是什么?

Debian Wiki 中有关桌面环境的页面没有阐明这个问题。

Debian 用户论坛上的这个主题关注这个问题,但有大量相互矛盾的答案。

gnome debian desktop-environment xfce debian-installer

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

为什么函数中的 $1 不打印脚本的第一个参数?

为什么不在这个简单的 bash 脚本中echo $1打印$1

#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something

$ ./function.sh 123  -> why doesn't it print '123' as a result?
Run Code Online (Sandbox Code Playgroud)

bash shell-script function

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

全局别名 fork 炸弹会阻止其执行吗?

如果你要全局设置

alias ':(){ :|:& };:'='echo fork bomb averted'
Run Code Online (Sandbox Code Playgroud)

这是否是避免 Bash fork 炸弹执行的有效安全策略,还是仍然有执行它的方法?

我想这个问题可以归结为:当命令别名为其他东西时,有没有办法执行命令?

security bash alias

15
推荐指数
4
解决办法
4213
查看次数

有没有办法在虚拟环境之外禁用 pip?

自从询问有关处理 Python 包的 Pip 与包管理器的问题以来,我学到了很多东西,尤其是关于带有venv模块的虚拟环境。这些天我几乎只pip 在内部虚拟环境中安装包。我几乎很少安装系统范围的 python 包。

不过,我总是害怕的一件事是,我可能会在pip install没有意识到我没有venv激活的情况下运行 命令。

有没有办法在我不在时才将 pip 列入黑名单venv

python package-management pip

5
推荐指数
2
解决办法
442
查看次数

gpg 密钥服务器总是不可靠吗?

我多年来一直使用 gpg 来完成一些最小的事情(pass、yadm 等),我一直注意到的一件事是,当通过门户网站访问时,密钥服务器(mit、ubuntu 等)的响应时间很慢(搜索绝对需要时间)。永远)。

最近yay似乎在导入密钥时遇到了麻烦,No Name人们似乎经常遇到这个错误,解决方案始终是手动导入密钥。过去一周,这种情况在我身上发生过两次,分别是1passwordspotify。我尝试研究长期解决方案而不是手动导入快捷方式,一个建议是手动设置密钥服务器/etc/pacman.d/gnupg/gpg.conf,但这并没有解决问题。我跑了pacman-key --refresh-keys一下,它成功了,但它似乎非常容易出错。这是最后的输出快照:

==> ERROR: Could not update key: B9113D1ED21E1A55
gpg: error retrieving 'pete@muddygoat.org' via WKD: General error
gpg: error reading key: General error
gpg: error retrieving 'p.r.lewis@cs.bham.ac.uk' via WKD: General error
gpg: error reading key: General error
gpg: error retrieving 'prlewis@letterboxes.org' via WKD: General error
gpg: error reading key: General error
gpg: error retrieving 'plewis@aur.archlinux.org' via WKD: No data
gpg: error reading …
Run Code Online (Sandbox Code Playgroud)

arch-linux gpg

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

了解 sshd 日志

我知道在哪里可以找到日志,但我并不总是确定它们的含义。而且我无法完全找到有关 sshd 日志的综合指南来解释它们的含义。

我特别关注这组日志尝试:

Feb 03 01:08:47 malan-server sshd[8110]: Invalid user centos from 193.106.58.90 port 34574
Feb 03 01:08:47 malan-server sshd[8110]: pam_tally(sshd:auth): pam_get_uid; no such user
Feb 03 01:08:47 malan-server sshd[8110]: pam_unix(sshd:auth): check pass; user unknown
Feb 03 01:08:47 malan-server sshd[8110]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=193.106.58.90
Feb 03 01:08:48 malan-server sshd[8110]: Failed password for invalid user centos from 193.106.58.90 port 34574 ssh2
Feb 03 01:08:49 malan-server sshd[8110]: Connection closed by invalid user centos 193.106.58.90 …
Run Code Online (Sandbox Code Playgroud)

ssh logs

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

为什么 Python 的 pip 在每个新的虚拟环境中都会重置为 10.0.1 版?

tl;dr:为什么每次我创建一个新的虚拟环境时 pip 的版本都会重置为 10.0.1,而不是从我的全局 18.0 安装中自动克隆?

每次我创建一个新的虚拟环境时,我都会被告知我的pip已经过时了。我跑

$ pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)

并得到以下输出:

Collecting pip
  Using cached https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-18.0
Run Code Online (Sandbox Code Playgroud)

pip -V在虚拟环境之外运行返回

pip 18.0 from /usr/lib/python3.7/site-packages/pip (python 3.7)
Run Code Online (Sandbox Code Playgroud)

所以过时的版本只有在我创建一个新的虚拟环境时才会创建。

这是python的虚拟环境模块的一个特性吗?

作为记录,我运行以创建新的虚拟环境的命令是:

$ python -m venv <venv>
Run Code Online (Sandbox Code Playgroud)

我通过运行安装它

$ pacman -S python python-pip
Run Code Online (Sandbox Code Playgroud)

我在 Arch 中运行它,输出python -VPython 3.7.0.

arch-linux pacman python package-management pip

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