Menu

  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay
  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay

Linux目录层次和配置文件

13
Jul
2012

Linux目录层次和配置文件

By Alex
/ in Linux
/ tags Linux知识
0 Comments
/

唯一的根目录,没有Windows的盘符概念。根目录下的任何一个子目录都可以作为一个挂载点(mount point)来挂载某个文件系统(例如分区)。

/proc

即procfs,包含系统中正在运行的进程的映射文件,以及对应其它功能的若干子目录。

/proc/uptime

自从上次系统自举以来的秒数,以及其中有多少秒处于空闲。这主要供uptime程序使用。比较这两个数字能够告诉你长期来看CPU周期浪费的比例。

/proc/version

操作系统的相关信息

/proc/cmdline

这个文件给出了内核启动的命令行。它和用于进程的cmdline项非常相似。

/proc/modules

可加载内核模块的信息。lsmod程序用这些信息显示有关模块的名称,大小,使用数目方面的信息。

/proc/cpuinfo

包含CPU的详细信息

/proc/meminfo

内存状态的信息。它显示出系统中空闲内存,已用物理内存和交换内存的总量。它还显示出内核使用的共享内存和缓冲区总量。这些信息的格式和free命令显示的结果类似。

/proc/kcore

系统的物理内存以core文件格式保存的文件。例如,GDB能用它考察内核的数据结构。它不是纯文本,而是/proc目录下为数不多的几个二进制格式的项之一。

/proc/cgroups

本系统上已知的Cgroups的信息

/proc/devices

列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。

/proc/mounts

指向/proc/self/mounts

已经挂载的文件系统的信息,这个文件以/etc/mtab文件的格式给出当前系统所安装的文件系统信息。这个文件也能反映出任何手工安装从而在/etc/mtab文件中没有包含的文件系统。

/proc/partitions

块设备分区使用情况

/proc/filesystems

列出可供使用的文件系统类型,一种类型一行。虽然它们通常是编入内核的文件系统类型,但该文件还可以包含可加载的内核模块加入的其它文件系统类型。

/proc/net

指向/proc/self/net,此目录下的文件描述或修改了联网代码的行为。可以通过使用arp,netstat,route和ipfwadm命令设置或查询这些特殊文件中的许多文件。

文件 说明
/proc/net/arp 转储每个网络接口的arp表中dev包的统计
/proc/net/dev 来自网络设备的统计
/proc/net/dev_mcast  列出二层(数据链路层)多播组
/proc/net/igmp 加入的IGMP多播组
/proc/net/netlink netlink套接字的信息
/proc/net/netstat 网络流量的多种统计。第一行是信息头,带有每个变量的名称。接下来的一行保存相应变量的值
/proc/net/raw 原始套接字的套接字表
/proc/net/route 静态路由表
/proc/net/rpc 包含RPC信息的目录
/proc/net/rt_cache 路由缓存
/proc/net/snmp snmp agent的ip/icmp/tcp/udp协议统计,各行交替给出字段名和值
/proc/net/sockstat 列出使用的tcp/udp/raw/pac/syc_cookies的数量
/proc/net/tcp TCP连接的套接字
Shell
1
2
3
4
5
cat /proc/2177/net/tcp | grep 102681918
#  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt  
   0: 00000000:18EB 00000000:0000 0A 00000000:00000000 00:00000000 00000000    
#  uid  timeout inode                                                    
   0        0 102681919 1 ffff8d5ff6b45540 100 0 0 10 0
/proc/net/udp UDP连接的套接字表
/proc/net/unix UNIX域套接字的套接字表
/proc/sys

包括所有的内核运行时参数信息,某些文件支持写操作。

这些文件和内核参数相互对应,所有内核参数参考:Linux知识集锦。

/proc/sys/fs

文件系统相关参数:

参数 说明
file-max 系统范围(全局总和)的文件句柄(描述符)数量限制
/proc/sys/net

这个目录下的某些文件被网络命名空间隔离。

网络相关参数:

参数 说明
netfilter/nf_log_all_netns

默认情况下,来自容器(非全局网络命名空间)的iptable logging被忽略,你无法在 dmesg -w中看到

设置该参数为1改变此行为

 

ipv4/conf/*/route_localnet 允许转发目的或源地址为127.0.0.0/8的数据包,也就是来自或去往lo设备的数据包。这样,你就可以使用NAT强制将目的地址是127.0.0.1的封包的目的地址修改为其它值
ipv4/conf/*/accept_local 设置为1,则接受源地址是本地IP的封包。必须配合rp_filter为非0才能工作
ipv4/conf/*/rp_filter 设置为0,不进行源地址校验
ipv4/conf/*/arp_ignore IPVS的DR模式下,每个真实服务器节点都要在环回网卡上绑定VIP。如果客户端对于VIP的ARP请求广播到了各个真实服务器节点,当:
  1. arp_ignore=0,则各个真实服务器节点都会响应该arp请求,此时客户端就无法正确获取LVS(LB)节点上正确的VIP所在网卡的MAC地址。客户端可能将以太网帧绕过LB直接发给RS
  2. arp_ignore=1,只响应目的IP地址为接收网卡上的本地地址的arp请求

 

IPVS的DR模式下要求arp_ignore参数配置为1

ipv4/conf/*/arp_announce 每台服务器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当
  1. 收到一个未知IP地址的arp请求,就会在本机的arp表中新增对端的IP和MAC记录
  2. 当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表

如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。

IPVS的DR模式下要求arp_announce参数配置为2

ipv4/conf/*/send_redirects 是否启用ICMP重定向
ipv4/ip_local_port_range 发起连接时,本地端口范围
ipv4/tcp_keepalive_time TCP保活,记时器触发延迟
ipv4/tcp_keepalive_intvl TCP保活,保活封包发送间隔
ipv4/tcp_keepalive_probes TCP保活,保活封包发送次数
   
/proc/loadavg

给出以几个不同的时间间隔计算的系统平均负载,这就如同uptime命令显示的结果那样。前三个数字是平均负载。这是通过计算过去1分钟,5分钟,15分钟里运行队列中的平均任务数得到的。随后是正在运行的任务数和总任务数。最后是上次使用的进程号。

/proc/stat

这个文件包含的信息有CPU利用率,磁盘,内存页,内存换页,中断信息。

/proc/vmstat

vmstat 命令信息来源之一。

/proc/$PID

指向进程映射目录,其下的子文件包含了进程的详细信息。

文件 说明
/proc/$PID/cmdline

包含进程的完整命令行信息。如果这个进程是zombie进程,则这个文件没有任何内容

/proc/$PID/root 进程的root目录符号链接
/proc/$PID/cwd 当前工作目录的符号链接
/proc/$PID/comm 进程的名字
/proc/$PID/environ 进程的环境变量
/proc/$PID/exe 进程的二进制文件的符号链接
/proc/$PID/fd

进程的打开文件

Shell
1
2
3
4
5
6
7
8
9
10
ls -la /proc/2177/fd
total 0
dr-x------ 2 root root  0 Feb 23 21:23 .
dr-xr-xr-x 9 root root  0 Feb 23 21:23 ..
lrwx------ 1 root root 64 Feb 23 21:23 0 -> /dev/null
l-wx------ 1 root root 64 Feb 23 21:23 1 -> pipe:[102672120]
# 当创建好epoll句柄后,它就是会占用一个fd值,所以在使用完epoll后,必须调用close()关闭
lrwx------ 1 root root 64 Feb 23 21:23 13 -> anon_inode:[eventpoll]
# 最后的数字是套接字的inode号
lrwx------ 1 root root 64 Feb 23 21:23 83 -> socket:[102681918]

从这里可以得到套接字的inode号,并进而查询套接字的详细信息:

Shell
1
cat /proc/2177/net/tcp | grep 102681918
/proc/$PID/net 参考/proc/net
/proc/$PID/io 进程的IO信息 
/proc/$PID/limits 进程的资源配额
/proc/$PID/maps 进程的内存映射信息
/proc/$PID/stack 显示当前进程的内核调用栈信息,只有内核编译时打开了 CONFIG_STACKTRACE编译选项,才会生成这个文件
/proc/$PID/mountinfo 进程所属mount命名空间的挂载信息
/proc/$PID/mounts
/proc/$PID/mountstats
/proc/$PID/cgroup

显示某个进程所属的进程组。输出 / 表示进程没有划分到特定的Cgroups

$PID是进程的ID,关键字 self表示当前进程。

/proc/$PID/ns

每个进程都有这样的一个目录,里面存放若干符号连接,提示进程所属的各种命名空间: 

Shell
1
2
3
4
5
6
7
ls -la /proc/self/ns
lrwxrwxrwx 1 alex alex 0 Nov 16 20:32 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 alex alex 0 Nov 16 20:32 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 alex alex 0 Nov 16 20:32 net -> net:[4026531968]
lrwxrwxrwx 1 alex alex 0 Nov 16 20:32 pid -> pid:[4026531836]
lrwxrwxrwx 1 alex alex 0 Nov 16 20:32 user -> user:[4026531837]
lrwxrwxrwx 1 alex alex 0 Nov 16 20:32 uts -> uts:[4026531838]

如果两个进程指向同一符号连接(方括号内的inode相同),则它们属于同一命名空间

只要/proc/$PID/ns下的文件被打开(例如进行bind挂载),则相应的命名空间就会存在,即使命名空间内没有任何进程

/proc/$PID/net 进程使用的网络内核参数
/proc/$PID/stat 

包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻

Shell
1
2
3
4
5
19211 (docker-proxy) S 18582 18582 18582 0 -1 1077936384 400 0 24 0 385
870 0 0 20 0 5 0 1476270373 111624192 397 18446744073709551615 94908437864448
94908439349548 140733819451920 140733819451256 94908438772659 0 2079996453 0
2143420159 0 0 0 17 0 0 0 16 0 0 94908441446824 94908442361816 94908444303360
140733819457191 140733819457307 140733819457307 140733819457506 0
  1. pid=19211 进程(包括轻量级进程,即线程)号
  2. comm=docker-proxy 应用程序或命令的名字
  3. task_state=R 任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
  4. ppid=6723 父进程ID
  5. pgid=6873 线程组号
  6. sid=6723 c该任务所在的会话组ID
  7. tty_nr=34819(pts/3) 该任务的tty终端的设备号,INT(34817/256)=主设备号,(34817-主设备号)=次设备号
  8. tty_pgrp=6873 终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell 应用程序)的PID。
  9. task->flags=8388608 进程标志位,查看该任务的特性
  10. min_flt=77 该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数
  11. cmin_flt=0 累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目
  12. maj_flt=0 该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数
  13. cmaj_flt=0 累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目
  14. utime=1587 该任务在用户态运行的时间,单位为jiffies
  15. stime=1 该任务在核心态运行的时间,单位为jiffies
  16. cutime=0 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies
  17. cstime=0 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies
  18. priority=25 任务的动态优先级
  19. nice=0 任务的静态优先级
  20. num_threads=3 该任务所在的线程组里线程的个数
  21. it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.
  22. start_time=5882654 该任务启动的时间,单位为jiffies
  23. vsize=1409024(page) 该任务的虚拟地址空间大小
  24. rss=56(page) 该任务当前驻留物理地址空间的大小
  25. rlim=4294967295(bytes) 该任务能驻留物理地址空间的最大值
  26. start_code=134512640 该任务在虚拟地址空间的代码段的起始地址
  27. end_code=134513720 该任务在虚拟地址空间的代码段的结束地址
  28. start_stack=3215579040 该任务在虚拟地址空间的栈的结束地址
  29. kstkesp=0 esp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.
  30. kstkeip=2097798 指向将要执行的指令的指针, EIP(32 位指令指针)的当前值.
  31. pendingsig=0 待处理信号的位图,记录发送给进程的普通信号
  32. block_sig=0 阻塞信号的位图
  33. sigign=0 忽略的信号的位图
  34. sigcatch=082985 被俘获的信号的位图
  35. wchan=0 如果该进程是睡眠状态,该值给出调度的调用点
  36. nswap 被swapped的页数,当前没用
  37. cnswap 所有子进程被swapped的页数的和,当前没用
  38. exit_signal=17 该进程结束时,向父进程所发送的信号
  39. task_cpu(task)=0 运行在哪个CPU上
  40. task_rt_priority=0 实时进程的相对优先级别
  41. task_policy=0 进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程 
/proc/$PID/statm 显示进程所占用内存大小的统计信息,包含七个值,度量单位是页:
Shell
1
2
# cat /proc/2948/statm  
72362 12945 4876 569 0 24665 0

七个字段分别表示:

  1. 进程占用的总的内存
  2. 进程当前时刻占用的物理内存
  3. 同其它进程共享的内存
  4. 进程的代码段
  5. 共享库(从2.6版本起,这个值为0)
  6. 进程的堆栈
  7. dirty pages(从2.6版本起,这个值为0)
/proc/$PID/status 进程状态信息
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Name:    dockerd    # 进程名
State:    S (sleeping)    # 进程状态
## R (running)", "S (sleeping)", "D (disk sleep)", "T (stopped)", "T(tracing stop)", "Z (zombie)", or "X (dead)"
Tgid:    18582    # 线程组的ID,一个线程一定属于一个线程组(进程组)
Ngid:    0
Pid:    18582    # 进程的ID,更准确的说应该是线程的ID
PPid:    1    # 当前进程的父进程ID
TracerPid:    0    # 跟踪当前进程的进程ID,如果是0,表示没有跟踪,例如用strace跟踪
Uid:    0    0    0    0
Gid:    0    0    0    0
# 第一列数字(RUID):实际用户ID,指的是进程执行者是谁.
# 第二列数字(EUID):有效用户ID,指进程执行时对文件的访问权限.
# 第三列数字(SUID):保存设置用户ID,作为effective user ID的副本,在执行exec调用时后能重新恢复原来的effectiv user ID.
# 第四列数字(FSUID):目前进程的文件系统的用户识别码.一般情况下,文件系统的用户识别码(fsuid)与有效的用户识别码(euid)是相同的.
# RUID和EUID是由启动进程的用户决定的
# EUID,如果程序设定了setuid,那么在程序运行时是用程序的owner权限来运行程序,而不是启动的用户权限
终端1)
FDSize:    128    # FDSize是当前分配的文件描述符,这个值不是当前进程使用文件描述符的上限.
# 而如果超过32个文件描述符,将以32进行递增,如果是64位系统,将以64进行递增.
# FDSize这个值不会减少,如果我们程序打开了300个文件,并不会因为关闭文件,而减少FDSize这个值.
Groups:    # 这里的groups表示启动这个进程的用户所在的组.
NStgid:    18582
NSpid:    18582
NSpgid:    18582
NSsid:    18582
VmPeak:      581816 kB    # 当前进程运行过程中占用内存的峰值
VmSize:      581752 kB    # 进程现在正在占用的内存
VmLck:           0 kB    # 进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘
VmPin:           0 kB
VmHWM:       89832 kB    # 得到分配到物理内存的峰值
VmRSS:       40128 kB    # 现在使用的物理内存
VmData:      476676 kB    # 进程数据段的大小
VmStk:         132 kB    # 进程堆栈段的大小.
VmExe:       47116 kB    # 进程代码的大小
VmLib:        6128 kB    # 进程所使用LIB库的大小
VmPTE:         396 kB    # 占用的页表的大小.
VmPMD:          24 kB
VmSwap:           0 kB    # 进程占用Swap的大小.
HugetlbPages:           0 kB
Threads:    12    # 表示当前进程组有12个线程.
SigQ:    0/7338    # 当前待处理信号的个数
SigPnd:    0000000000000000    # 屏蔽位,存储了该线程的待处理信号,等同于线程的PENDING信号
ShdPnd:    0000000000000000    # 屏蔽位,存储了该线程组的待处理信号.等同于进程组的PENDING信号
SigBlk:    0000000000000000    # 存放被阻塞的信号,等同于BLOCKED信号
SigIgn:    0000000000000000    # 存放被忽略的信号,等同于IGNORED信号
SigCgt:    ffffffffffc1feff    # 存放捕获的信号,等同于CAUGHT信号
CapInh:    0000000000000000    # 表示能够被当前进程执行的程序继承的能力
CapPrm:    0000003fffffffff    # 表示进程能够使用的能力,在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集
CapEff:    0000003fffffffff    # 当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0
CapBnd:    0000003fffffffff    # 是系统的边界能力,我们无法改变它
CapAmb:    0000000000000000
Seccomp:    0
Cpus_allowed:    1    # 指出该进程可以使用CPU的亲和性掩码,因为我们指定为两块CPU,所以这里就是3,如果该进程指定为4个CPU(如果有话),这里就是F(1111)
Cpus_allowed_list:    0    # 0-1指出该进程可以使用CPU的列表,这里是0-1
Mems_allowed:    00000000,00000001 # 通cpu
Mems_allowed_list:    0    # 通cpu,使用了结点0的内存资源
voluntary_ctxt_switches:    24243383    # 表示进程主动切换的次数.
nonvoluntary_ctxt_switches:    6102321    # 表示进程被动切换的次数
/proc/$PID/syscall 显示当前进程正在执行的系统调用
/proc/$PID/task 进程包含的的线程信息
/sys

即sysfs文件系统,包括系统所有的硬件信息以及内核模块等信息,映射了相关的kobject,该文件系统代替了以前需要ioctl(作用于一个设备节点)和procfs文件系统完成的功能。

该目录在2.6引入,解决/proc目录内容杂乱的问题。

/sys/fs/cgroup

代表了Cgroup的伪文件系统

/etc

存放系统或者应用的配置文件,etc即etcetera

受信任CA证书

CentOS系统的受信任证书存放位置: /etc/pki/ca-trust/source/anchors/,将你的证书存放到该目录后,需要执行 update-ca-trust更新受信任证书列表。

Ubuntu系统受信任证书存放在 /usr/local/share/ca-certificates/,将你的证书存放到该目录后,需要执行 update-ca-certificates更新受信任证书列表。

包管理器配置
APT相关
文件 说明 
/etc/apt/sources.list 存放软件源的列表
/etc/apt/sources.list.d/ 存放软件源的列表文件片段
/etc/apt/apt.conf APT配置文件
/etc/apt/apt.conf.d/ APT配置文件片段
/var/cache/apt/archives/ 下载文件的本地存储区域
/var/cache/apt/archives/partial/ 正在传输中的文件的本地存储区域
/var/lib/aptitude/pkgstates 存储软件包的状态、标记
YUM相关
文件 说明
/etc/yum.repos.d/ YUM仓库的配置
网络配置
 文件 说明 
/etc/hostname Debain主机名称配置,RedHat在/etc/sysconfig/network中配置
/etc/hosts 静态IP-域名映射配置
/etc/network/interfaces

Debian及其衍生系统的网络配置文件。
在桌面版的Ubuntu上,一般由网络管理器(Network Manager)组件负责管理网络,不需要手工修改此文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
auto lo
iface lo inet loopback
 
#第一张以太网卡的配置
auto eth0
iface eth0 inet dhcp
 
#第二张以太网卡的配置
auto eth1
iface eth1 inet static
  address 192.168.0.90
  netmask 255.255.255.0
  gateway 192.168.0.1
  #更改硬件地址
  hwaddress ether 10:1F:74:18:6A:47
  #设置DNS服务器
  dns-nameservers 178.79.131.110 223.5.5.5
  mtu 1380
#使用post-up命令可以更改路由
  post-up route add default gw 192.168.0.1
  post-up route del default dev $IFACE

修改完毕后执行 sudo service networking restart 可以立即生效。

要为单个网卡配置多重IP地址,可以参考:

1
2
3
4
5
6
7
8
9
10
11
12
auto eth0
allow-hotplug eth0
iface eth0 inet static
    address 192.168.1.42
    netmask 255.255.255.0
    gateway 192.168.1.1
 
auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
    address 192.168.1.43
    netmask 255.255.255.0
/etc/NetworkManager/NetworkManager.conf

Debian及其衍生系统上的网络管理组件,主要用于简化网络配置

如果要禁止网络管理器管理某个特定网络接口,配置:

/etc/NetworkManager/NetworkManager.conf
Shell
1
2
[keyfile]
unmanaged-devices=mac:d0:bf:9c:5d:31:d3

并重启网络管理器: sudo service network-manager restart ,然后你可以在NM的系统托盘区看到提示:device mot managed

