AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-30049

Nathaniel M. Beaver's questions

Martin Hope
Nathaniel M. Beaver
Asked: 2019-11-28 09:45:33 +0800 CST

为什么 Esc-[ 在 `less` 中不向左滚动?

  • 2

根据手册页,lesskey以下键绑定到左滚动和右滚动:

\e[       left-scroll
\e]       right-scroll
\e(       left-scroll
\e)       right-scroll
\kl       left-scroll
\kr       right-scroll

箭头键和Esc-(/Esc -)可以正常工作,就像Esc-]向右滚动一样,但Esc-[不能用于向左滚动。相反,它只是在命令行提示符中显示:

ESC[

将此行添加到~/.lesskey函数中作为解决方法:

\e[ left-scroll

但是为什么默认情况下它不起作用?

我在 Debian stretch 以及 Kubuntu 18.04 以及各种终端仿真器上的 XFCE4 中观察到了这种行为。

$ less --version
less 487 (GNU regular expressions)
Copyright (C) 1984-2016  Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less

我考虑提交错误报告,但已知错误和功能请求列表 表明这是一种已知行为:

增强请求

[ . . . ]

参考号:175

在版本中实现:322

为 ESC-[ 添加备用命令。

这实际上是一个限制less,还是终端处理 Escape 键的一个怪癖?

keyboard-shortcuts escape-characters
  • 1 个回答
  • 173 Views
Martin Hope
Nathaniel M. Beaver
Asked: 2019-07-25 20:05:45 +0800 CST

调试缓慢的缩略图进程

  • 3

我正在尝试在缩略图生成过程中调试一种特殊的性能行为eog,特别是gdk-pixbuf. 要重现的最小文件在这里:

https://github.com/nbeaver/gdk-pixbuf-bug

进程树如下所示:

systemd,1 splash
  `-plasmashell,4366
      `-konsole,6783
          `-bash,6793
              `-make,6949 reproduce
                  `-eog,6973 /usr/share/doc/docutils-doc/docs/user/images
                      `-bwrap,10071 --ro-bind /usr /usr --ro-bind /bin /bin --ro-bind /lib64 /lib64 --ro-bind /lib /lib --ro-bind /sbin /sbin --proc /proc --dev /dev --chdir / --setenv GIO_USE_VFS local --unshare-all --die-with-parent --bind /tmp/gnome-desktop-thumbnailer-2HUN5Z /tmp --ro-bind /usr/share/doc/docutils-doc/docs/user/images/s5-files.svg /tmp/gnome-desktop-file-to-thumbnail.svg --seccomp 11 /usr/bin/gdk-pixbuf-thumbnailer -s 128 file:///tmp/gnome-desktop-file-to-thumbnail.svg /tmp/gnome-desktop-thumbnailer.png
                          `-bwrap,10074 --ro-bind /usr /usr --ro-bind /bin /bin --ro-bind /lib64 /lib64 --ro-bind /lib /lib --ro-bind /sbin /sbin --proc /proc --dev /dev --chdir / --setenv GIO_USE_VFS local --unshare-all --die-with-parent --bind /tmp/gnome-desktop-thumbnailer-2HUN5Z /tmp --ro-bind /usr/share/doc/docutils-doc/docs/user/images/s5-files.svg /tmp/gnome-desktop-file-to-thumbnail.svg --seccomp 11 /usr/bin/gdk-pixbuf-thumbnailer -s 128 file:///tmp/gnome-desktop-file-to-thumbnail.svg /tmp/gnome-desktop-thumbnailer.png
                              `-gdk-pixbuf-thum,10075 -s 128 file:///tmp/gnome-desktop-file-to-thumbnail.svg /tmp/gnome-desktop-thumbnailer.png

从strace日志中,看起来/usr/bin/gdk-pixbuf-thumbnailer大约需要 30 秒查看字体文件:

22:44:05 munmap(0x7fd491988000, 20930832) = 0 <0.000558>
22:44:05 openat(AT_FDCWD, "/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc", O_RDONLY) = 5 <0.000060>
22:44:05 fcntl(5, F_SETFD, FD_CLOEXEC)  = 0 <0.000014>
22:44:05 fstat(5, {st_mode=S_IFREG|0644, st_size=20930832, ...}) = 0 <0.000013>
22:44:05 mmap(NULL, 20930832, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fd491988000 <0.000021>
22:44:05 close(5)                       = 0 <0.000011>
22:44:06 munmap(0x7fd491988000, 20930832) = 0 <0.000525>
22:44:06 openat(AT_FDCWD, "/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc", O_RDONLY) = 5 <0.000076>
22:44:06 fcntl(5, F_SETFD, FD_CLOEXEC)  = 0 <0.000013>
22:44:06 fstat(5, {st_mode=S_IFREG|0644, st_size=20930832, ...}) = 0 <0.000012>
22:44:06 mmap(NULL, 20930832, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fd491988000 <0.000023>
22:44:06 close(5)                       = 0 <0.000013>
<snip>
22:44:31 stat("/usr/share/fonts/opentype/stix-word/STIXMath-Regular.otf", {st_mode=S_IFREG|0644, st_size=476872, ...}) = 0 <0.000024>
22:44:31 openat(AT_FDCWD, "/usr/share/fonts/opentype/stix-word/STIXMath-Regular.otf", O_RDONLY) = 5 <0.000026>
22:44:31 fcntl(5, F_SETFD, FD_CLOEXEC)  = 0 <0.000014>
22:44:31 fstat(5, {st_mode=S_IFREG|0644, st_size=476872, ...}) = 0 <0.000013>
22:44:31 mmap(NULL, 476872, PROT_READ, MAP_PRIVATE, 5, 0) = 0x7fd49c26a000 <0.000023>
22:44:31 close(5)                       = 0 <0.000015>

有一个特定的 SVG 会触发此行为。但是,仅在 SVG 上运行eog 或运行是不够的。gdk-pixbuf-thumbnailer此行为仅在以下情况下发生:

  • 在目录上运行eog;

  • 目录中有一个特定的 SVG,但~/.cache/thumbnails/.

    (我touch用来更新 SVG 的时间戳并让缩略图每次都再次运行。)

  • 在同一目录中至少有一个其他图像;

  • 另一个图像的文件名在 SVG 文件名之前进行整理。

    (如果文件名在 SVG 文件名之后排序,它会在不到一秒的时间内生成缩略图。否则大约需要 30 秒。)

还有一些其他的谜题。在strace日志中,挂钟时间似乎与系统调用所花费的时间不匹配。我已经在旗帜eog下奔跑:strace-f

-f

由于 fork(2)、vfork(2) 和 clone(2) 系统调用由当前跟踪的进程创建,因此跟踪子进程。

我也尝试过这个-ff标志:

-ff

如果该-o filename选项有效,则每个进程跟踪都将写入每个进程 的数字进程 IDfilename.pid所在的位置。pid

但在任何一种情况下 gdk-pixbuf-thumbnailer都不会出现在子进程的日志文件中。

我也无法运行(gdb关于gdk-pixbuf-thumbnailer “目标和调试器位于不同的 PID 命名空间”),所以我不知道它卡在哪里了。

$ sudo gdb -p 20789
[sudo] password for nathaniel:
<snip>
Error while mapping shared library sections:
Could not open `target:/lib/x86_64-linux-gnu/libbsd.so.0' as an executable file: No such file or directory

warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

warning: Target and debugger are in different PID namespaces; thread lists and other data are likely unreliable.  Connect to gdbserver inside the container.
(gdb) quit
Detaching from program: target:/newroot/usr/bin/gdk-pixbuf-thumbnailer, process 20789

我猜这与bwrap容器有关。

版本信息:

$ apt-cache policy libgdk-pixbuf2.0-bin eog
libgdk-pixbuf2.0-bin:
  Installed: 2.36.11-2
  Candidate: 2.36.11-2
  Version table:
 *** 2.36.11-2 500
        500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
        100 /var/lib/dpkg/status
eog:
  Installed: 3.28.1-1
  Candidate: 3.28.1-1
  Version table:
 *** 3.28.1-1 500
        500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
        100 /var/lib/dpkg/status

我的问题是:

  • 这个错误可以在其他机器和其他版本上重现吗?

    (我碰巧使用的是 Ubuntu 18.04,但我想知道这是否发生在其他发行版上。)

  • 为什么不 作为子进程strace -f拾取?/usr/bin/gdk-pixbuf-thumbnailereog

    是否eog使用不寻常的方法来创建子进程?

  • 如何使用gdb附加到 /usr/bin/gdk-pixbuf-thumbnailer流程并查看它花费时间的功能?

  • 什么可能导致这种行为?

fonts strace
  • 1 个回答
  • 639 Views
Martin Hope
Nathaniel M. Beaver
Asked: 2019-03-30 21:47:53 +0800 CST

读取 stdin 上的路径并为每一行生成一个新的交互式 shell

  • 0

考虑一个在整个主目录中搜索具有错误权限的文件或目录的命令:

$ find $HOME -perm 777

这只是一个例子;该命令可能会列出损坏的符号链接:

$ find $HOME -xtype l

或列出冗长的符号链接:

$ symlinks -s -r $HOME

或任何数量的其他昂贵的命令,将换行符分隔的路径发送到stdout.

现在,我可以在这样的寻呼机中收集结果:

$ find $HOME -perm 777 | less

然后cd到不同虚拟终端中的相关目录。但我宁愿有一个脚本为每一行输出打开一个新的交互式 shell,如下所示:

$ find $HOME -perm 777 | visit-paths.sh

这样我可以检查每个文件或目录,检查时间戳,决定是否需要更改权限或删除文件等。

使用从文件或 stdin 读取路径的 bash 脚本是可行的,如下所示:

#! /usr/bin/env bash

set -e

declare -A ALREADY_SEEN
while IFS='' read -u 10 -r line || test -n "$line"
do
    if test -d "$line"
    then
        VISIT_DIR="$line"
    elif test -f "$line"
    then
        VISIT_DIR="$(dirname "$line")"
    else
        printf "Warning: path does not exist: '%s'\n" "$line" >&2
        continue
    fi
    if test "${ALREADY_SEEN[$VISIT_DIR]}" != '1'
    then
        ( cd "$VISIT_DIR" && $SHELL -i </dev/tty )
        ALREADY_SEEN[${VISIT_DIR}]=1
        continue
    else
        # Same as last time, skip it.
        continue
    fi
done 10< "${*:-/dev/stdin}"

这有一些好处,例如:

  • 一旦出现新的输出行,脚本就会打开一个新的 shell stdin。这意味着在我开始做事之前,我不必等待慢速命令完全完成。

  • 当我在新生成的 shell 中执行操作时,slow 命令一直在后台运行,因此下一条路径可能在我完成时准备好访问。

  • 如有必要,我可以提前退出循环,例如使用false; exitCtrl-C Ctrl-D。

  • 该脚本处理文件名和目录。

  • 该脚本避免连续两次导航到同一目录。(感谢@MichaelHomer 解释了如何使用关联数组来做到这一点。)

但是,这个脚本有一个问题:

  • 如果最后一个命令具有非零状态,则整个管道退出,这对于提前退出很有用,但通常需要$?每次检查以防止意外提前退出。

为了尝试解决这个问题,我编写了一个 Python 脚本:

#! /usr/bin/env python3

import argparse
import logging
import os
import subprocess
import sys

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Visit files from file or stdin.'
    )
    parser.add_argument(
        '-v',
        '--verbose',
        help='More verbose logging',
        dest="loglevel",
        default=logging.WARNING,
        action="store_const",
        const=logging.INFO,
    )
    parser.add_argument(
        '-d',
        '--debug',
        help='Enable debugging logs',
        action="store_const",
        dest="loglevel",
        const=logging.DEBUG,
    )
    parser.add_argument(
        'infile',
        nargs='?',
        type=argparse.FileType('r'),
        default=sys.stdin,
        help='Input file (or stdin)',
    )
    args = parser.parse_args()
    logging.basicConfig(level=args.loglevel)
    shell_bin = os.environ['SHELL']
    logging.debug("SHELL = '{}'".format(shell_bin))
    already_visited = set()
    n_visits = 0
    n_skipped = 0
    for i, line in enumerate(args.infile):
        visit_dir = None
        candidate = line.rstrip()
        logging.debug("candidate = '{}'".format(candidate))
        if os.path.isdir(candidate):
            visit_dir = candidate
        elif os.path.isfile(candidate):
            visit_dir = os.path.dirname(candidate)
        else:
            logging.warning("does not exist: '{}'".format(candidate))
            n_skipped +=1
            continue
        if visit_dir is not None:
            real_dir = os.path.realpath(visit_dir)
        else:
            # Should not happen.
            logging.warning("could not determine directory for path: '{}'".format(candidate))
            n_skipped +=1
            continue
        if visit_dir in already_visited:
            logging.info("already visited: '{}'".format(visit_dir))
            n_skipped +=1
            continue
        elif real_dir in already_visited:
            logging.info("already visited: '{}' -> '{}'".format(visit_dir, real_dir))
            n_skipped +=1
            continue
        if i != 0:
            try :
                response = input("#{}. Continue? (y/n) ".format(n_visits + 1))
            except EOFError:
                sys.stdout.write('\n')
                break
            if response in ["n", "no"]:
                break
        logging.info("spawning '{}' in '{}'".format(shell_bin, visit_dir))
        run_args = [shell_bin, "-i"]
        subprocess.call(run_args, cwd=visit_dir, stdin=open('/dev/tty'))
        already_visited.add(visit_dir)
        already_visited.add(real_dir)
        n_visits +=1

    logging.info("# paths received: {}".format(i + 1))
    logging.info("distinct directories visited: {}".format(n_visits))
    logging.info("paths skipped: {}".format(n_skipped))

但是,我在将Continue? (y/n)提示的回复传递给生成的 shell 时遇到了一些问题,导致类似y: command not found. 我怀疑问题出在这条线上:

subprocess.call(run_args, cwd=visit_dir, stdin=open('/dev/tty'))

stdin使用时我需要做一些不同的事情subprocess.call吗?

或者,是否有一个广泛可用的工具可以使两个脚本变得多余,而我只是没有听说过?

shell python
  • 2 个回答
  • 628 Views
Martin Hope
Nathaniel M. Beaver
Asked: 2018-04-07 12:26:56 +0800 CST

从 strace 日志中过滤掉失败的系统调用

  • 5

我可以strace像这样运行命令sleep 1 并查看它正在访问的文件是这样的:

strace -e trace=file -o strace.log sleep 1

但是,在我的机器上,许多调用的返回值为 -1,表示该文件不存在。例如:

$ grep '= -1 ENOENT' strace.log | head
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_TELEPHONE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_ADDRESS", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_NAME", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_PAPER", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

我对不存在的文件并不真正感兴趣,我想知道该进程实际找到并读取了哪些文件。除了grep -v '=-1 ENOENT',我怎样才能可靠地过滤掉失败的呼叫?

附录

我很惊讶地得知自 2002 年以来一直以标志strace的形式在作品中使用此功能,这是自 5.2 版 (2019-07-12 )以来功能齐全的别名,也可从 5.6 版(2020- 04-07)。-z-e status=successful--successful-only

-z从 5.2 版开始也可以使用,-Z标志的补充-e status=failed,它是--failed-only5.6 版的别名。

该-z标志最初是在 2002 年的一次提交中添加的,并在 4.5.18 版(2008-08-28 )中发布,由于它无法正常工作,它从未被记录在案。

相关链接:

  • 只看到成功的系统调用

    2002 年 11 月 2 日星期六 23:07:23 UTC

    使用 strace 时,我有时喜欢查看有效的系统调用(而不是所有系统调用)。

    多年来我一直在移植这个补丁,它似乎非常有用。

    使用 -z 选项,您不会看到打开不存在的文件(跟踪程序实际执行的操作非常有用,而不是尝试执行)。

    https://lists.strace.io/pipermail/strace-devel/2002-November/000232.html

  • strace:-z 选项无法正常工作

    日期:2003 年 1 月 12 日星期日 09:33:01 UTC

    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=176376

  • 仅跟踪失败的系统调用

    创建时间:2004-03-19

    https://sourceforge.net/p/strace/feature-requests/3/

  • [strace-4.15] 建议:-z 选项的输出暂存(仅打印成功的系统调用)/包含补丁

    2017 年 1 月 17 日星期二 09:35:54 UTC

    https://lists.strace.io/pipermail/strace-devel/2017-January/005941.html

  • [PATCH v1] 为失败/成功的系统调用实现了输出暂存

    2017 年 1 月 18 日星期三 16:01:20 UTC

    https://lists.strace.io/pipermail/strace-devel/2017-January/005950.html

  • 修复 -z 选项

    2018 年 2 月 28 日

    https://github.com/strace/strace/issues/49

  • [PATCH 0/3] -z 和新的 -Z 选项的阶段输出

    2019 年 4 月 1 日星期一 21:13:02 UTC

    https://lists.strace.io/pipermail/strace-devel/2019-April/008706.html

  • strace -z 标志

    2019 年 6 月 10 日星期一 05:29:19 UTC

    https://lists.strace.io/pipermail/strace-devel/2019-June/008808.html

strace system-calls
  • 3 个回答
  • 4054 Views
Martin Hope
Nathaniel M. Beaver
Asked: 2018-03-22 10:19:53 +0800 CST

按架构过滤债务标签搜索

  • 1

我multiarch启用了,当我运行时debtags search,我得到了很多重复的结果。

$ debtags search 'works-with-format::man' | head
docbook-to-man - converter from DocBook SGML into roff man macros
docbook-to-man:i386 - converter from DocBook SGML into roff man macros
docbook-utils - Convert DocBook files to other formats (HTML, RTF, PS, man, PDF)
docbook2x - Converts DocBook/XML documents into man pages and TeXinfo
docbook2x:i386 - Converts DocBook/XML documents into man pages and TeXinfo
doclifter - Convert troff to DocBook
dwww - Read all on-line documentation with a WWW browser
dwww:i386 - Read all on-line documentation with a WWW browser
ebook-speaker - eBook reader that reads aloud in a synthetic voice
ebook-speaker:i386 - eBook reader that reads aloud in a synthetic voice

有一种解决方法grep:

$ debtags search 'works-with-format::man' | grep -v ':i386 - ' | head
docbook-to-man - converter from DocBook SGML into roff man macros
docbook-utils - Convert DocBook files to other formats (HTML, RTF, PS, man, PDF)
docbook2x - Converts DocBook/XML documents into man pages and TeXinfo
doclifter - Convert troff to DocBook
dwww - Read all on-line documentation with a WWW browser
ebook-speaker - eBook reader that reads aloud in a synthetic voice
git-man - fast, scalable, distributed revision control system (manual pages)
gman - small man(1) front-end for X
gmanedit - GTK+ man pages editor
gnulib - GNU Portability Library

这假设该字符串:i386 -没有出现在任何包描述中,这有点骇人听闻。有没有更好的办法?

debian multiarch
  • 1 个回答
  • 71 Views
Martin Hope
Nathaniel M. Beaver
Asked: 2018-03-16 08:35:40 +0800 CST

从 TID 获取 PID

  • 11

我跑去iotop检查那些重度磁盘用户的程序,以防我需要降低它们的优先级。通常这已经足够了,但iotop只显示线程 ID (TID),有时我想知道进程 ID (PID),以便了解更多关于哪个进程负责。

不幸的是,虽然ps可以显示 TID(又名 SPID,LWP),但它没有一个标志来获取 TID 列表,就像它对带有--pid. 我能做的最好的就是列出 TID,然后grep是输出。例如,如果线程 id 是 792,我可以这样做

$ ps -eLf | grep ' 792 '

它工作得相当好,但有点不雅。

有没有更好的办法?

ps thread
  • 1 个回答
  • 7575 Views
Martin Hope
Nathaniel M. Beaver
Asked: 2018-02-20 20:08:05 +0800 CST

在 dmesg 中切换分段错误消息的可见性

  • 3

当应用程序出现段错误时,我通常会在以下位置看到这样的消息dmesg:

pstree[25678]: segfault at 0 ip 00007f58be0b3ae4 sp 00007ffe65b700a0 error 4 in libc-2.24.so[7f58be04d000+195000]

但是,我想我一定是在某个地方更改了我的内核设置,因为我不再在dmesg. 我正在用这个 C 程序触发段错误:

#include <signal.h>

int main()
{
        raise(SIGSEGV);
}

我知道我的日志级别设置为KERN_DEBUG:

$ cat /proc/sys/kernel/printk
7   4   1   7

我知道我可以看到dmesg这样的输出:

sudo sh -c "printf '<%s> Log level %s (KERN_DEBUG)\n' '7' '7' > /dev/kmsg"

我知道debug.exception-trace设置为1:

$ sysctl debug.exception-trace 
debug.exception-trace = 1
$ cat /proc/sys/debug/exception-trace 
1

但我仍然没有收到段错误通知。dmesg手册页讨论了为段错误消息着色,而不是关于打开或关闭它们。

logs dmesg
  • 1 个回答
  • 3567 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve