我一直在挖掘Linux内核的某些部分,发现这样的调用:
if (unlikely(fd < 0))
{
/* Do something */
}
Run Code Online (Sandbox Code Playgroud)
要么
if (likely(!err))
{
/* Do something */
}
Run Code Online (Sandbox Code Playgroud)
我找到了它们的定义:
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
Run Code Online (Sandbox Code Playgroud)
我知道它们是为了优化,但它们是如何工作的?使用它们可以预期性能/尺寸减少多少?至少在瓶颈代码中(当然在用户空间中)是否值得麻烦(并且可能失去可移植性).
使用Linux shell,如何从当前工作目录启动具有不同工作目录的程序?
例如,我有一个二进制文件helloworld,hello-world.txt在当前目录中创建该文件.该文件位于目录中/a.目前我在目录中/b.我想启动我的程序运行../a/helloworld并hello-world.txt在第三个目录中的某个位置/c.
例如,有时当我尝试启动Firefox时,它表示Firefox进程已在运行.所以我必须这样做:
jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy 7451 25.0 27.4 170536 65680 ? Sl 22:39 1:18 /usr/lib/firefox-3.0.1/firefox
jeremy 7578 0.0 0.3 3004 768 pts/0 S+ 22:44 0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451
Run Code Online (Sandbox Code Playgroud)
我想要的是一个可以为我做这一切的命令.它将在进程列表中为它(或其他)获取输入字符串和grep,并将终止输出中的所有进程:
jeremy@jeremy-desktop:~$ killbyname firefox
Run Code Online (Sandbox Code Playgroud)
我尝试在PHP中执行它但exec('ps aux')似乎只显示在PHP脚本本身中使用exec()执行的进程(因此它显示的唯一进程本身.)
Program是Xenomai测试套件的一部分,从Linux PC交叉编译为Linux + Xenomai ARM工具链.
# echo $LD_LIBRARY_PATH
/lib
# ls /lib
ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so
ld-linux.so.2 libdl.so.2 libpthread.so.0
libc-2.3.3.so libgcc_s.so libpthread_rt.so
libc.so.6 libgcc_s.so.1 libstdc++.so.6
libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9
libcrypt.so.1 libm.so.6
# ./clocktest
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
编辑:好的我没注意到.1的结尾是文件名的一部分.这究竟是什么意思?
我在我的 Linux 工作站上安装了一个新的硬盘驱动器。看起来效果很好。我想在新磁盘中下载一些存储库。所以我执行了git clone XXX,效果很好。但是当我在文件夹中cd并执行git submodule update --init --recursive. 它失败了
fatal: detected dubious ownership in repository at '/media/data/users/jhu3szh/serialize'
To add an exception for this directory, call:
git config --global --add safe.directory /media/data/users/jhu3szh/serialize
Run Code Online (Sandbox Code Playgroud)
我想也许这只是一个轻微的警告,所以我就执行了git config --global --add safe.directory /media/data/users/jhu3szh/serialize。然而,当我再次执行 Git 子模块时,又出现了更多类似的错误。存储库中有许多子模块。
发生的事情有何解释?
有没有办法限制linux中递归文件列表的深度?
我目前使用的命令是:
ls -laR > dirlist.txt
Run Code Online (Sandbox Code Playgroud)
但是我有大约200个目录,每个目录都有10个目录.因此,它需要花费太长时间并占用太多系统资源.
我真正感兴趣的是第一级子目录的所有权和权限信息:
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk
drwxr--r-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs
drwxr--r-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk
drwxr-xrwx 14 proftp root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs
drwxr-xrwx 14 proftp root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk
drwxr-xr-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs …Run Code Online (Sandbox Code Playgroud) 在bash脚本的标题中,这两个语句之间的区别是什么?
#!/usr/bin/env bash
#!/usr/bin/bash
当我试图看到env手册页时,我得到了这个定义:
env - run a program in a modified environment
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
我正在尝试编写一个shell脚本,在远程服务器上创建一些目录,然后使用scp将文件从本地计算机复制到远程服务器上.这是我到目前为止所拥有的:
ssh -t user@server<<EOT
DEP_ROOT='/home/matthewr/releases'
datestamp=$(date +%Y%m%d%H%M%S)
REL_DIR=$DEP_ROOT"/"$datestamp
if [ ! -d "$DEP_ROOT" ]; then
echo "creating the root directory"
mkdir $DEP_ROOT
fi
mkdir $REL_DIR
exit
EOT
scp ./dir1 user@server:$REL_DIR
scp ./dir2 user@server:$REL_DIR
Run Code Online (Sandbox Code Playgroud)
每当我运行它时,我收到此消息:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Run Code Online (Sandbox Code Playgroud)
脚本永远挂起.
我的公钥在服务器上是可信的,我可以在脚本之外运行所有命令.有任何想法吗?
我知道/在Linux中是非法的,以下在Windows中是非法的(我认为) * . " / \ [ ] : ; | , *
我还缺少什么?
但是,我需要一个全面的指南,并且需要考虑双字节字符.链接到外部资源对我来说没问题.
我需要首先使用可能包含禁用字符的名称在文件系统上创建一个目录,所以我打算用下划线替换这些字符.然后我需要将此目录及其内容写入zip文件(使用Java),因此有关zip目录名称的任何其他建议将不胜感激.