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-173875

Lance's questions

Martin Hope
Lance
Asked: 2019-12-03 19:34:50 +0800 CST

Linux中的堆栈使用什么数据结构?

  • 1

我已经查看了几个地方,例如这里,但没有一个详细解释用于实现堆栈本身的结构(“任务”(进程/线程)存储其嵌套调用信息等的地方)。它是一个链表,还是一个数组,还是别的什么?我似乎找不到此信息,但从图表上看,它们总是将其显示为一个大内存块(虚拟内存),其中开头是堆,结尾是堆栈。但这是我们正在处理的虚拟内存,它周围有各种数据结构,例如分页。所以问题是在这一切之上堆栈的实现到底是什么?我不禁认为它一定是一个链表。

原因是,如果你有多个进程,每个进程都有自己的堆栈,这是如何实现的?

在这里,我们似乎到达了某个地方:

每个进程在内核中运行时都有自己的堆栈供使用;在当前内核中,该堆栈的大小为 8KB 或(在 64 位系统上)16KB 内存。堆栈位于直接映射的内核内存中,因此它必须在物理上是连续的。

process thread
  • 1 个回答
  • 663 Views
Martin Hope
Lance
Asked: 2019-03-28 07:45:09 +0800 CST

如何在 bash 脚本中创建“if cond success failure”函数

  • 1

我越来越接近这个:

myif() {
  if ([ $1 ]) then
    shift
    $*
    true
  else
    shift
    shift
    $*
    false
  fi
}

主要部分是if ([ $1 ]) then不正确的。我希望能够做这三件事:

# boolean literals, probably passed in as the output to variables.
myif true successhandler failurehandler
myif false successhandler failurehandler
# a function to be evaluated
myif checkcondition successhandler failurehandler

checkcondition() {
  true
  # or:
  # false, to test
}

以下用于检查文件:

file_exists() {
  if ([ -e $1 ]) then
    shift
    $*
    true
  else
    shift
    shift
    $*
    false
  fi
}

想知道如何让第一个示例在处理这 3 个案例的情况下工作。我也尝试过使用eval并这样做:

myif() {
  if ([ "$*" ]) then
    shift
    $*
    true
  else
    shift
    shift
    $*
    false
  fi
}

但是不行。

bash shell-script
  • 1 个回答
  • 207 Views
Martin Hope
Lance
Asked: 2018-11-07 21:51:50 +0800 CST

有时 wget 只是挂起,而它应该用 --continue 重新启动

  • 3

有时 wget 只是在下载过程中挂起:

50% [===================>                   ] 500,000  500KB/s  eta 5m 5s

我最终只是wget --continue重新启动它,它似乎工作了一段时间,直到它再次挂起。

想知道(a)在这种情况下是否有办法抛出错误,或者(b)自动重启(可能使用一些外部包装脚本)。

此外,如果您碰巧知道这可能发生或正在发生的事情的一般原因,那么知道这将很有趣,但不是必需的。主要只是想知道如何让它重新启动(或至少抛出一个错误)。

顺便说一句,“挂起”我的意思是它只是坐在那里,终端没有任何变化,等等。但它似乎并没有导致内存泄漏或导致我的计算机的 CPU 被超越,所以它嗡嗡作响并且没有 CPU 剩下。相反,它只是坐在那里,我必须重新启动它。

我也试过这个,但它没有做任何事情:

wget --continue --tries=0 --read-timeout=10 http://domain.com/foo/bar.zip

此外,我仍然可以在不同终端窗口中的不相关域上同时运行多个其他 wget,所以也许它是从不响应的域或什么的。不知道该怎么办。

wget
  • 1 个回答
  • 7180 Views
Martin Hope
Lance
Asked: 2018-11-07 15:21:20 +0800 CST

wget 不排除嵌套目录

  • 0

我已经看到了,但它不起作用。远程/ftp 目录结构是这样的:

domain.com/
  toplevel/
    foo1/
      ARCHIVE/
        README.stuff
        DATA/
          README.txt
          ...other nested folders
      wantedstuff.zip
      wantedstuff2/
        morewantedstuff.zip
        ...otherstuffwanted

