小编Mat*_*nco的帖子

为什么 chroot 在现有文件上得到 ENOENT?

;TL-DR -答案:因为缺少动态链接器 ld-linux-x86-64.so.2。

\n\n

我已经-ro,loop/mnt/foo.

\n\n

它包含以下内容(/mnt/foo是挂载点):

\n\n
\n-rwxr-xr-x 1 root root 110088 jan 17 2013 /mnt/foo/bin/ls\n-rw-r--r-- 1 root root 5212 jul 23 09:35 /mnt/foo/etc/ ld.so.cache\n-rw-r--r-- 1 个根 root 7 月 23 日 5 日 09:35 /mnt/foo/etc/ld.so.conf\n-rw-r--r-- 1 个根根 31168 maj 23 2013 /mnt/foo/lib/libacl.so.1\n-rw-r--r-- 1 root 根 18624 maj 20 2013 /mnt/foo/lib/libattr.so.1\n- rwxr-xr-x 1 根 1853400 okt 12 2013 /mnt/foo/lib/libc.so.6\n-rw-r--r-- 1 根 14664 okt 12 2013 /mnt/foo/lib/libdl .so.2\n-rw-r--r-- 1根根256224 mar 11 2013 …

linux chroot dynamic-linking elf exec

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

如何找出 Linux 内核中编译了哪些文件系统驱动程序?

在正在运行的 Linux 系统上,有什么可移植的(在 Linux 发行版中)方法来找出当前内核已编译(不通过模块)支持哪些文件系统?

以我当前的 Ubuntu x86_64 内核为例3.11.0-24-generic #41-Ubuntu:例如,它有 no /proc/config.gz,否则这将是我的第一个想法。

我感兴趣的原因是我想(以编程方式)使用当前内核和内核能够加载/安装的初始 ramdisk 构建一个救援环境。

/proc/filesystems 是不是就跟 比较一样简单lsmod

如果是这样:模块是否始终具有lsmod与文件系统名称(中的最后一列)完全相同的名称(输出的第一列/proc/filesystems)?

是否有一种更现代的方式,例如/sys代替/proc寻找信息?

我目前的方法如下。有人可以确认它是正确的,或者建议如何做吗?:

for fscand in $(awk '{print $NF}' /proc/filesystems)
do
  if test $(lsmod | grep -c -e '^'${fscand}'[^a-z0-9_-]') -eq 0
  then
    candlist="${fscand} ${candlist}"
  fi
done

for fscand in $candlist
do
  echo $fscand is compiled-in
done
Run Code Online (Sandbox Code Playgroud)

filesystems kernel-modules proc sysfs linux-kernel

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

cp 选项 --no-clobber 与 --update

当(且仅当)目标不存在时,我想复制单个文件。源文件很少更改,可能每月一次。目的地几乎不存在。

-n和选项之间有什么区别吗-u?(或两者!)

cp直接从 调用crondcp没有使用其他选项。

同一 cron 作业同时在多台机器上调用,从相同的源读取数据并写入相同的目标(两者都在共享的 GFS 全局文件系统上)。此后不久,目标文件将被另一个进程移动,因此它唯一可能存在的时间是在 cron 作业在多个节点上同时执行的竞赛期间。

哪个会更有效率?:

  • cp -n source dest
  • cp -u source dest
  • cp -nu source dest
  • cp -pu source dest

我目前倾向于简单的-n替代方案。

gnu cp coreutils

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

shell for loop with find 文件名包含空格

考虑一个具有典型 Microsoft Windows 文件名的目录:

新建文档.txt
文件
Foo - Copy.doc

我想对每个文件做一些事情,例如:

对于 $(find ${POLLDIR} -type f -mmin +1 -print0) 中的 sendfile
做
  回声 \"${sendfile}\"
  ls -l "${sendfile}"
  等等
  如果成功_以上
  然后
    mv "${sendfile}" "${donedir}/."
  菲
完毕

请注意,我不想只以“${sendfile}”作为参数运行 1 个命令。我需要循环来做错误检查和其他事情(比如在成功时移动“${sendfile}”并在失败时登录)。

什么是从 find 转义/引用文件名的“正确”构造,以便我可以在ls上面的命令中使用它们?如果可能,我想避免将文件名一一存储在临时文件中。

我不认为find -printf '"%p"\n'正如三重奏在对问题[当文件名包含空格时如何使用查找?] 将在for foo in $(...) do构造中工作。

我认为?在这种情况下替换“非法”字符对我有用,但这会非常难看。for 循环最终处理 ${POLLDIR} 中的文件,然后在完成后移动它们,因此“Foo bar.txt”与“Foo-bar.txt”冲突的机会为 0 (-ish)。

到目前为止,我最好的尝试是:

对于 $(find ${POLLDIR} -type f -mmin +1 -print | tr ' ' '?') 中的 …

find shell-script filenames whitespace

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