Articles of Linux操作系统

C程序使用glibc编译而不是默认库:执行权限被拒绝

这是我在stackoverflow的第一个问题,所以我会尽力做好。 语境: 我想提供一个可以在每个Linux发行版上运行的程序(例如,将使用C ++ 11的程序,在没有C ++ 11程序库的系统上运行)。 为此,我想复制我的程序使用的所有库,并将它们放在一个带有可执行文件的文件夹中,以便它可以使用这些库而不是系统的库。 我有两个环境来testing: – Opensuse,(GNU libc)2.19 – Ubuntu,(Ubuntu EGLIBC 2.17-Oubuntu5.1)2.17 我在Opensuse下编译我的程序,并在Ubuntu下运行它。 该程序使用默认库时效果很好。 项目: 这里是main.c : int main(int ac, char **av) { printf("Hello World !\n"); } 这里是Opensuse下的文件夹树(在没有main.c和exec.sh的Ubuntu下也一样): + project | +— main.c +— a.out +— exec.sh +—+ lib | +— libc.so.6 +— ld-linux-x86-64.so.2 最后,当我用一个简单的编译启动程序时,这里是ldd和readelf: > gcc main.c -o a.out > […]

对cron执行的命令是否有特殊限制?

我有一个crontab ,看起来像 0 0 * * * pg_dump DB_NAME > /path/to/dumps/`date +%Y%m%d`.dmp 当我手动运行它工作正常,但不是当cron运行它。 挖完日志后,我明白了 Dec 12 00:00:01 localhost crond[17638]: (postgres) CMD (pg_dump DB_NAME > /path/to/dumps/`date +) 它看起来像百分号的问题,但man页甚至没有包含百分比字符,所以我认为他们是没问题的。

X86 64位汇编Linux'Hello World'连接问题

我试图跟进这个线程 ,不幸的是不能解决我的问题。 我试图运行的代码如下所示: ; File hello.asm section .data msg: db "Hello World!",0x0a,0 section .text global main extern printf main: push rbp mov rbp, rsp lea rdi, [msg] ; parameter 1 for printf xor eax, eax ; 0 floating point parameter call printf xor eax, eax ; returns 0 pop rbp ret 我的系统是debian stretch: $ uname […]

nohup如何工作?

当一个程序运行nohup时,幕后执行的是什么? 父进程的PID是否被改变? 谢谢。 编辑 :我明白,nohup(和disown)导致SIGHUP不发送到进程,如果父进程收到它。 这是否意味着它相当于处理SIGHUP(实际上忽略它)?

使用排除列表查找在bash中查找的目录

现在,在你认为“之前已经完成”的情况下,请继续阅读。 和大多数试图findbash脚本的人一样,你最终将脚本硬编码为一行命令,但最终会在接下来的几个月/几年里编辑这个东西,所以你最终希望你做对了第一次。 我正在编写一个小的备份程序来做备份目录,并且需要find它们,而不是需要排除的directorie列表。 说起来容易做起来难。 让我来设置舞台: #!/bin/bash BasePath="/home/adesso/baldar" declare -a Iggy Iggy=( "/cgi-bin" "/tmp" "/test" "/html" "/icons" ) IggySubdomains=$(printf ",%s" "${Iggy[@]}") IggySubdomains=${IggySubdomains:1} echo $IggySubdomains exit 0 现在在这个结尾你得到/ cgi-bin,/ tmp,/ test,/ html,/图标这certificate了这个概念的作用,但现在需要进一步我需要使用find来searchBasePath并search只有一个级别的所有子目录,并排除列表中的子目录… 如果我手工input它将是: find /var/www/* \( -path '*/cgi-bin' -o -path '*/tmp' -o -path '*/test' -o -path '*/html' -o -path '*/icons' \) -prune -type d 我应该也许想循环到每个子目录,并做同样的事情…我希望你明白我的观点。 所以我试图做的似乎是可能的,但我有一个问题, printf“,%s”不喜欢我使用所有这些发现-path或-o选项。 […]

广播UDP数据包到255.255.255.255

第一次海报,希望这是一个容易的: 我需要将广播数据包发送到一个硬件,当它通电时,它与我的机器位于不同的子网上,以便告诉它把IP地址重置为我networking上的IP地址。 但是,除非我使用DHCP,否则我似乎无法通过自己的子网进行广播,而最终我无法做到这一点。 networking上没有路由器,只是简单地在我的机器和我正在试图交谈的盒子之间切换,另外还有一些networking上的其他Linux机器。 所以基本上这个例子代码在testing环境(在我有DHCP启用的一个更大的networking上)在Fedora 19上工作,直到我尝试静态设置我的IP地址: int main(int argc, char *argv[]) { int sock; if( (sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) { perror("socket : "); return -1; } int broadcast = 1; if( setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) != 0 ) { perror("setsockopt : "); close(sock); return -1; } char *ip = "255.255.255.255"; char […]

MySQL服务器不能在Raspberry Pi上启动

我正在运行Debian Linux的Raspberry Pi。 我正在尝试安装MySQL服务器并运行它,这是我所做的: # sudo apt-get install mysql-server mysql-client php5-mysql 没有错误。 现在我重新启动系统,然后启动时,我得到: [FAIL] startpar: service(s) returned failure: mysql … failed! 我试了 # sudo service mysql start mysql: unrecognized service 最后我试了一下 # /etc/init.d; mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 我发现我in /var/run没有名为mysqld的文件夹。 但是我读到这里的sock文件应该是在第一次创build服务器时创build的? 你有什么build议吗?

在ELF二进制中导入名称

ELF格式在哪里存储导入函数的名称? 总是可以枚举所有的导入名称,比如PE可执行文件? 例如,如果一个二进制文件正在使用printf ,那么是否可以通过二进制本身的静态分析来告诉它呢?

只解压缩特定的扩展名

我有一个zip文件夹包含.jpg,.png,.gif图像的目录。 我想解压每个档案,只把图像放在一个文件夹中,档案的名称。 所以: files/archive1.zip files/archive2.zip files/archive3.zip files/archive4.zip 打开archive1.zip – 以sunflower.jpg,rose_sun.gif。 制作文件夹files / archive1 /并将图像添加到该文件夹​​,以便files / archive1 / folder1.jpg,files / archive1 / rose_sun.gif。 对每个存档执行此操作。 我真的不知道如何做到这一点,所有的build议都是值得欢迎的。 我有超过600个档案,一个自动解决scheme将是一个救生员,最好是一个Linux解决scheme。

为Qt应用程序创buildLinux安装

我只是用Qt Creator做了一个很棒的程序。 我对自己很满意。 如何将其从桌面移动到笔记本电脑? 那么,最好的方法是安装程序? 而对于Ubuntu,这是一个debian包吗? 我怎么做? 有人这样做,他们可以共享QT 4.5的模板文件吗? 谢谢, 麦克风