小编Lor*_*ein的帖子

“ls -lh”报告总大小小于单个大小的总和

在什么情况下会ls -lh显示总数小于单个文件的总和?例如:

$ ls -lh /var/lib/nova/instances/_base
total 100G
-rw-rw-r-- 1 nova         nova 4.3M 2012-02-14 14:07 00000001
-rw-rw-r-- 1 nova         nova 5.7M 2012-02-14 14:07 00000002
-rw-rw-r-- 1 nova         nova  42G 2012-03-08 15:24 1574bddb75c78a6fd2251d61e2993b5146201319.part
-rw-rw-r-- 1 libvirt-qemu kvm   24M 2012-02-14 14:07 77de68daecd823babbb58edb1c8e14d7106e83bb_sm
-rw-r--r-- 1 libvirt-qemu kvm   65G 2012-03-02 12:43 bd307a3ec329e10a2cff8fb87480823da114f8f4
-rw-rw-r-- 1 libvirt-qemu kvm  160G 2012-02-24 16:06 ephemeral_0_160_None
-rw-rw-r-- 1 libvirt-qemu kvm   80G 2012-02-24 22:38 ephemeral_0_80_None
-rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 22:37 fe5dbbcea5ce7e2988b8c69bcfdfde8904aabc1f
-rw-r--r-- 1 libvirt-qemu kvm   10G 2012-02-24 …
Run Code Online (Sandbox Code Playgroud)

ls disk-usage files

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

"mkdir foo; svn mv * foo"

我经常想做这个习语的一些变体:

$ mkdir 2010
$ svn mv * 2010
Run Code Online (Sandbox Code Playgroud)

当然,我得到一个错误,因为 glob 也匹配 2010:

svn: Cannot copy path '2010' into its own child '2010/2010'
Run Code Online (Sandbox Code Playgroud)

有没有办法"svn mv * 2010"用不同的单线替换做正确的事情?

shell directory wildcards rename

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

哪个头文件定义了指定机器架构的宏?

问题的简短版本:

其中C头包含宏对应于该系统的机器体系结构(例如,__x86_64____ia64____mips__?)

更长版本的问题:

我想在运行 Linux 的基于Tilera的系统上运行神经节监控工具。

Ganglia 目前不支持 Tilera。为了让它工作,我需要修改一个名为machine_type_func的 C 函数,它返回机器架构。这个函数的主体是在编译时确定的,它看起来像这样:

g_val_t
machine_type_func ( void )
{
   g_val_t val;

#ifdef __i386__
   snprintf(val.str, MAX_G_STRING_SIZE, "x86");
#endif
#ifdef __x86_64__
   snprintf(val.str, MAX_G_STRING_SIZE, "x86_64");
#endif
...
   return val;
}
Run Code Online (Sandbox Code Playgroud)

我需要为 Tilera 添加适当的行,但我不知道指定基于 Tilera 的系统的宏的名称。我猜这个宏是在标准 Linux 头文件之一中定义的,但我不知道要查看哪个。

linux header-file

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

配置 Python 以在查找包时包含另一个目录

我在 SUSE 机器上,默认 Python 站点包位置是/usr/lib64/python2.6/site-packages. 有些软件包会自动安装/usr/lib/python2.6/site-packages。如何配置 Python 以便它也可以查看/usr/lib64/python2.6/site-packages

suse python

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

哪个设备正在使用这个逻辑卷?

我正在尝试删除一个 LVM 逻辑卷,我认为它目前没有被使用。

但是,当我尝试删除它时,出现错误:

# lvremove /dev/vg_service1/lv_home 
  Logical volume vg_service1/lv_home is used by another device.
Run Code Online (Sandbox Code Playgroud)

它绝对没有安装,因为这不会返回任何内容:

# mount | grep lv_home
Run Code Online (Sandbox Code Playgroud)

有什么办法可以知道什么在使用这个逻辑卷?

rhel lvm

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

为什么我需要在我的 init.d 脚本完成后按 Enter 来获得我的 shell 提示?

我不得不为celery编写我自己的 CentOS init.d 脚本,因为它只为 Debian 提供了一个。你可以看到我在回答我自己的堆栈溢出问题3989656时写的脚本。

但是这个脚本有问题。如果我调用它:

sudo service celeryd start
Run Code Online (Sandbox Code Playgroud)

然后我需要在它完成后按 Enter 以获得 shell 提示。这是一个问题,因为我想通过 ssh 从另一台机器通过执行以下操作来调用它:

ssh 192.168.2.3 sudo service celeryd start
Run Code Online (Sandbox Code Playgroud)

并且 ssh 永远不会返回。(我使用结构来启动和停止远程服务,这会挂起它,因为它调用了上面的 ssh 命令)。

什么会导致这种行为,我该如何在我的脚本中修复它?

请注意,如果我按照 Thomas Themel 在评论中的建议执行“sh -x /etc/init.d/celeryd”,则输出为:

runuser -s /bin/bash - apache -c 'ulimit -S -c 0 >/dev/null 2>&1 ; /usr/local/django/portalapps/manage.py celeryd --pidfile /var/run/celery.pid -f /var/log/celeryd.log -l INFO'
Run Code Online (Sandbox Code Playgroud)