/etc/init/failsafe.conf 可以用来修改网络配置失败时,等待的时间
/etc/sysconfig/network RedHat、CentOS的主机名和基本网络配置,格式如下:
1
2
3
4
5
6
7
# 是否启用网络
NETWORKING=yes
NETWORKING_IPV6=yes
# 设置主机名
HOSTNAME=xcentos6
# 设置网关
GATEWAY=192.168.1.1
/etc/sysconfig/network-scripts/ifcfg-eth0 RedHat、CentOS网络接口eth0的配置,格式如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DEVICE="eth0"
BOOTPROTO=none   # 可选值dhcp、static、none,分别表示启用DHCP、固定IP、手工配置
NM_CONTROLLED="yes"
ONBOOT=yes       # 网络接口是否随系统启动
TYPE="Ethernet"
UUID="557f0607-a29e-412e-8786-28269f0cd12f"
IPADDR=192.168.0.90
PREFIX=24
GATEWAY=192.0.0.168
DEFROUTE=yes     # 是否把此接口设置为默认路由
IPV4_FAILURE_FATAL=yes
IPV6INIT=no      # 是否启用IPv6
NAME="System eth0"
HWADDR=00:0C:29:39:6E:57

完毕后执行 /etc/init.d/network restart 即可生效

/etc/resolv.conf 包含DNS服务的配置:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 本地域,针对此域内的DNS名称,可以仅仅使用短名(前缀)进行查询
# 如果指定为.则使用根域
# 如果为空,则自动根据gethostname调用的结果获得本地域,取第一个.后的内容为本地域
domain gmem.cc
 
# DNS服务器的IP地址,最多可以指定MAXNS个DNS(当前3)
# 如果指定多个,会从上到下一个个尝试
# 如果不指定nameserver,则默认使用使用本机上的DNS服务器
nameserver 8.8.8.8
 
 
# 搜索后缀列表,对于针对少于ndots(默认1)个.号的名字的DNS查询,会自动尝试添加这些后缀进行查询
search devops.svc.k8s.gmem.cc svc.k8s.gmem.cc k8s.gmem.cc
 
# 选项
options ndots:n     # 使用search作为后缀的阈值
        timeout:n   # 超时,单位秒,默认5,最大30
        attempts:n  # 失败之前最多发送DNS查询的次数,默认2,最大5
        rotate      # 轮询的使用nameserver中的服务器,而非总是从上往下一个个尝试

注意,在Ubuntu 14.04下,由于网络管理器组件的存在,你不应修改此文件,因为重启后修改会丢失。你可以:

  1. 通过系统托盘区网络图标,点击Edit Connections,修改指定网络Profile使用的DNS
  2. 修改/etc/network/interfaces,为指定的网络接口指定DNS
  3. 修改/etc/resolvconf/resolv.conf.d/下的文件:
    1. head,编写位于自动生成DNS前面的nameserver
    2. base,编写位于自动生成DNS后面的nameserver

默认的DNS查找超时是5秒,两次尝试失败后不再尝试,则会导致DNS查找很慢,可以修改:

/etc/resolvconf/resolv.conf.d/head
Shell
1
options timeout:1 attempts:1
/etc/sysctl.conf 该文件用于修改内核运行时参数,可以指定很多网络相关的条目
/var/lib/bluetooth/**/linkkeys 存放蓝牙配对使用的安全码
资源配额

Linux对用户使用资源的具有配额功能,例如如果打开文件描述符的数量超过限制,可能导致“java.io.IOException: Too many open files”错误发生

文件   说明
/etc/security/limits.conf 文件中的每一行表示对某个用户/组的某种资源限制声明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#每行的内容格式如下:
#            
#domain:用户名、组名、通配符*
#type:可以是soft、hard,表示软硬限制
#item:可以是:
#  core  限制核心文件大小KB
#  data  最大数据大小KB
#  fsize 最大文件大小KB
#  memlock 最大的锁定在内存中地址空间KB
#  nofile 最大打开文件的数量
#  rss 限制驻留工作集(进程所使用的非交换区的物理内存)的大小KB
#  stack 最大栈大小KB
#  cpu 最大CPU时间MIN
#  nproc 最大进程数量
#  as 地址空间限制KB
#  maxlogins 最大用户登陆次数
#  maxsyslogins 最大的系统登陆次数
#  priority 用户进程的运行优先级
#  locks 用户最多可以持有的文件锁数量
#  sigpending 最大未决信号数量
#  msgqueue POSIX消息队列的最大长度bytes
#  nice nice优先级范围[-20, 19]
#  rtprio 最大实时优先级
#  chroot 仅Debian,是否可以修改根目录的指向
* soft nofile 65536
* hard nofile 65536

该配置文件与ulimit命令的目的相似,但是后者仅作用于当前Shell及其子进程

引导程序配置
文件   说明
/boot/grub/menu.lst GRUB启动引导文件
/etc/lilo.conf LILO启动引导文件
系统启动脚本

很多配置文件中,具有 rc 字样,通常表示“run commands”。 

文件 说明 
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d
包含一系列的符号链接,符号链接一律指向/etc/init.d/下的文件,在对应的运行级别下会被系统自动执行
/etc/init.d/ 包含若干System V脚本,用于作为系统服务
/etc/init/ 包含一些系统启动时需要执行的任务(upstart job)
/etc/rc.local 在所有系统服务启动完毕后,该脚本的内容会被执行
文件系统挂载
 文件 说明 
/etc/fstab 包含静态文件系统信息,参考:静态文件系统信息
/proc/filesystems 支持的文件系统类型列表
/proc/mounts
/proc/self/mounts

当前mount命名空间下的挂载点列表

格式:

