例如,如果包指定
Depends: www-browser
apt/dpkg 如何决定安装哪个真正的软件包?
如debian aptitude 参考指南中所示,aptitude 的默认包列表组织为:
在这里它按“已安装/未安装”分组,我如何自定义此列表以按其他标准(例如“存档”(例如不稳定)或未完成的操作或其他此类标准)对包进行分组?
注意:我知道 aptitude 可以做到这一点,但我不记得该怎么做。
在我的计算机/lib/systemd/system
目录中,我看到一个文件multiuser.target
- 该文件包含:
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
该行:Requires: basic.target
我认为这意味着“运行”basic.target
文件。
但是在同一个 /lib/systemd/system
目录中还有一个multi-user.target.wants/
子目录。它包含更多的单元文件:
/lib/systemd/system $tree multi-user.target.wants/
multi-user.target.wants/
├── dbus.service -> ../dbus.service
├── getty.target -> ../getty.target
├── systemd-ask-password-wall.path -> ../systemd-ask-password-wall.path
├── systemd-logind.service -> ../systemd-logind.service
├── systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service
└── systemd-user-sessions.service -> ../systemd-user-sessions.service
这些单元中的哪一个,即文件:basic.target
或子目录中的所有单元在默认引导目标multi-user.wants.target
时运行?multi-user.target
以上是全部吗?如果是这样,顺序是什么?
从概念上讲,我认为 TCP 连接有两个方面。
TCP 的连接方面在网络上的文档中有很好的介绍,主机通过 3 次握手等方式协商连接,但此时您只有一个空闲连接 - 再次类似于有人在另一端拿起电话并拥有“死气”
我的问题是,一旦建立此连接,数据(例如文件传输)如何启动?我想它看起来像发送者概述它要发送的内容,即“我要发送给你......,当你有一个 X 字节的文件时,你会知道传输完成,或者你收到来自的预告片我”。TCP 数据/文件传输如何开始?
一些文件复制程序喜欢rsync
并且curl
能够恢复失败的传输/复制。
请注意,这些故障可能有很多原因,在某些情况下程序可以“清理”某些情况下程序不能。
当这些程序恢复时,它们似乎只是计算成功传输的文件/数据的大小,然后开始从源读取下一个字节并附加到文件片段上。
例如,“成功”到目的地的文件片段的大小是 1378 字节,因此它们只是从原始字节 1379 开始读取并添加到片段中。
我的问题是,知道字节是由位组成的,并且并非所有文件都将其数据分段为干净的字节大小的块,这些程序如何知道他们选择开始添加数据的点是正确的?
当写入目标文件时,会在程序、内核或文件系统级别发生类似于 SQL 数据库的某种缓冲或“事务”,以确保只有干净、格式良好的字节才能到达底层块设备?
或者程序是否假设最新的字节可能不完整,所以他们假设它坏了就删除它,重新复制字节并从那里开始追加?
知道并非所有数据都表示为字节,这些猜测似乎不正确。
当这些程序“恢复”时,他们如何知道他们从正确的地方开始?
我们建议,在 bash 脚本中,我们不应该解析 ls 的输出
上面链接的网页推荐如下代码:
# Good!
for f in *; do
[[ -e $f ]] || continue
...
done
或用文件名填充数组
myfiles=( ~/* )
但是,当我查看这些示例并了解 bourne shell 通常如何处理未引用的字符串时,我的感觉是,如果我在包含空格的文件名上使用此代码,则 glob 会在文件上的每个 - 空格分隔 - 单词上爆炸。例如,如果我有以下目录
$ ls -1
a file I downloaded from the net.pdf
apple.sh
hello world.txt
我运行这个
for file in *
do printf "%s\n" "$file"
done
我期待未引用的字符串行为。例如
a
file
I
downloaded
from
the
net.pdf
apple
hello
world
但我得到的是正确的行为
a file I downloaded from the net.pdf
apple
hello world
类似的数组
myfiles=( * )
declare -p myfiles
declare -a myfiles='([0]="a file I downloaded from the net.pdf" [1]="apple" [2]="hello world")'
我的问题是为什么会这样?
是因为分词后进行了全局扩展吗?(以便这些类型的文件操作产生正确的输出?)