常见问题集锦
Linux进程间通信(IPC,Inter-Process Communication)方式
管道 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
命名管道 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
信号 信号是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生。当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断。
消息队列 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。和信号相比,消息队列能够传递更多的信息。与管道相比,消息队列提供了有格式的数据,这可以减少开发人员的工作量。消息队列仍然有大小限制。
套接字 套解口也是一种进程间通信机制,与其他通信机制不同的是它可用于不同及其间的进程通信。
共享内存 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
远程进程调用
linux文件系统为索引式文件系统(indexed allocation),磁柱是分割槽的最小单位,第一个扇区里面有MBR(446Bytes)及磁盘分割表(64Bytes)。 在Linux下的 ext2 文件系统建立一个目彔时, ext2 会分配一个 inode 和至少一块 block 给该目彔。其中,inode 记彔该目彔的相关权限不属性,并可记彔分配到的那块 block 号码; 而 block 则是记彔在这个目彔下的文件名不和该文件名占用的 inode 号码数据。
nginx默认的欢迎页面 /usr/share/nginx/www/index.html,修改www路径sudo vi /etc/nginx/sites-available/default
增加location ~ http://stackoverflow.com/questions/15852884/nginx-connect-failed-error sudo vim /etc/nginx/sites-available/default
光标移动:
w光标以单词向前移动, nw向前移动n个单词,落在单词第一个字母上
b光标以单词向后移动, nb向后移动n个单词,落在单词第一个字母上
e光标以单词向前移动, ne向前移动n个单词,落在单词最后一个字母上
ge光标以单词向后移动, nge向后移动n个单词,落在单词最后一个字母上
单词:全字母或全中文(每个标点符号都是分隔符,标点符号的组合也是分隔符)
安装squid3
http://forum.ubuntu.org.cn/viewtopic.php?t=107488
http://raysmond.com/?q=zh-hans/article/79
http://forum.ubuntu.org.cn/viewtopic.php?t=107488
/etc/vim/vimrc中设置对系统所有用户有效,~/.vimrc对当前用户有效,~/.vimrc文件中的配置会覆盖/etc/vimrc中的配置。http://blog.carlcarl.tw/584/vim-neocomplcache-sudo-vim
vim打开一个文件时,其会产生一个filename.swap文件,用于保存数据,当文件非正常关闭时,可用此文件来恢复,当正常关闭时,此文件会被删除,非正常关闭时,不会被删除,所以提示存在.swap文件,此时你可以恢复文件:vim -r filename.c 恢复以后把.swap文件删掉,在打开时就不会用提示良,注意.swap文件是个隐藏文件。可用:la查看。以.开头的是隐藏文件。
.* 是一个字符循环0次或者很多次,多一个?在后面,意思是懒惰循环。
eg.对于字符串aaaaaaa, a*一下子很勤劳的把整个字符串都匹配完了,结果是aaaaaaa。a*? 很懒,发现匹配字符串中一个a后,就完成了匹配,就不用再继续尝试下去了,因此就第一次只匹配a,然后进行第二轮匹配了,还是只匹配一个a就结束。
EditPlus文件默认ANSI编码,xshell会话窗口编码默认不是UTF-8,所以EditPlus里的文件先修改编码为UTF-8,后通过xshell的sftp功能传送至服务器/var/www目录,本地默认目录为xshell.exe所在目录。
JRE就是java runtime environment。也就是java程序运行环境,它提供java程序运行所需的一些函数和资源。
JDK是java development kit的简称,主要是开发java程序的时候要用到。JDK是整个java的核心,它不但包括了java标准类库及java API,还包括了开发java程序所需的编辑、编译器等。
JRE顾名思义是JAVA程序要运行所需要的环境,所谓跨平台就是要各种平台都有一个中间代理,那就是JRE。JDK中包括了JRE,但是对于不需要开发只是运行的用户是可以只单独安装JRE的,所以sun提供了JRE下载。Ubuntu 配置JDK环境 http://www.cnblogs.com/fnng/archive/2013/01/30/2883815.html
bash启动配置文件 《鸟哥的Linux私房菜》p388
PCI 机箱 硬件 http://zh.wikipedia.org/wiki/%E7%94%B5%E8%84%91%E7%A1%AC%E4%BB%B6
X86结构是小端模式,http://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F
编码方案:
用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。GB2312支持的汉字太少。
1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
从ASCII、GB2312到GBK,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK都属于双字节字符集 (DBCS)。
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。从汉字字汇上说,GB18030在GB13000.1的20902个汉字的基础上增加了CJK扩展A的6582个汉字(Unicode码0x3400-0x4db5),一共收录了27484个汉字。CJK就是中日韩的意思。Unicode为了节省码位,将中日韩三国语言中的文字统一编码。GB13000.1就是ISO/IEC 10646-1的中文版,相当于Unicode 1.1。
GB18030的编码采用单字节、双字节和4字节方案。其中单字节、双字节和GBK是完全兼容的。4字节编码的码位就是收录了CJK扩展A的6582个汉字。例如:UCS的0x3400在GB18030中的编码应该是8139EF30,UCS的0x3401在GB18030中的编码应该是8139EF31。
Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"UniversalMultiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode CharacterSet"的缩写。Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容)
UCS只是规定如何编码,并没有规定如何传输、保存这个编码。例如“汉”字的UCS编码是6C49,我可以用4个ascii数字来传输、保存这个编码;也可以用utf-8编码:3个连续的字节E6 B189来表示它。关键在于通信双方都要认可。UTF-8、UTF-7、UTF-16都是被广泛接受的方案。UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。UTF是“UCS Transformation Format”的缩写。
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:1110011010110001 10001001,即E6 B1 89。