Shell
1
2
3
4
5
6
7
8
9
/dev/sda1 /mnt/40A2AAB1A2AAAABC fuseblk ro,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096 0 0
tmpfs /run/netns tmpfs rw,nosuid,noexec,relatime,size=3286248k,mode=755 0   0
(1)  (2)        (3)   (4)                                             (5) (6)
 
# 1 被挂载的设备
# 2 挂载点
# 3 文件系统类型
# 4 挂载选项
# 5 dummay value,用于匹配 /etc/mtab中的格式
/proc/$PID/mountinfo

指定进程所在的挂载命名空间的挂载点列表

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3)   (4)   (5)      (6)      (7)   (8) (9)   (10)         (11)
 
# 1  mount ID,mount的唯一标识
# 2  parent ID,父mount的标识,如果当前时命名空间中的根mount,则指向自己
# 3  major:minor, 设备主次号
# 4  root,文件系统中构成此挂载的根的目录的路径
# 5  mount,相对于进程根目录的,挂载点的位置
# 6  mount potins,挂载选项
# 7  0-N个可选字段,格式tag[:value]
# 8  可选字段终止符
# 9  filesystem type,文件系统类型
# 10 mount source,挂载的源,可能时设备文件路径,例如/dev/sdd1
# 11 superblock信息
Shell配置
 文件 说明 
/etc/environment

全局的环境变量,修改后重新登录以生效。常用的全局环境变量包括:

  1. http_proxy:HTTP代理地址,例如http://192.168.0.89:8087
  2. no_proxy:不使用代理的地址集合,例如localhost,127.0.0.1,192.168.0.89

注意该文件中的环境变量不支持变量扩展,例如 PWD2=$PWD 会被按字面的解释为$PWD

/etc/profile 可以包含任意脚本。全局的设置,所有用户登录时有效
~/.profile 可以包含任意脚本。当前用户的设置,登陆时有效
/etc/bashrc 可以包含任意脚本。对所有用户新创建的shell有效
~/.bashrc 可以包含任意脚本。对当前用户新创建的shell有效
~/.bash_logout 每次退出shell时,该文件被读取并执行
~/.bash_history 命令历史记录
定时任务
 文件 说明 
