linux怎样创建linux vim 目录树树

linux文件系统与目录树到底有什么关系?什么是文件系统啊?比如说根目录是不是一个文件系统,或者是_百度知道
linux文件系统与目录树到底有什么关系?什么是文件系统啊?比如说根目录是不是一个文件系统,或者是
linux文件系统与目录树到底有什么关系?什么是文件系统啊?比如说根目录是不是一个文件系统,或者是一个目录就是一个文件系统么?
我有更好的答案
linux文件系统是linux系统的一个组成部分,它是由一组软件构成的,用于组织文件在硬盘等存储空间上的存放、读取、修改等或设备(如打印机、光驱等)的访问。linux可以读写100多种磁盘管理模式,如,FAT、FAT32、NTFS、Ext2、Ext3、Ext4,这些都需要有相应的软件支持,这些软件就统称为“linux文件系统”。根目录就是linux文件系统的某一种或几种文件管理模式把文件和体现为文件的设备组织出来的一个整体。在 Windows 中,存储空间首先分为“盘符”,在盘符下再分为“分区”,在分区下再分成“目录”,在目录下再分成“子目录”。但在linux中,所有的存储空间和设备共享一个根目录,不同的磁盘块、不同的分区再挂接上来成为某个子目录的子目录,甚至设备也挂接成了某个子目录下的一个文件,观念上有比较大的区别,使用时一定要注意。
那么,有一个问题,就是如果我给你根目录挂载一个设备,然后再给/home挂载一个设备,那根目录下的/home目录是属于根目录的还是独立存在的,例如:我在根目录下的/home目录里创建一个文件,那么该文件是属于sda1呢还是sda2?
取决于你是否把 /home 目录是在 sda1下还是 sda2下。安装 Linux 的时候,你可以把不同的子目录指定到不同的设备上的。
不是把设备挂载到目录下么,怎么成了把目录指定到设备上呢
不同的一级子目录可以指定在不同的磁盘分区上,通过对磁盘分区来指定其对应的目录,可以限制某个子目录的容量,防止它越界(过分占用磁盘空间造成系统无法启动)。“可以把不同的子目录指定到不同的设备上的。”这句话中“设备”只是指硬盘分区,它也是根目录下的子目录。
那么就是说一个已经挂载了的硬盘就是一个文件系统是么,而在硬盘基础上进行的分区还是属于该文件系统?这一块我看书就是搞不明白,没有实例,好抽象
“载了的硬盘就是一个文件系统”是一个不准确的说法,虽然是有人那么说,但,准确一点地说还是我前面讲过的:Linux 的文件系统是操作系统中运行的一套软件。
采纳率:68%
来自团队:
linux的文件系统是在格式化分区的时候定义的sheel中输入:fdisk -l 最后一列就是文件系统类型linux是默认的linux wrap是交换分区ext2 ext3文件类型,ext3增加了文件日志功能FAT32是windows的文件系统类型一个分区是挂在一个目录
目录的文件类型就是文件系统
什么是文件系统呢???比如说你新买的房子,那么房子内部摆设是如何的呢,方式有很多吧。那么不同的摆放方式就是文件系统喽。那么目录树就是文件系统的表现形式啦!!!!关于第二个问题,一个目录是不是一个文件系统是由你决定的,如果你分区的时候给这个目录一个分区,那它就是一个文件系统啦,但是如果没有,这个目录只是一个分叉啦!!
哦哦,知道了,谢谢啊
还有一个问题,就是如果我给你根目录挂载一个设备,然后再给/home挂载一个设备,那根目录下的/home目录是属于根目录的还是独立存在的,例如:我在根目录下的/home目录里创建一个文件,那么该文件是属于sda1呢还是sda2
为您推荐:
其他类似问题
linux文件系统的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何在linux centos下列出文件夹和文件的目录树结构! 什么命令?或者需要shell编一个me ?_百度知道
如何在linux centos下列出文件夹和文件的目录树结构! 什么命令?或者需要shell编一个me ?
我有更好的答案
你是要看所有的目录和文件?ls -aR /
采纳率:37%
问用楼上ls -aR实现了呈现目录下全部文件和文件夹的目录树结构!初次尝试你的命令无法实现啊?请问:哪里出了问题?
1 tree2 ls -l
问用楼上ls -aR实现了呈现目录下全部文件和文件夹的目录树结构!问初次尝试你的命令无法实现啊?请问:哪里出了问题?
你没安装tree这个包 所以你找不到tree命令yum install tree安装ls -l *列出只是列出下面一级
为您推荐:
其他类似问题
centos的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
摘要:系统初始化期间,Linux都首先要在内存当中构造一棵VFS的目录树,实际上便是在内存中建立相应的数据结构。文件系统注册在Linux源代码中,每种实际的文件系统用以下的数据结构表示:structfile_system_type{constchar*intfs_int(*get_sb)(structfile_system_type*,int,constchar*,void*,structvfsmount*);void(*kill_sb)(structsupe
系统初始化期间,Linux 都首先要在内存当中构造一棵VFS的目录树,实际上便是在内存中建立相应的数据结构。
文件系统注册
在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示:
struct file_system_type { const char * int fs_ int (*get_sb) (struct file_system_type *, int, const char *, void *, struct vfsmount *); void (*kill_sb) (struct super_block *); struct module * struct file_system_type * struct list_head fs_ struct lock_class_key s_lock_ struct lock_class_key s_umount_};
注册过程实际上将表示各实际文件系统的 struct file_system_type数据结构的实例化,然后形成一个链表,内核中用一个名为 file_systems的全局变量来指向该链表的表头.
rootfs注册
rootfs 的注册是通过init_rootfs()这一初始化函数来完成,这意味着rootfs的注册过程是 Linux 内核初始化阶段不可分割的一部分。init_rootfs_fs-&register_filesystem
static struct file_system_type rootfs_fs_type = { .name = &rootfs&, .get_sb = rootfs_get_sb, /* 创建superblock*/ .kill_sb = kill_litter_super,};int __init init_rootfs(void){ return register_filesystem(&;rootfs_fs_type);}
把rootfs挂在到全局file_systems链表上。
int register_filesystem(struct file_system_type * fs){ int res = 0; struct file_system_type ** if (!fs) return -EINVAL; if (fs-&next) return -EBUSY; INIT_LIST_HEAD(&;fs-&fs_supers); write_lock(&;file_systems_lock); p = find_filesystem(fs-&name); if (*p) res = -EBUSY; else *p = write_unlock(&;file_systems_lock); }static struct file_system_type *file_static struct file_system_type **find_filesystem(const char *name){ struct file_system_type **p; for (p=&;file_ *p; p=&;(*p)-&next) if (strcmp((*p)-&name,name) == 0)
注册之后的 file_systems 链表结构如下图所示:
vfs_tree_1
VFS根目录建立
init_mount_tree() 函数会调用 do_kern_mount(“rootfs”, 0, “rootfs”, NULL) 来挂载前面已经注册了的 rootfs 文件系统。这看起来似乎有点奇怪,因为根据前面的说法,似乎是应该先有挂载目录,然后再在其上挂载相应的文件系统,然而此时 VFS 似乎并没有建立其根目录。没关系,这是因为这里我们调用的是 do_kern_mount(),这个函数内部自然会创建我们最关心也是最关键的根目录(在 Linux 中,目录对应的数据结构是 struct dentry)。
每个进程可拥有自己的已安装文件树——叫做进程的命名空间(namespace)。对于每一个进程都有自己的namespace,这可以理解为这个进程的地盘。在这里,所有的文件系统都要挂上来统一管理。通常大多数进程共享一个命名空间,即位于系统的根文件系统且被init进程使用的已安装文件系统树。不过如果clone()系统调用以CLONE_NEWNS标志创建一个新进程,那么进程将获取一个新的命名空间,这个新的命名空间随后由子进程继承(如果父进程没有以CLONE_NEWNS标志创建这些进程)。
struct namespace { atomic_ /* 引用计数 */ struct vfsmount * /* 根目录的 vfsmount */ struct list_ /* 所有已mount的文件系统都挂载这链表上 */ wait_queue_head_ };
已安装文件系统描述符vfsmount。对于每一个命名空间,所有属于此命名空间的已安装的文件系统描述符形成了一个双向循环链表。下图vfs_tree_1,namespace结构的list字段存放链表的头,vfsmount描述符的mnt_list字段包含链表中指向相邻元素的指针。
vfs_tree_2
建立根目录
在初始化阶段是如何建立根结点的,即 “/“目录。这其中会包括挂载 rootfs 文件系统到根目录 “/“ 的具体过程。构造根目录的代码是在 init_mount_tree函数中。
init_mount_tree()函数会调用do_kern_mount(“rootfs”, 0, “rootfs”, NULL)来挂载前面已经注册了的 rootfs 文件系统。
do_kern_mount()函数内部创建VFS的根目录(在 Linux 中,目录对应的数据结构是 struct dentry)。
static void __init init_mount_tree(void){ struct vfsmount * struct namespace * struct task_struct *g, *p; //do_kern_mount函数主要作用: //1.在内存里申请了一块该类型的内存空间(struct vfsmount *mnt),并初始化其部分成员变量 //2.调用rootfs-&get_sb_nodev函数在内存中分配一个超级块结构 (struct super_block) sb, // 并初始化其部分成员变量,将成员s_instances插入到rootfs中的fs_supers指向的双向链表中 //3.调用rootfs-&get_sb_nodev-&fill_super-&simple_fill_super函数: // 在内存中分配了一个inode (struct inode) ,并初始化其部分成员变量(i_op、i_fop等) // 还有生成根目录dentry。root = d_alloc_root(inode); mnt = do_kern_mount(&rootfs&, 0, &rootfs&, NULL); if (IS_ERR(mnt)) panic(&Can't create rootfs&); //在内存里申请命名空间 namespace = kmalloc(sizeof(*namespace), GFP_KERNEL); if (!namespace) panic(&Can't allocate initial namespace&); atomic_set(&;namespace-&count, 1); INIT_LIST_HEAD(&;namespace-&list); init_waitqueue_head(&;namespace-&poll); namespace-&event = 0; //如上图vfs_tree_1所示,把mnt_list挂在到namespace-&list上 list_add(&;mnt-&mnt_list, &;namespace-&list); namespace-&root = mnt-&mnt_namespace =
//为系统最开始的进程(即init_task进程)准备它的进程数据块中的namespace //将mnt和dentry信息记录在了init_task进程的进程数据块中, //这样所有以后从init_task进程fork出来的进程也都先天地继承了这一信息 init_task.namespace =
read_lock(&;tasklist_lock); do_each_thread(g, p) { get_namespace(namespace); p-&namespace =
} while_each_thread(g, p); read_unlock(&;tasklist_lock); //下面两行就是把mnt和dentry信息记录在了当前进程的 fs结构中 //namespace-&root指向roofs的vfsmount //namespace-&root-&mnt_root指向根目录dentry set_fs_pwd(current-&fs, namespace-&root, namespace-&root-&mnt_root); set_fs_root(current-&fs, namespace-&root, namespace-&root-&mnt_root);}
函数init_mount_tree调用完毕后,结构如下图:
vfs_tree_3
一旦VFS目录树建立,就可以通过系统调用sys_mkdir在这棵树上建立新的叶子节点等。VFS目录树中各目录的主要用途是为以后挂载文件系统提供挂载点,所以将rootfs文件系统挂载到了这棵树的根目录上,而真正的文件操作还是要通过挂载后的文件系统提供的功能接口来进行。
VFS建立新目录
VFS目录树建立,就可以通过系统调用sys_mkdir在这棵树上建立新的叶子节点等。下面我们用一个实际例子来看看Linux是如何在 VFS 的根目录下建立一个新的目录 “/dev” 的。
系统调用sys_mkdir(“/dev/“, 0700)-&do_path_lookup asmlinkage
long sys_mkdir(const char __user *pathname, int mode){ return sys_mkdirat(AT_FDCWD, pathname, mode);}struct nameidata { struct dentry * struct vfsmount *
char *saved_names[MAX_NESTED_LINKS + 1]; /* Intent data */ union { struct open_ }};asmlinkage long sys_mkdirat(int dfd, const char __user *pathname, int mode){ int error = 0; char * tmp = getname(pathname); error = PTR_ERR(tmp); if (!IS_ERR(tmp)) { struct dentry *
error = do_path_lookup(dfd, tmp, LOOKUP_PARENT, &;nd); if (error) goto
dentry = lookup_create(&;nd, 1); error = PTR_ERR(dentry); if (!IS_ERR(dentry)) { if (!IS_POSIXACL(nd.dentry-&d_inode)) mode &;= ~current-&fs-& error = vfs_mkdir(nd.dentry-&d_inode, dentry, mode); dput(dentry); } mutex_unlock(&;nd.dentry-&d_inode-&i_mutex); path_release(&;nd);out: putname(tmp); } }
http://www.ibm.com/developerworks/cn/linux/l-vfs/
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
VFS目录树相关信息,包括
的信息,所有VFS目录树相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
服务与支持
账号与支持
关注阿里云
International博客分类:
我使用过的Linux命令之tree - 以树状图列出目录的内容
本文链接:
(转载请注明出处)
tree命令以树状图列出目录的内容(list contents of directories in a tree-like format.)。通常在写文档时需要列一下文件目录结构,这个时候tree命令就能帮个忙了。某些Linux上没有tree命令,本文后面提供了安装方法。
tree -d 只显示目录。
tree -L 1 只显示第一层目录。
[root@qzt196 ~]# cd /
[root@qzt196 /]# tree -L 1
|-- lost+found
|-- selinux
|-- software
`-- vmsnfs
23 directories, 0 files
[root@qzt196 /]#
示例二 安装tree命令
[root@web186 setup]# tree
-bash: tree: command not found
到ftp://mama.indstate.edu/linux/tree/下载最新的tree命令源代码压缩包。
[root@web186 setup]# ls -l tree-1.5.3.tgz
-rw-r--r--
34494 12月
3 20:56 tree-1.5.3.tgz
[root@web186 setup]# tar zxf tree-1.5.3.tgz
[root@web186 setup]# cd tree-1.5.3
[root@web186 tree-1.5.3]# ls
strverscmp.c
[root@web186 tree-1.5.3]# make
gcc -ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-c -o tree.o tree.c
-o tree tree.o
[root@web186 tree-1.5.3]# tree
-bash: tree: command not found
[root@web186 tree-1.5.3]# cp -af tree /usr/bin
[root@web186 tree-1.5.3]# tree
|-- CHANGES
|-- INSTALL
|-- LICENSE
|-- Makefile
|-- tree.1
`-- tree.1.fr
|-- README
|-- strverscmp.c
|-- tree.c
`-- tree.o
1 directory, 11 files
[root@web186 tree-1.5.3]#
【1】天下维客
【2】CalmArrow
【3】tree命令的源代码
ftp://mama.indstate.edu/linux/tree/
【4】Unix Tree / Linux Tree
【5】Linux - Tree structure of files
浏览 24900
codingstandards
浏览: 3600022 次
来自: 上海
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
楼主咋没分析下源码呢?
tail -F 就可以吧
新手学习了,就是不明白为一个网卡配多个ip有什么用
不错,谢谢!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 linux 查看目录树 的文章

 

随机推荐