做数据库程序或者IO密集型的程序的时候,通常在更新的时候,比如说数据库程序,希望更新有一定的安全性,我们会在更新操作结束的时候调用fsync或者fdatasync来flush数据到持久设备去。而且通常是以页面为单位,16K一次或者4K一次。
安全性保证了,但是性能就有很大的损害。而且我们更新的时候,通常是更新文件的某一个页面,那么由于是更新覆盖操作,对文件系统的元数据来讲的话,无需变更,所以我们通常不大关心元数据是否写入。 当更新非常频繁的时候,我们时候能够有其他方法减少性能损失。则可以采用sync_file_range函数---在内核2.6.17及更高版本上mansync_file_range后给出如下描述
sync_file_range - sync a file segment with disk
SYNOPSIS
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <fcntl.h>
int
sync_file_range(int fd, off64_t offset, off64_t nbytes,unsigned int flags);
DESCRIPTION
sync_file_range() permits fine control when synchronizing the open file referred to by
the file descriptor fd with disk.
offset is the starting byte of the filerange to be synchronized. nbytes specifiesthe
length of the range to be synchronized, in bytes; if nbytes is zero, then all bytesfrom offset through to the end of file aresynchronized.
Synchronization is in units
======================================================================================================
wget-the non-interactive network downloader(非交互网络下载器)
wget支持协议有:http;https ; ftp;还有http代理的下载
wget
wget能够跟踪HTML文件和XHTML文件,从而使得你可以下载整个站点的文件,然后离线阅读。当然这个功能并不是特别常用,因为几乎所有站点都会包含外链,一旦你用wget进行整站的下载,它也会傻傻的去下载外链站点的内容,这样一来,子子孙孙无穷尽也。
wget是个非常遵守Robot Exclusion Standard(robots.txt)标准的工具。
wget支持慢速网络下载和不稳定网络的下载。当因为网络不稳定而导致下载失败时,wget会重试直到把目标文件下载下来为止。
wget支持断点续传功能,当你下载的很大的文件在中途失败时,这项功能会很有用处
wget是使用getopt函数来处理选项和参数的因此wget既支持长格式的选项,也支持短格式的选项,他们大部分是一一对应的关系
当你使用wget时,请务必查看/etc/wgetrc文件和家目录下的.wgetrc文件,先搞清楚里面都设置了什么,再来使用wget命令不迟 某些选项还可以接受用逗号隔开的参数。比如-X(大写的x)选项,它是用来设定“不希望下载”的目录列表。你可以用逗号把不希望下载的目录一个一个写上;
.wgetrc和-X和/etc/wgetrc的设置都是属于平等关系,三者在使用时会进行并集。而在设置了-X ”时,就完全去掉了.wgetrc和/etc/wgetrc对于目录限制的作用
使用-background!启动的wget会立即进入后台执行
===================================================================================================================================
程序员需要了解的Linux命令
man touch, cat and less sort and grep cut sed tar find diff uniq chmod
touch命令可以在Linux系统中创建大小为0的任意类型文件
cat命令用来查看文件的内容,但是使用cat命令并不能编辑文件的内容,它仅仅是可以浏览文件内容。cat命令不支持键盘上下键翻页。
同样的less命令也可以让你浏览文件,less命令非常快,并且支持上下键查看文件的开头和末尾。然而more命令和它类似,只是more命令只能用enter键实现文件的向前翻页,不支持回退
ort命令用来对文件内容进行排序。创建一个名为test.txt的文件,并且把以下内容拷贝到该文件中:
1 mike level intermediate jan 10 lucy level beginer mar 45 Dave level expert dec 4 dennis start beginner jul 7 Megan employee trainee feb 58 Mathew Head CEO nov
上面的例子中,第二列是名称,所以如果你想对名称列按字母排序,就可以使用“-k”选项,并标注列号,比如“-k2”:
语法: sort sort -k2 test.txt
排序结果
root@devopscube:~# sort -k2 test.txt 45 Dave level expert dec 4 dennis start beginner jul 10 lucy level beginer mar 58 Mathew Head CEO nov 7 Megan employee trainee feb 1 mike level intermediate jan
第一列是数字,如果你想按数字排序,可以使用“-h”选项。如果数字在不同列上,你可以在“-h”选项后使用“-k”选项:
root@devopscube:~# sort -h test.txt 1 mike level intermediate jan 4 dennis start beginner jul 7 Megan employee trainee feb 10 lucy level beginer mar 45 Dave level expert dec 58 Mathew Head CEO nov
最后一列是月份,你可以使用“-M”选项来让文件内容按月份排序:
root@devopscube:~# sort -k5 -M test.txt 1 mike level intermediate jan 7 Megan employee trainee feb 10 lucy level beginer mar 4 dennis start beginner jul 58 Mathew Head CEO nov 45 Dave level expert dec
注:如果你想消除重复的行,可以在sort命令后使用“-u”选项。
使用“-r”选项,是文件倒序排列:
root@devopscube:~# sort -h -r test.txt 58 Mathew Head CEO nov 45 Dave level expert dec 10 lucy level beginer mar 7 Megan employee trainee feb 4 dennis start beginner jul 1 mike level intermediate jan
Grep命令:
Grep命令非常强大,系统管理员经常会用到它。grep命令可以在文件中搜索指定格式的字符串,同时对其进行标准输出。
语法: grep "<search string>" <filename> grep "Mathew" test.txt
root@devopscube:~# grep "dennis" test.txt 4 dennis start beginner jul
上面命令的输出结果是包含该子字符串的,如果你想检索完整的单词,你需要添加“-i”选项。同时,也可以用grep命令在多个文件中搜索字符串,命令代码如下:
grep "dennis" test1.txt test2.txt test3.txt
当然你也可以用正则表达式来匹配字符串。
4、cut命令
cut命令可以让你用列或者分隔符提取文件中的指定部分。如果你要列出文件中某列的全部内容,可以使用“-c”选项。例如,下面将从test.txt文件中提取第1、2列的全部内容。
cut -c1-2 test.txt
root@devopscube:~# cut -c1-2 test.txt 1 10 45 4 7 58
如果你希望从文件中提取指定的字符串,那么你可以使用分隔符选项“-d”和“-f”选项选中列。例如,我们可以利用cut命令提取names列:
cut -d' ' -f2 test.txt
root@devopscube:~# cut -d' ' -f2 test.txt mike lucy Dave dennis Megan Mathew
下面的例子从/etc/passd file中提取users列:
cut -d':' -f1 /etc/passwd
5、sed命令
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
如果你想通过搜索替换文件中的指定内容,你可以使用“s”选项来检索到它然后将它替换。
语法: sed 's/<old-word>/<new-word>/' test.txt
例如,在test.txt文件中用“michael”替换“mike”:
sed 's/mike/michael/' test.txt
root@devopscube:~# sed 's/mike/michael/' test.txt 1 michael level intermediate jan 10 lucy level beginer mar 45 Dave level expert dec 4 dennis start beginner jul 7 Megan employee trainee feb 58 Mathew Head CEO nov
6、tar命令
tar命令用来压缩和解压缩文件,其中经常会用到“-cf”和“-xf”选项。
语法: tar <options> <archive-name> <file/folder name>
让我们将test.txt文件打包:
tar -cf test.tar test.txt
root@devopscube:~# tar -cf test.tar test.txt root@devopscube:~# ls test.tar test.txt
用“-C”选项将刚才打包好的test.tar文件解压缩至“demo”目录:
tar -xf test.tar -C /root/demo/
root@devopscube:~# tar -xf test.tar -C /root/demo/ root@devopscube:~# cd demo/ root@devopscube:~/demo# ls test.txt
7、find命令
find命令用来检索文件,可以用“-name”选项来检索指定名称的文件:
find -name find -name test.txt
root@devopscube:/home/ubuntu# cd ~ root@devopscube:~# find -name test.txt ./demo/test.txt ./test.txt
你也可以用“/ -name”来检索指定名称的文件夹:
find / -name passwd
root@devopscube:~# find / -name passwd /etc/cron.daily/passwd /etc/pam.d/passwd /etc/passwd /usr/share/lintian/overrides/passwd
8、diff命令
diff命令用来找出2个文件的不同点。diff命令通过分析文件内容,然后将不同的行打印出来,下面的例子可以找出两个文件test和test1的不同点:
语法: diff <filename1> <filename2> diff test.txt test1.txt
root@devopscube:~# diff test.txt test1.txt 7c7 < 59 sdfsd --- > 59 sdfsd CTO dec
9、Uniq命令
uniq命令用来过滤文件中的重复行:
语法: uniq uniq test.txt
root@devopscube:~# uniq test.txt 1 mike level intermediate jan 10 lucy level beginer mar 45 Dave level expert dec 4 dennis start beginner jul 7 Megan employee trainee feb 58 Mathew Head CEO nov
10、chmod命令
chmod命令用来改变文件的读/写/执行权限,权限数值如下所示:
4 - read permission 2 - write permission 1 - execute permission 0 - no permission
下面的命令可以给test.txt文件赋最高的权限:
chmod 755 test.txt