etc 配置文件 根文件系统,必须存在于/系统上,不可单独分区
bin 用户可执行文件(基本应用程序)
sbin 系统可执行文件(基本应用程序)
lib 共享库文件
dev 设备
boot 启动文件 单独分区
tmp 临时文件 tmp目录中的数据默认每10天自动清除
mnt/media 外设挂载点 早期Linux系统使用mnt目录
usr 发型版厂商自定义应用程序 可以考虑单独分区
var 服务器数据:日志、打印池等 可以考虑为不同的服务目录单独分区
home 普通用户家目录 如果作为认证服务器,则考虑单独分区
root root用户家目录
opt 存放第三方大型应用程序,如Oracle 可以考虑单独分区
selinux selinux信息
misc/net 自动挂载点
proc linux系统信息,可在运行时进行调整 没有独立挂载点(内核映像,无法挂载)
sys 硬件相关信息
lost+found ext3文件系统收集文件碎片用 自动存在于每个ext3文件系统上
1. /* 移动SOURCE到DEST.主要处理跨文件系统的情况如果SOURCE是一个目录, DEST必须不存在.2.如果成功了返回true. */
3. static bool
4. do_move (const char *source, const char *dest, const struct cp_options *x)
5. {
6. bool copy_into_self
7. bool rename_succeeded
8. bool ok = copy (source, dest, false, x, ©_into_self, &rename_succeeded)
9. if (ok)
10. {
11. char const *dir_to_remove
12. if (copy_into_self)
13. {
14. /* 通常当SOURCE和DEST一样或者是DEST的父目录的时候copy会返回copy_into_self在这种情况
15. 下我们知道SOURCE是作为一个父目录出现的,移动一个目录到他自己里是没有意义的 and 除此之
16. 外在某些情况下这么做会带来很不直观的结果,在一个空目录中执行 `mkdir btouch a c
17. mv * b'.这时候会返回错误,mv: 无法将目录 “b” 移动至自身的子目录 “b/b” 下。通过一个
18. 特征值处理这个问题, 删除copied-into-self目录, DEST (`b/b' 在这个例子中),并返回失
19. 败. */
20. dir_to_remove = NULL
21. ok = false
22. }
23. else if (rename_succeeded)
24. {
25. /* SOURCE成功的rename到DEST不许要删除任何文件,或者权限拒绝重命名一个文件 */
26. dir_to_remove = NULL
27. }
28. else
29. {
30. /* 这个可能意味着SOURCE和DEST在不同的设备中也可能被认为是尽管SOURCE和DEST在同一个设
31. 备中但是rename是不被允许的.
32. 就好象你用ftpfs向ftp服务器申请上传,下载,删除但是不能重命名一样
33. 在检查can-rename的时候设备号是不可靠的,因为有些系统从不同物理设备上建立文件但是他
34. 们有相同的st_dev字段(NFS就是这样的)
35. 如果SOURCE成功的copy到DECT,那么我们必须删除SOURCE
36. 这个函数通常用在复制只是当重命名失败并且设置errno等于EXDEV */
37. dir_to_remove = source
38. }
39. if (dir_to_remove != NULL)
40. {
41. struct rm_options rm_options
42. enum RM_status status
43. char const *dir[2]
44. rm_option_init (&rm_options)
45. rm_options.verbose = x->verbose
46. dir[0] = dir_to_remove
47. dir[1] = NULL
48. status = rm ((void*) dir, &rm_options)
49. assert (VALID_STATUS (status))
50. if (status == RM_ERROR)
51. ok = false
52. }
53. }
54. return ok
55. }
56. /* 移动文件SOURCE到DEST.主要处理DEST是目录的时候如果DEST_IS_DIR则DEST是目录
57.如果成功返回true. */
58. static bool
59. movefile (char *source, char *dest, bool dest_is_dir,
60. const struct cp_options *x)
61. {
62. bool ok
63. /*
64. 这段代码处理由于重命名函数的不同语义导致的mv语义上的歧义
65. 有些系统(如:GNU/Linux)的重命名函数处理最后的‘/’,
66. 一些别的系统(如: Solaris 5,6,7)的重命名函数忽略最后的‘/’
67. (此处引用源代码中的注释)
68. */
69. if (remove_trailing_slashes)
70. /* bool strip_trailing_slashes(char *file)
71. 函数删除FILE最后的‘/’ */
72. strip_trailing_slashes (source)
73. /* 如果第二个参数是目录 */
74. if (dest_is_dir)
75. {
76. /* 获取source整个路径名的最后部分 */
77. char const *src_basename = last_component (source)
78. /* 将获取的最后部分和dest连接构成新的目标路径 */
79. char *new_dest = file_name_concat (dest, src_basename, NULL)
80. strip_trailing_slashes (new_dest)
81. ok = do_move (source, new_dest, x)
82. /* 释放申请的内存 */
83. free (new_dest)
84. }
85. /* 如果第二个参数不是目录 */
86. else
87. {
88. ok = do_move (source, dest, x)
89. }
90. return ok
91. }
呵呵 莫见怪 不是程序流程图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)