学习Linux下的文件目录管理
文件目录管理
一.认识linux文件系统的架构
在linux中是没有盘符这个概念的,即linux中没有c盘和d盘的分盘。那么我们直接通过对目录的操作实现对磁盘的读写,因为已经建立的文件系统分区被挂载到一个目录下。
我们可以注意到linux表示目录是使用"/"而不是像windows那样的"\"。
那么我们列出linux文件系统中主要的目录并了解她们的含义:
在我的阿里云上在/目录下输入ls命令得到:
/bin 构建最小的系统所需要的命令
/boot 内核和启动文件
/dev 各种设备文件
/etc 系统软件的启动和配置文件
/home 用户的主目录
/lib c编译器的库
/media 可移动介质的安装点
/proc 进程的映像
/root 超级用户root的主目录
/sbin 和系统操作有关的命令
/tmp 临时文件存放点
/usr 非系统的程序和命令
/var 系统专用的数据和配置文件
二.创建一个工作组和共享文件
虽然在团队开发中我们可以使用git和远程版本控制库但是我们创建一个共享的文件在本地开发时是有极大帮助的。
首先我们要知道怎么去创建一个新的用户:
以下部分转载来自我对内容进行了图片填充和代码实验,原文地址:h
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录shell等资源。刚添加的账号是被锁定的,无法使用。
1、添加新的用户账号使用 useradd命令,其语法如下:
代码:
useradd 选项 用户名
其中各选项含义如下:
代码:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-g 用户组,用户组 指定用户所属的附加组。
-s shell文件 指定用户的登录shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名 指定新账号的登录名。
例1:
代码:
# useradd –d /usr/sam -m sam
此命令创建了一个用户sam,
其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。
在我们去输入这条命令之前,我们先进入user文件夹下查看所有的文件:
输入命令后查看usr文件夹:
在usr文件夹下就出现了一个新的文件夹名叫cjm和我们的用户名相同。
那么下载cjm这个用户的主目录就是在usr文件夹下的cjm文件夹
例2:
代码:
# useradd -s /bin/sh -g group –g adm,root gem
此命令新建了一个用户gem,该用户的登录shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组(附加组),其中group用户组是其主组。
这里可能新建组:#groupadd group及groupadd adm
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。
linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
如果我们直接输入这一条命令:
他会报出这样的错误提示你group工作组不存在,那么我们首先来创建一个工作组group(root是已经存在的超级用户不用添加,adm也是存在的)。
添加用户组
然后在输入添加用户语句,就没有问题了。
2、删除帐号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令,其格式如下:
代码:
userdel 选项 用户名
常用的选项是-r,它的作用是把用户的主目录一起删除。
例如:
代码:
# userdel sam
此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
我们删除我们刚刚创建的cjm用户,并且去usr目录下发现我们创建的用户主目录已经删除
3、修改帐号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录shell等。
修改已有用户的信息使用usermod命令,其格式如下:
代码:
usermod 选项 用户名
常用的选项包括
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-g 用户组,用户组 指定用户所属的附加组。
-s shell文件 指定用户的登录shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用如下选项:
代码:
-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
例如:
我们先创建一个用户名为cjm,主目录在usr文件夹下的cjm文件夹,shell登录在bin目录下的sh,然后我们将shell改为在bin目录下的ksh,将主目录改为usr下的cjm1,名字也改为cjm1
创建:
更改后去查看文件夹:
不难发现这个cjm文件夹已经更改cjm1
4、用户口令的管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
代码:
passwd 选项 用户名
可使用的选项:
代码:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令,删除密码
-f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
如果是超级用户,可以用下列形式指定任何用户的口令:
代码:
# passwd sam (注意开头提示符号为井号)
new password:*******
re-enter new password:*******
操作:
现在我就已经给我的cjm1用户创建了一个密码。
我们登录cjm1用户:
例如,假设当前用户是cjm1,则下面的命令修改该用户自己的口令:
代码:
$ passwd(注意开头提示符为美元符号,表示非超级用户)
old password:******
new password:*******
re-enter new password:*******
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
操作截图:
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空口令时,执行下列形式的命令:
代码:
# passwd -d sam
此命令将用户sam的密码删除,但是下一次登录还是会询问密码
我们再去登录cjm1这个用户,是登录不进去的,即使密码为空。
passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:
代码:
# passwd -l sam
修改后再去登录:
是登陆不上的
新建用户异常:
useradd -d /usr/hadoop -u 586 -m hadoop -g hadoop
1 creating mailbox file: 文件已存在
删除即可 rm -rf /var/spool/mail/用户名
2 useradd: invalid numeric argument 'hadoop'
这是由于hadoop组不存在 请先建hadoop组
通过cat /etc/passwd 可以查看用户的pass
cat /etc/shadow 可以查看用户名
cat /etc/group 可以查看 组
三.下面是去创建一个用户组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同linux 系统对用户组的规定有所不同,如linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
1、增加一个新的用户组使用groupadd命令。 其格式如下:
代码:
groupadd 选项 用户组
可以使用的选项有:
代码:
-g gid 指定新用户组的组标识号(gid)。
-o 一般与-g选项同时使用,表示新用户组的gid可以与系统已有用户组的gid相同。
例1:
代码:
# groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1。
例2:
代码:
#groupadd -g 101 group2
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101。
2、如果要删除一个已有的用户组,使用groupdel命令, 其格式如下:
代码:
groupdel 用户组
例如:
代码:
#groupdel group1
此命令从系统中删除组group1。
3、修改用户组的属性使用groupmod命令。 其语法如下:
代码:
groupmod 选项 用户组
常用的选项有:
代码:
-g gid 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新gid可以与系统已有用户组的gid相同。
-n新用户组 将用户组的名字改为新名字
例1:
代码:
# groupmod -g 102 group2
此命令将组group2的组标识号修改为102。
例2:
代码:
# groupmod –g 10000 -n group3 group2
此命令将组group2的标识号改为10000,组名修改为group3。
4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。 例如:
代码:
$ newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
四.创建一个文件夹和目录
使用命令mkdir创建一个或多个文件夹
创建一个cjmuser文件夹在根目录下:mkdir 文件夹名
一次创建两个文件夹cjmuser1、cjmuser2 :mkdir 文件夹1 文件夹2
在指定目录etc下面创建文件夹cjmuser3 :mkdir /.../.../文件名
使用mkdir命令可以创建文件夹但是创建文件就需要使用touch命令
在根目录下的test文件夹下创建一个hello.txt文件,并使用vim去修改他:
在vim下我们首先进入输入模式,输入hello然后进入可视模式进行复制和粘贴。最后使用cat来查看我们的hello.txt得到hello文件的内容。
使用mv移动文件夹,mv 文件名 指定路径 我们将根目录下test文件夹下的hello文件移动到的根目录下:
在这里有一个非常重要的地方,就是说如果你的目标文件夹下有一个同名的文件,那么他会询问你是否覆盖文件
我们先在根目录下的test文件夹中创建一个空的hello.txt文件,然后移动到到我们刚才已经有了两个hello字符串的hello.txt文件的根目录下。
如果不同意覆盖就会创建一个名字相同但是在后面会有一个 ~号的文件
使用cp命令符复制文件和目录 cp 文件名 指定复制到的路径
我们又将根目录下的hello.txx文件复制到test文件夹下:
使用rmdir和rm删除文件和目录
rmdir和rm的区别就是rmdir只能删除空文件夹,但是rm可以删除含有文件的文件夹。
rmdir无法删除这个非空文件夹
但是rm就可以。,参数 -rf 就是表示扫描文件夹下的全部子目录并且强制删除不做任何的提示
五.linux的文件权限
1.查看权限
当一个用户去创建一个文件或者文件夹时,那么他就是这个文件或者文件夹的属主,那么和属主在一个group中的就是属组,除去这两个就是其他人了。
对于一个文件来讲就是有三个权限可读(r)可写(w)可执行(x),那么我们来查看一个文件的三个权限通过ls -l命令查看详细信息来查看
第一列是 - 表明他是一个普通文件
我们可以看到这个hello.txt文件的详细信息的第二列,这一列就表明了这个文件的权限我们这么去读他:
rw- (属主权限) r--(属组权限) r--(其他*限)
属主可以去读和写但是不能运行,txt文件当然不能运行。然后就是其他两个都是只能去读,所有被隔绝的权限都用 - 给代替了
数字 1 代表着他有多少个文件硬链接数
然后我们可以看到两个root表明了他的属主和属组,0代表为文件大小(字节),后面是上一次修改的时间
2.改变权限
1.使用chown改变文件的所有权 ,chown 新的属主:新的属组 文件名
我们将hello.txt文件改为cjm1用户和group属组,如下:
修改成功。
当然你也可以省略:group只修改属主,但是你想要只修改属组就必须保留:或者你直接使用chgrp来修改属组 chgrp 组名 文件名
2.使用chmod修改文件读写执行权限 chmod 用户组+/-权限
用户组有 u文件属主 g文件属组 a其他人
权限有 r写入 w写入 x执行
我们对hello.txt这个文件来做一次修改,现在他的权限如下:
那么我们现在让他对属组和其他人都是可写入的,那么我们就要使用+来添加权限(-是减少权限)操作如下:
发现现在hello这个文本文件对所有人都是可写可读的。
处理+/-还有= 用户1=用户2那么用户1的权限就和用户2相同了
六.文件类型
除了在上面看到的 - 表示的普通文件以外,linux还有以下几种:
d 目录 s 本地套接口 c 字符设备文件 b 块设备文件 l 符号链接 p 有名管道
七.建立链接
链接分两种一种是软连接一种是硬连接
软连接就是相当于取了一个别名当你删除这个别名时是没有任何影响的。软连接使用ln -s 文件名 引用名
我问对hello文件建立起一个软链接
那么我们现在打开hello和helloln是一样的效果
硬链接直接使用ln命令没有参数,那么你去修改两个文件中的任何一个另外一个都会去改变。
上一篇: Node 框架接入 ELK 实践总结
下一篇: Oracle树结构查询按层级排序