我不明白 /etc/init.d/functions 中的守护程序函数(这是产生这一系列 bash 命令的原因)实际上是如何守护进程的。

ssh centos init-script shell-script

6
推荐指数
2
解决办法
4764
查看次数

在安装后的 kickstart 中导入 EPEL GPG 密钥

我正在尝试使用Oz创建 CentOS 6.4 虚拟机映像并从 EPEL 安装一些软件包。当它尝试安装 epel-release 包时,出现错误:

Public key for epel-release-6-8.noarch.rpm is not installed
Run Code Online (Sandbox Code Playgroud)

我可以将自定义的 kickstart 文件传递​​给 Oz,因此我的想法是在安装后脚本中导入此密钥。我应该在该%post部分中放入什么以便导入适当的密钥?

作为参考,我的 Oz 模板如下所示:

<template>
    <name>centos-6.4</name>
    <os>
        <name>CentOS-6</name>
        <version>4</version>
        <arch>x86_64</arch>
        <install type='iso'>
            <iso>file:///data/isos/CentOS-6.4-x86_64-bin-DVD1.iso</iso>
        </install>
    </os>
    <description>CentOS 6.4 x86_64</description>
    <repositories>
        <repository name='epel-6'>
            <url>http://download.fedoraproject.org/pub/epel/6/$basearch</url>
            <signed>yes</signed>
        </repository>
    </repositories>
    <packages>
        <package name="epel-release" />
        <package name="cloud-utils" />
        <package name="cloud-init" />
    </packages>
    </commands>
</template>
Run Code Online (Sandbox Code Playgroud)

(我可以关闭对签名包的检查,但我想弄清楚如何在不关闭该检查的情况下执行此操作)。

编辑:这是我的自定义 kickstart 目前的样子:

install
text
key --skip
keyboard us
lang en_US.UTF-8
skipx
network --device eth0 --bootproto dhcp
rootpw %ROOTPW% …
Run Code Online (Sandbox Code Playgroud)

centos kickstart

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

由于输出重定向生成的大小为 0 的文件,make 错误地认为规则成功

在 makefile 中,我有几个如下所示的规则:

out.txt: foo.sh input.txt
  ./foo.sh -i input.txt > out.txt
Run Code Online (Sandbox Code Playgroud)

如果foo.sh失败,out.txt则将创建为 0 大小的文件。如果我再次运行make,它会错误地认为out.txt文件创建成功,并且不会再次运行规则。

处理这种情况的正确方法是什么?

shell make io-redirection

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

如何检查发行版是否基于 Fedora?

如果Linux 发行版是基于Fedora-core 的(例如Fedora、RHEL、CentOS、Scientific Linux),Python M2Crypto 库需要稍微不同的安装命令。

有没有办法检查发行版是否基于 Fedora-Core,以便我可以编写脚本来根据发行版执行正确的安装命令?

fedora rhel centos scientific-linux distributions

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

从逻辑卷而不是物理卷创建卷组

是否可以从逻辑卷而不是物理卷创建卷组?如果是这样,这样做有什么陷阱吗?

用例:

在已将所有物理卷分配给单个卷组的系统上安装 OpenStack Compute。nova-volume 服务需要一个单独的卷组,如文档中所述。我想知道我是否可以分割一个逻辑卷,然后创建“nova-volumes”卷组。

lvm

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

在 RHEL 上启动时在串行端口上运行 getty

我想在 RHEL 6.1 机器上的 ttyS2 上放置一个 getty,这样我就可以在 SSH 不工作时使用 IPMI 的串行以太网功能登录到机器。

过去(在 Ubuntu 上?),我曾经在 /etc/inittab 中添加这样的一行:

S1:2345:respawn:/sbin/agetty -h ttyS2 19200 vt100
Run Code Online (Sandbox Code Playgroud)

但我看到各种文件,如 /etc/init/start-ttys.conf、/etc/init/tty.conf 和 /etc/init/serial.conf,我怀疑在 RHEL 上执行此操作的正确方法可能有所不同. 这样做的正确方法是什么?

rhel tty

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

忘记 bash 交互式 shell 中散列的可执行位置

我经常遇到这样的情况,我在 Python virtualenv 中工作,我想运行一个可执行的 Python 程序(例如,bpython)。我运行它,忘记了我没有在我的 virtualenv 中安装它,所以它不会做正确的事情。然后,我在我的 virtualenv 中安装了 bpython,但是如果我尝试运行新版本,bash 会“记住”旧版本并调用它。

更具体地说:

(venv)$ bpython
       (whoops, system-level bpython!)
(venv)$ which bpython
/usr/local/bin/bpython
(venv)$ type bpython
bpython is hashed (/usr/local/bin/bpython)
(venv)$ pip install bpython 
(venv)$ which bpython
/Users/lorin/.virtualenvs/venv/bin/bpython
(venv)$ type bpython
bpython is hashed (/usr/local/bin/bpython)
Run Code Online (Sandbox Code Playgroud)

我如何告诉 bash 提示“忘记” bpython 的位置是/usr/local/bin/bpython针对该会话的?

bash

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