/var/spool/cron/crontabs/*
/etc/cron.allow
/etc/cron.deny
crontab相关的配置文件,用于配置基于cron表达式的定时任务
数字证书
 文件 说明 
/etc/ca-certificates.conf 列出安装在/etc/ssl/certs下,你想使用或者忽略的证书的列表,要忽略某个证书,可以在其前面添加 ! 然后执行:
Shell
1
sudo update-ca-certificates  
/etc/ssl/certs 存放当前信任的数字证书的符号链接
/usr/share/ca-certificates
/usr/local/share/ca-certificates
存放所有数字证书文件,不一定被信任
字体配置
 文件 说明 
/etc/fonts/fonts.conf 字体相关的配置文件,包含例如字体安装目录等信息
/usr/share/fonts

字体安装目录

Ubuntu下通过GUI安装字体文件时,安装到~/.local/share/fonts

/usr/local/share/fonts
~/.local/share/fonts
~/.fonts
用户和组配置
 文件 说明 
/etc/default/useradd 新添加用户的默认属性值
/etc/passwd 用户账户信息,内容格式如下:
Shell
1
2
3
4
5
6
7
8
9
10
#每一行包含一个用户的信息,字段使用冒号分隔
root:x:0:0:root:/root:/bin/bash
#字段说明如下:
# root 用户名
# x 密码占位符,密码存放在/etc/shadow文件中
# 0 用户ID(uid)
# 0 主要组ID(gid)
# root 用户全名
# /root 用户家目录
# /bin/bash 用户的Shell,设置为/sbin/nologin禁止登陆Shell
/etc/group 用户组的配置信息
/etc/shadow 加密的用户密码信息,以及密码修改时间、过期时间等
应用程序配置
文件 说明
/etc/ssh/sshd_config SSH服务器配置文件
开发相关配置
文件 说明
/etc/ld.so.conf  额外共享库的存放位置。修改后需要调用ldconfig命令使之生效
/dev
/dev/hd*

IDE硬盘的设备文件,第一块硬盘为hda,第二块hdb,类推。

/dev/sd*

SATA硬盘的设备文件。

/dev/disk/by-*

各种指向设备文件的符号链接。

/dev/disk/by-id/

根据设备的唯一标识。

/dev/disk/by-label/

根据设备的标签(磁盘的名字)。

/dev/disk/by-path/

根据设备的PCI路径。

/dev/disk/by-uuid/

根据磁盘的UUID。

/dev/console

代表系统控制台,过去它常常是一个专用的打印终端;在现代Linux上它通常是一个虚拟控制台;在X Window中它则是一个虚拟的控制台窗口。

系统主控制台,内核代码 printk()总是向此控制台写入消息。第一个非内核进程,也就是init,也将/dev/console作为标准输入、输出、错误。

/dev/console是一个可以通过内核参数进行重定向的虚拟设备集。你可以在grub.conf中配置 console=ttyS0,这样/dev/console就重定向到了/dev/ttyS0。你还可以在grub.conf中多次配置console参数,这样内核主控制台的输出被传播到多个设备。

/dev/mapper/*

设备映射,用于把物理块设备映射为高层的虚拟块设备。逻辑磁盘卷存放在这里

/dev/tty

这是一个别名,对应打开/dev/tty的那个进程所关联的(物理,虚拟,伪)控制台。打开/dev/tty进行读写,不需要root权限。

需要注意,cron之类批处理服务启动的进程,没有关联的控制台,因而也就没有可用的/dev/tty。这类进程的 ps -ef输出的TTY列显示为 ?。

/dev/tty*

原本含义是连接到服务器的串口终端设备。现在/dev/tty0总是表示当前控制台,而/dev/tty1…对应Ctrl + Alt + F1…切换到的那些虚拟控制台。

/dev/ttyS*

代表连接到服务器的串口终端设备。有段时间串口设备被称为终端设备,因为那时串口设备的主要用途就是用作终端。

/dev/null

空设备,所有写入内容被丢弃;所有读尝试立即返回EOF

/run
/run/netns

创建了网络命名空间后,在此目录下出现一个对应的文件。

/var

经常发生改变的系统文件所在目录。

/var/run

目前通常是指向/run的符号链接

/var/tmp

临时文件目录,不会自动清空。

/var/log

各种日志文件:

文件 说明
/var/log/dmesg  包含系统启动时的详细日志,例如硬件检测
/var/log/auth.log 系统身份认证日志,企图进行的登陆记录其中
/boot

内核和加载内核所需的文件。

/lost+found

文件系统崩溃后,恢复文件存放在这里。

/kernel

内核组件。

/bin

系统核心应用程序所在目录,启动系统时需要的程序在此目录。

/sbin

可能是System binary的缩写,包含一些重要的系统应用程序,系统管理的PATH中包含此目录。

/lib

基础的共享库、内核模块,该目录中的共享库镜像对于启动系统、执行/bin、/sbin下的命令是必须的。

对于/bin /sbin目录下程序不必须的共享库,不会放在此目录下。

目录中的库也能是32位的,也可能是 64位的。

/lib32  /lib64存放库的32或64位变体,/lib目录中可能是指向这些目录的符号链接。

/home

用户家目录的父目录,每个用户对应一个子目录。可以使用 ~来访问当前用户的家目录。

/root

超级用户root的家目录。

/usr

存放应用程序和库,usr的含义可以解释为Unix System Resources。

/usr/bin

应用程序,存放用户使用的标准程序

/usr/sbin

系统应用程序,类似于/sbin。

/usr/include

开发人员使用的头文件。子目录c++为GNU C++的头文件;子目录X11为X Windows头文件。

/usr/lib

编程、包需要的库文件,例如动态链接库、python的模块。

/usr/lib64

64位库文件。

/usr/fonts

字体文件。

/usr/share

包含很多程序、库、文档,其中/usr/share/doc是文档中心。

/usr/src

存放一些源代码,一些发行版把内核源码存放到/usr/src/linux。

/usr/local

用户在本地添加的应用、库等文件,例如/usr/local/lib/python2.7/。具有和/usr类似的结构。

/mnt

以前通常把分区挂载在该目录下,可以作为可移动介质上文件系统的临时挂载点。

/media

通常把可移动介质上的文件系统挂载到这里。

/cdrom

到/media/cdrom的链接。

/tmp

临时文件目录,每次系统引导即清空。

/opt

可选操作系统组件、附加软件安装位置,使用的不多。

/stand

独立的工具、磁盘格式化工具、诊断工具等。

/srv

服务器系统所在目录。

← 2012年端午天津行
YAML快速参考 →

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Related Posts

  • Linux进程间通信
  • Linux信号、进程和会话
  • Linux网络知识集锦
  • Linux运行级别和启动顺序
  • Linux知识集锦

Recent Posts

  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
  • A Comprehensive Study of Kotlin for Java Developers
  • 背诵营笔记
  • 利用LangChain和语言模型交互
  • 享学营笔记
ABOUT ME

汪震 | Alex Wong

江苏淮安人,现居北京。目前供职于腾讯云,专注容器方向。

GitHub:gmemcc

Git:git.gmem.cc

Email:gmemjunk@gmem.cc@me.com

ABOUT GMEM

绿色记忆是我的个人网站,域名gmem.cc中G是Green的简写,MEM是Memory的简写,CC则是我的小天使彩彩名字的简写。

我在这里记录自己的工作与生活,同时和大家分享一些编程方面的知识。

GMEM HISTORY
v2.00:微风
v1.03:单车旅行
v1.02:夏日版
v1.01:未完成
v0.10:彩虹天堂
v0.01:阳光海岸
MIRROR INFO
Meta
  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Recent Posts
  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
    In this blog post, I will walk ...
  • A Comprehensive Study of Kotlin for Java Developers
    Introduction Purpose of the Study Understanding the Mo ...
  • 背诵营笔记
    Day 1 Find Your Greatness 原文 Greatness. It’s just ...
  • 利用LangChain和语言模型交互
    LangChain是什么 从名字上可以看出来,LangChain可以用来构建自然语言处理能力的链条。它是一个库 ...
  • 享学营笔记
    Unit 1 At home Lesson 1 In the ...
  • K8S集群跨云迁移
    要将K8S集群从一个云服务商迁移到另外一个,需要解决以下问题: 各种K8S资源的迁移 工作负载所挂载的数 ...
  • Terraform快速参考
    简介 Terraform用于实现基础设施即代码(infrastructure as code)—— 通过代码( ...
  • 草缸2021
    经过四个多月的努力,我的小小荷兰景到达极致了状态。

  • 编写Kubernetes风格的APIServer
    背景 前段时间接到一个需求做一个工具,工具将在K8S中运行。需求很适合用控制器模式实现,很自然的就基于kube ...
  • 记录一次KeyDB缓慢的定位过程
    环境说明 运行环境 这个问题出现在一套搭建在虚拟机上的Kubernetes 1.18集群上。集群有三个节点: ...
  • eBPF学习笔记
    简介 BPF,即Berkeley Packet Filter,是一个古老的网络封包过滤机制。它允许从用户空间注 ...
  • IPVS模式下ClusterIP泄露宿主机端口的问题
    问题 在一个启用了IPVS模式kube-proxy的K8S集群中,运行着一个Docker Registry服务 ...
  • 念爷爷
      今天是爷爷的头七,十二月七日、阴历十月廿三中午,老人家与世长辞。   九月初,回家看望刚动完手术的爸爸,发

  • 6 杨梅坑

  • liuhuashan
    深圳人才公园的网红景点 —— 流花山

  • 1 2020年10月拈花湾

  • 内核缺陷触发的NodePort服务63秒延迟问题
    现象 我们有一个新创建的TKE 1.3.0集群,使用基于Galaxy + Flannel(VXLAN模式)的容 ...
  • Galaxy学习笔记
    简介 Galaxy是TKEStack的一个网络组件,支持为TKE集群提供Overlay/Underlay容器网 ...
TOPLINKS
  • Zitahli's blue 91 people like this
  • 梦中的婚礼 64 people like this
  • 汪静好 61 people like this
  • 那年我一岁 36 people like this
  • 为了爱 28 people like this
  • 小绿彩 26 people like this
  • 彩虹姐姐的笑脸 24 people like this
  • 杨梅坑 6 people like this
  • 亚龙湾之旅 1 people like this
  • 汪昌博 people like this
  • 2013年11月香山 10 people like this
  • 2013年7月秦皇岛 6 people like this
  • 2013年6月蓟县盘山 5 people like this
  • 2013年2月梅花山 2 people like this
  • 2013年淮阴自贡迎春灯会 3 people like this
  • 2012年镇江金山游 1 people like this
  • 2012年徽杭古道 9 people like this
  • 2011年清明节后扬州行 1 people like this
  • 2008年十一云龙公园 5 people like this
  • 2008年之秋忆 7 people like this
  • 老照片 13 people like this
  • 火一样的六月 16 people like this
  • 发黄的相片 3 people like this
  • Cesium学习笔记 90 people like this
  • IntelliJ IDEA知识集锦 59 people like this
  • 基于Kurento搭建WebRTC服务器 38 people like this
  • Bazel学习笔记 37 people like this
  • PhoneGap学习笔记 32 people like this
  • NaCl学习笔记 32 people like this
  • 使用Oracle Java Mission Control监控JVM运行状态 29 people like this
  • Ceph学习笔记 27 people like this
  • 基于Calico的CNI 27 people like this
Tag Cloud
ActiveMQ AspectJ CDT Ceph Chrome CNI Command Cordova Coroutine CXF Cygwin DNS Docker eBPF Eclipse ExtJS F7 FAQ Groovy Hibernate HTTP IntelliJ IO编程 IPVS JacksonJSON JMS JSON JVM K8S kernel LB libvirt Linux知识 Linux编程 LOG Maven MinGW Mock Monitoring Multimedia MVC MySQL netfs Netty Nginx NIO Node.js NoSQL Oracle PDT PHP Redis RPC Scheduler ServiceMesh SNMP Spring SSL svn Tomcat TSDB Ubuntu WebGL WebRTC WebService WebSocket wxWidgets XDebug XML XPath XRM ZooKeeper 亚龙湾 单元测试 学习笔记 实时处理 并发编程 彩姐 性能剖析 性能调优 文本处理 新特性 架构模式 系统编程 网络编程 视频监控 设计模式 远程调试 配置文件 齐塔莉
Recent Comments
  • qg on Istio中的透明代理问题
  • heao on 基于本地gRPC的Go插件系统
  • 黄豆豆 on Ginkgo学习笔记
  • cloud on OpenStack学习笔记
  • 5dragoncon on Cilium学习笔记
  • Archeb on 重温iptables
  • C/C++编程:WebSocketpp(Linux + Clion + boostAsio) – 源码巴士 on 基于C/C++的WebSocket库
  • jerbin on eBPF学习笔记
  • point on Istio中的透明代理问题
  • G on Istio中的透明代理问题
  • 绿色记忆:Go语言单元测试和仿冒 on Ginkgo学习笔记
  • point on Istio中的透明代理问题
  • 【Maven】maven插件开发实战 – IT汇 on Maven插件开发
  • chenlx on eBPF学习笔记
  • Alex on eBPF学习笔记
  • CFC4N on eBPF学习笔记
  • 李运田 on 念爷爷
  • yongman on 记录一次KeyDB缓慢的定位过程
  • Alex on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • haolipeng on 基于本地gRPC的Go插件系统
  • 吴杰 on 基于C/C++的WebSocket库
©2005-2025 Gmem.cc | Powered by WordPress | 京ICP备18007345号-2