在什么情况下会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) 我经常想做这个习语的一些变体:
$ 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"用不同的单线替换做正确的事情?
问题的简短版本:
其中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 头文件之一中定义的,但我不知道要查看哪个。
我在 SUSE 机器上,默认 Python 站点包位置是/usr/lib64/python2.6/site-packages. 有些软件包会自动安装/usr/lib/python2.6/site-packages。如何配置 Python 以便它也可以查看/usr/lib64/python2.6/site-packages?
我正在尝试删除一个 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)
有什么办法可以知道什么在使用这个逻辑卷?
我不得不为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 命令的原因)实际上是如何守护进程的。
我正在尝试使用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) 在 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文件创建成功,并且不会再次运行规则。
处理这种情况的正确方法是什么?
如果Linux 发行版是基于Fedora-core 的(例如Fedora、RHEL、CentOS、Scientific Linux),Python M2Crypto 库需要稍微不同的安装命令。
有没有办法检查发行版是否基于 Fedora-Core,以便我可以编写脚本来根据发行版执行正确的安装命令?
是否可以从逻辑卷而不是物理卷创建卷组?如果是这样,这样做有什么陷阱吗?
用例:
在已将所有物理卷分配给单个卷组的系统上安装 OpenStack Compute。nova-volume 服务需要一个单独的卷组,如文档中所述。我想知道我是否可以分割一个逻辑卷,然后创建“nova-volumes”卷组。
我想在 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 上执行此操作的正确方法可能有所不同. 这样做的正确方法是什么?
我经常遇到这样的情况,我在 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针对该会话的?