Linux基础
- /etc/passwd 和 /etc/shadows 详解
- passwd文件举例
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin
对应字段
- shadow文件
root:$6$X9iEgIhv$wGtrUhjiNRp72LgCTzC1qdi.myfSU9S5nqsfr.m1KInUFoeOUBN73AmMy5sTe91biJLdHgsoimZQzeD9EvGlv1:16769:0:99999:7::: daemon:*:16547:0:99999:7::: bin:*:16547:0:99999:7::: sys:*:16547:0:99999:7::: sync:*:16547:0:99999:7::: games:*:16547:0:99999:7::: man:*:16547:0:99999:7:::
- passwd文件举例
-
软连接
- 文件分为:
用户数据(user data):即文件数据块(data block),记录文件真实内容的地方 元数据(metadata):文件的附加属性,如文件大小、创建时间、所有者信息。其中的`inode`号即为文件的唯一标志
- 硬链接(hard link):同一个文件使用了多个别名,即一个inode号对应多个文件名,可由link或ln创建
文件有相同的 inode 及 data block; 只能对已存在的文件进行创建; 不能交叉文件系统进行硬链接的创建; 不能对目录进行创建,只可对文件创建; 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
- 软链接(soft link or symbolic link):若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软链接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块
软链接有自己的文件属性及权限等; 可对不存在的文件或目录创建软链接; 软链接可交叉文件系统; 软链接可对文件或目录创建; 创建软链接时,链接计数 i_nlink 不会增加; 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
- 文件分为:
- shell
- 新浪的一道笔试题:
找出web日志中响应时间小于0.03的客户端IP并去重: 201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.015" 201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.002" 201.158.69.116 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.039" 201.158.69.118 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.015" 201.158.69.119 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.015" 201.158.69.119 - - [03/Jan/2013:21:17:20 -0600] "GET /api/insert?test=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" "114.229.23.58" "0.030"
解析:
cat log | awk '{if($NF<0.03) print $1}' | sort -u //这样写的话最后一位是str类型,无法做数值比较,应该是扑街了 cat log | awk 'BEGIN{FS="\""} $8 > 0.03 {print $1}' | awk '{print $1}' //大神指导我的第一版本,以"\""为分隔符 cat log | awk '{if(strtonum(substr($NF,2,5))<0.03) print $1}' | sort -u //大神指导的第二版本,很优雅啦~
- 新浪的一道笔试题:
- 进程与线程的区别
- 进程是指程序执行时的一个实例。线程是进程的一个实体。
- 进程——资源分配的最小单位;线程——程序执行的最小单位,处理机调度和分配的单位。
- 进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,但是安全性高;线程拥有独立的堆栈空间,但是共享数据段,它们彼此之间使用相同的地址空间,共享大部分数据,比进程更节俭,开销比较小,切换速度也比进程快,效率高,但是一个线程死掉就等于整个进程死掉。
- 通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便
- 一个线程可以创建另一个线程。线程是不分父子线程的,一个线程创建另一个线程,尽管第一个线程已经结束,第二个线程还是可以照常运行。
- 运行在一个进程里的线程共享该进程的整个虚拟地址空间