急求Linux系统文件系统流程图

急求Linux系统文件系统流程图,第1张

目录名 说明 备注

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. }

呵呵 莫见怪 不是程序流程图


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8574157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存