我想要.NET中每个嵌套文件夹的文件夹/toplevel内的所有内容除外。/ARCHIVE/toplevel/*

我试过这个:

wget --continue -r --exclude-directories=/ARCHIVE/ ftp://domain.com/toplevel/

还有这些:

wget --continue -r --exclude-directories=ARCHIVE ftp://domain.com/toplevel/
wget --continue -r --exclude-directories=ARCHIVE/ ftp://domain.com/toplevel/
wget --continue -r X /ARCHIVE/ ftp://domain.com/toplevel/
wget --continue -r -X '*/ARCHIVE/*' ftp://domain.com/toplevel/
wget --continue -r -X '*/ARCHIVE' ftp://domain.com/toplevel/
wget --continue -r --reject-regex '.*/ARCHIVE/.*' ftp://domain.com/toplevel/

但似乎没有一个工作,它仍然下载那个 ARCHIVE 文件夹。想知道如何防止它下载。

wget
  • 1 个回答
  • 3576 Views
Martin Hope
Lance
Asked: 2018-11-02 18:03:56 +0800 CST

如果 wget 遵循广度优先或深度优先

  • 4

在运行 wget 时,我预计它会“跟随链接”,就像深度优先:当它遇到一个链接时,它就是它获取的下一个东西。但它似乎首先以某种方式处理第一页,获取所有链接,然后运行这些链接。对于它获取的每个页面,可能有新的/嵌套的链接,但在原始页面完成之前它不会到达这些链接。想问一下这是否真的是它的工作原理,所以我知道我正在做的事情是否有效,它只是在完成起始页面的链接之前不会获取这些页面。

wget
  • 1 个回答
  • 599 Views
Martin Hope
Lance
Asked: 2018-08-22 20:21:49 +0800 CST

了解挂载命名空间在 Linux 中的工作原理

  • 8

我正在阅读有关挂载命名空间的信息,请参阅:

在挂载命名空间中,您可以挂载和卸载文件系统,而不会影响主机文件系统。因此,您可以安装一组完全不同的设备(通常更少)。

我正在尝试理解linux namespaces和 LXC 等,但我不太明白上面的语句是什么意思。

我想了解的是容器(1)如何拥有这样的文件:

/foo/a.txt
/foo/bar/b.txt

另一个容器(2)可以有这样的文件:

/foo/a.txt
/foo/x.txt
/foo/bar/b.txt
/foo/bar/y.txt

容器 (1) 和 (2) 的where/foo/a.txt和on 是相同的path,但它们可能具有不同的内容:/foo/bar/b.txt

# container (1)
cat /foo/a.txt #=> Hello from (1)

# container (2)
cat /foo/a.txt #=> Hello from (2)

这意味着物理系统上的文件(我对此一无所知)以一种方式存储,可能分散在各处。但是操作系统中有一个集中的“虚拟”文件数据库,如下所示:

db:
  container1:
    foo:
      a.txt: Hello from a from (1)
      bar:
        b.txt: Hello from b from (1)
  container2:
    foo:
      a.txt: Hello from a from (2)
      x.txt: Hello from x from (2)
      bar:
        b.txt: Hello from b from (2)
        y.txt: Hello from y from (2)

然后是物理文件的另一个操作系统数据库,可能如下所示:

drive1:
  dir1:
    foo:
      a.txt
      bar:
        b.txt
  dir2:
    foo:
      a.txt
      x.txt
      bar:
        b.txt
        y.txt

因此,当您在容器中创建文件时,实际上是在创建 2 条新记录:

  1. 1 为驱动器级物理文件映射
  2. 1 为容器级虚拟文件映射

这就是我想象它的工作方式。这就是我如何看到有一种方法可以(1)向用户(在 LXC 容器或 cgroup(我不太了解)中)呈现一个完整的“文件系统”,他们可以在其中(2) 创建自己的完全可定制的目录结构(可能具有与完全不同的虚拟文件系统相同的命名文件/目录/路径),这样 (3) 来自多个不同虚拟文件系统/容器的文件不会互相覆盖。

想知道这是否是它的工作方式,或者如果不是,它实际上是如何工作的(或它是如何工作的大纲)。

linux filesystems
  • 1 个回答
  • 8362 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