Articles of Linux操作系统

为什么读取文件再读取速度更快?

SIZE = 1<<16 def justread(file): with open(file, 'rb') as f: while f.read(SIZE): pass 我第一次在一个700MB的文件上运行这个function需要19秒。 当我重复 再次读取相同的文件所花费的时间下降到0.5secs。 我用很多文件重复了这一点,结果是相似的。 这里发生了什么?

在Linux上编译一个基本的OpenCV + Cuda程序

我曾经在linux上使用过opencv,但是没有使用cuda。 我已经努力了几个月的以下编译错误。 在尝试了许多解决scheme后,我放弃了使用windows。 不过,我真的想在Linux上工作。 这是我用来编译opencv_gpu网站上给出的阈值示例的命令。 nvcc `pkg-config –libs opencv` -L. -L/usr/local/cuda/lib -lcuda -lcudart `pkg-config –cflags opencv` -I. -I/usr/local/cuda/include threshold.cpp -o threshold 这里是错误的: /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `main': threshold.cpp:(.text+0x124): undefined reference to `cv::gpu::Stream::Null()' threshold.cpp:(.text+0x156): undefined reference to `cv::gpu::threshold(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, int, cv::gpu::Stream&)' threshold.cpp:(.text+0x16d): undefined reference to `cv::gpu::GpuMat::download(cv::Mat&) const' /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `cv::gpu::GpuMat::GpuMat(cv::Mat const&)': threshold.cpp:(.text._ZN2cv3gpu6GpuMatC1ERKNS_3MatE[cv::gpu::GpuMat::GpuMat(cv::Mat const&)]+0x63): […]

将dateredirectstderr以从Cronlogging文件

一个bash脚本从cron运行,stderr被redirect到一个日志文件,这一切工作正常。 代码是: */10 5-22 * * * /opt/scripts/sql_fetch 2>> /opt/scripts/logfile.txt 我想在日志文件的每一行添加date,这是行不通的, 代码是: */10 5-22 * * * /opt/scripts/sql_fetch 2>> ( /opt/scripts/predate.sh >> /opt/scripts/logfile.txt ) predate.sh脚本如下所示: #!/bin/bash while read line ; do echo "$(date): ${line}" done 所以第二个代码不起作用,有人可以点亮一下吗? 谢谢。

OpenSuse – RubyGems安装 – 错误的文件名称

我有一个全新的安装OpenSuse 13.1安装。 ruby -v – > ruby 2.0.0p247 (2013-06-27) [x86_64-linux] gem -v – > 2.3.0 运行gem env输出如下: EXECUTABLE DIRECTORY : /usr/bin 。 这也是我的$PATH 。 我尝试按照安装指南中的描述安装sass和compass : sudo gem install sass sudo gem install compass (我需要使用sudo因为它没有工作) 唯一的问题:既不运行sass命令也不运行compass 。 过了一会儿,我发现我不得不使用sass2.0和compass2.0来运行它们。 /usr/bin中的ruby脚本在文件名末尾用2.0命名。 为什么最后用2.0命名的ruby脚本? 我怎样才能防止这个? 我想在terminal使用compass和sass 。 我没有得到任何使用谷歌的结果。

是否可以在kubuntu12.04(xubuntu)中构buildAOSP项目(姜饼)?

我使用旧版本的Android(姜饼2.3.4)。 为了开发这些版本,我现在使用Ubuntu 10.04。 同时,我想用更新的版本:12.04或者12.10。 它写在这里 : 在Ubuntu 12.04的基础上,目前只有实验性的支持,并不能保证在除了master之外的分支上工作。 所以这里是我的问题,有没有人试图在Ubuntu 12.04上构build旧版本的Android? 我不喜欢新的统一接口,所以我也考虑xfce或kde。 这就是为什么这里是第二个问题,如果我改变窗口系统,我会不会有任何麻烦?

如何使用sed更改文件扩展名?

我必须做一个sed行(在Linux中也使用pipe道)来更改文件扩展名,所以我可以做一些mv *.1stextension *.2ndextension如mv *.txt *.c 。 问题是我不能使用批处理或for循环,所以我必须使用pipes和sed命令来完成所有操作。

如何replace一堆文件中的多行string

#!/bin/sh old="hello" new="world" sed -is/"${old}"/"${new}"/g $(grep "${old}" -rl *) 前面的脚本只适用于单行文本,我怎么写一个脚本可以replace多行文本。 old='line1 line2 line3' new='newtext1 newtext2' 我可以使用什么命令。

Java的'tnameserv'需要3分钟以上才能“准备就绪”,为什么呢?

我试图帮助一个应用程序的开发,我想在Linux上使用Corba服务器来解决问题。 我把这个问题缩小了3分钟,以便在调用之后做好准备。 tnameserv在3分钟内试图做什么,无论如何我可以加快速度? 应用程序失败,因为它试图在重试之间进行5次连接尝试,间隔1秒; 这显然没有给tserverserv足够的时间做好准备。 我在Slackware 13.0上使用Java 6u17 如果重要的话。 tnameserv的实际调用如下: tnameserv -ORBInitialPort 23423 在shell中运行该命令时,它似乎挂起,直到3分钟左右,我终于看到它显示“就绪”。 UPDATE 我做了一个strace -f tnameserv -ORBInitialPort 23423 ,我看到了gettimeofday(),clock_gettime()和futex()的调用,后者总是返回'-1 ETIMEDOUT(Connection timed out)。 我有一种感觉,这是与我的问题有关,但我不知道如何或为什么。 这只是我从strace中看到的一小部分。 有人可以复制和/或理解这个吗? [pid 30950] futex(0x8128e14,FUTEX_WAIT_PRIVATE,1,{0,49903084})= -1 ETIMEDOUT(连接超时) [pid 30950] futex(0x8098a28,FUTEX_WAKE_PRIVATE,1)= 0 [pid 30950] clock_gettime(CLOCK_MONOTONIC,{329619,995857482})= 0 [pid 30950] gettimeofday({1260930158,92108},NULL)= 0 [pid 30950] clock_gettime(CLOCK_MONOTONIC,{329619,995996617})= 0 [pid 30950] clock_gettime(CLOCK_MONOTONIC,{329619,996088536})= 0 [pid 30950] gettimeofday({1260930158,92328},NULL)= […]

free()是否删除存储在dynamic分配内存中的数据?

我写了一个简单的程序来testingfree()后的dynamic分配内存的内容,如下所示。 (我知道我们不应该在空闲后访问内存,我写了这个来检查空闲内存后会有什么内容) #include <stdio.h> #include <stdlib.h> main() { int *p = (int *)malloc(sizeof(int)); *p = 3; printf("%d\n", *p); free(p); printf("%d\n", *p); } 输出:3 0 我以为它会打印垃圾值或第二次打印声明崩溃。 但它总是打印0。 1)这种行为是否依赖于编译器? 2)如果我试图释放内存两次释放(),核心转储正在生成。 在手册页中提到程序行为是exception的。 但是我总是得到核心转储。 这种行为是否也依赖于编译器?

套接字关机和重新绑定 – 如何避免漫长的等待?

我正在使用Python中的套接字,并在开发阶段,我需要杀死并频繁地重新启动我的程序。 问题是,一旦我的Python脚本死亡,我必须等待很长时间才能重新绑定侦听套接字。 这是一个重现问题的片段: #!/usr/bin/env python3 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((socket.gethostname(), 4321)) try: s.listen(5) while True: (a, b) = s.accept() print(a.recv(1000)) except KeyboardInterrupt: print("Closing") s.shutdown(socket.SHUT_RDWR) s.close() 打到Cz运行除了代码,调用shutdown和closefunction,但我不能重新启动我的程序,直到套接字超时(GNU / Linux环境)。 我怎样才能避免这一点?