文章目录
一、用户及用户组操作
1. 创建新用户
• 利用sudo -i的指令,输入自己设置的密码,进入root用户。
• 利用gedit /etc/passwd查看我们需要建的用户是否已经存在,这里会直接打开一个文件,gedit是一种文件编辑器的打开指令,这份文件向我们展示了当前系统中存在的全部用户名,显示的格式为用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell,因此我们可以通过观察该文件的第一列是该系统当中已经存在的用户名。
• 我们简单的创建一个新的账户,名称为qq,那么我们就查看name字段中有没有qq。如果没有,那么继续执行下面的命令:adduser qq。修改后的指令,可以看到系统已经在自己创建一个新的用户,再次使用gedit /etc/passwd查看发现最后生成了qq这个用户:
• useradd命令参数意义:
-r:建立系统账号
-m:自动建立用户的登入目录
-s:指定用户登入后所使用的shell
• 登录到qq用户中:
2. 改变和增加用户组
• 如何将现有用户添加到组中
要将现有用户添加到辅助组,请使用usermod命令,然后使用- G选项和该组的名称:
sudo usermod -a -G groupname username
例如,要将用户myfreax添加到名为sudo的组中,您需要运行以下命令:
sudo usermod -a -G sudo myfreax
将用户添加到新组时,始终使用-a(附加)开关。如果省略-a开关,则该用户将从-G开关之后未列出的任何组中删除。成功后,usermod命令将不会显示任何输出。仅当用户或组不存在时,它才会警告您。
• 如何在一个命令中将现有用户添加到多个组
如果要在一个命令中将现有用户添加到多个辅助组,请使用usermod命令,然后使用以,(逗号)分隔的组的-G选项名称:
sudo usermod -a -G group1,group2 username
• 如何从群组中删除用户
要从组中删除用户,请使用gpasswd命令,在以下示例中,我们从名为groupname的组中删除名为username的用户:
sudo gpasswd -d username groupname
• 如何创建群组
要创建新的组,请使用groupadd命令,后跟组名称:
sudo groupadd groupname
• 如何删除群组
要删除现有的组,请使用groupdel命令,后跟组名称:
sudo groupdel groupname
• 如何更改用户的主要组
要更改用户主要组,请使用usermod命令,然后使用-g选项:
sudo usermod -g groupname username
在以下示例中,我们将用户myfreax的主要组更改为developers:
sudo usermod -g developers myfreax
• 显示用户组
要显示完整的用户信息,包括用户所属的所有组,请使用id命令,后跟用户名:
id username
如果省略用户名,该命令将打印有关当前登录用户的信息。让我们检查一下用户myfreax:
id myfreax
uid=1000(myfreax) gid=100(users) groups=100(users),10(wheel),95(storage),98(power),990(libvirt),993(docker),999(kvm)
从上面的输出中,我们看到此用户的主要组是users,它属于wheel,storage,libvirt,docker和kvm补充组。
使用groups命令显示用户的补充组:
groups myfreax
二、 文件与目录操作
1、创建和改变目录
Linux下基本的目录操作
/bin目录保存引导系统所需要的全部可执行程序以及最常用的Linux命令
/boot目录用来存放Linux启动时所需要的一些数据和文件
/dev目录包含有链接硬件设备的文件
/etc目录含用于管理Linux系统的文件和工具
/home目录用来存放各个用户的主目录
/lib目录含有C编译程序所需要的函数库
/usr目录包含X Windows系统的可执行程序、函数库以及游戏等
• 显示当前目录的目录名 pwd命令可以显示当前的绝对路径名称
• 改变当前目录,cd指令,我们可以看到当输入cd aa后,显示就会出现一个自己输入的绝对路径,在这个目录下在输入cd后就会进入到自己的home directory,如果在输入一个/就会把当前目录改变为根目录,我们在打开文件的时候有时候出现找不到该文件的错误可以就是有意路径没有书写正确造成的。
• 使用ls命令的各种选项查看文件与目录属性,当输入ls后,该系统中的文件就会显示出来,这里我们可以看到之前建立的test文件以及用于通讯的客户端和用户端文件
利用ls -l指令可以看到每一个文件最后一次修改的时间,使用带参数“l”(小写的“L”)的ls命令可以 显示当前目录下所有的文件名、文件的类型、文件的访问权限、文件的链接数、文件拥有者 及其所属的组、文件大小和文件最近一次被修改的日期和时间等属性例如:
第1字段:是文件属性字段,文件属性字段总共有10个字母组成,第一个字符表示文件类型:
字母“-”表示该文件是一个普通文件;
字母“d”表示该文件是一个目录;
字母“l”表示该文件是一个链接文件;
字母“b" 表示该文件是块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,一类特殊文件;
字母“c”表示该文件是一个字符设备文件(character);
字母“p”表示该文件为命令管道文件。与shell编程有关的文件;
字母“s”表示该文件为sock文件。与shell编程有关的文件。
第1字符的后面9个字母表示该文件或目录的权限位。其中前三个表示文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限。r表是读 (Read) 、w表示写 (Write) 、x表示执行 (execute)。
• 创建和删除目录
创建目录可以利用mkdir建立,例如我们要在文件夹aa里面新建一个名称为bb的文件夹,那么指令为mkdir bb。
删除一个目录时可以利用rmdir指令,但是这个指令不能删除非空的目录,比如说在我们刚刚建立的bb文件夹中还包含其他文件,那么利用rmdir就不能直接对他进行删除操作,而且在写目录地址时需要将每一层都写清楚,否则会出现找不到这个目录的错误提示。下图中我们可以看到已经成功删除了aa文件夹中的bb文件夹:
2、创建和改变文件
• 创建0长度的文件,利用touch指令后面加上需要创建的文件名称就可以完成一个0长度的文件。同时,touch指令也可以将已存在的文件的时间标签改修改为系统当前的时间(默认),也可以通过参数指定时间,但是数据原封不动。
• 拷贝、移动、重命名及删除文件
首先,我们先用mkdir建立两个文件一个名为22,另一个为11,并在11文件中输入一些非常简单的字符。如果想要把这个文件拷贝到world文件夹中需要利用cp指令前一个地址为原地址,后一个为要拷贝到的地址,注意需要拷贝的文件需要带上文件后缀名称:
如果我们想要将原来22文件进行删除,就可以利用rm指令,但是要注意在删除文件的路径前加入“.”,否则就不能表示为路径。从下图中我们可以看到,hello下的文件已经被删除:
在终端中的操作对于文件的移动和重命名其实是一样的,重命名就是输入相同的地址但是最后的文件名称不相同,要是需要移动文件就需要不同的文件路径,这里我们做了一个文件名称的更改:
• 查看文件的内容
cat指令可以将代码进行带行数的显示,这里的-n是一种选项就是将空行的行数也进行了标注,但是如果想要忽略空行的行数,就可以选择-b或者-n选项:
more指令可以将部分文件内容按照行数号进行输出,例如这里就是将./aa/11文件中从第2行以后的文件进行输出:
cat和more两个命令都用于显示一个文件的内容。cat命令将文件的所有内容全部显示出来,显示过程中没有暂停,因此对于一个大文件来说,使用cat命令来显示其内容是不方便的。显示大文件的一个常用命令是more命令,该命令每次只显示一个屏幕的内容,等待用户按键后再显示下一屏幕的内容。
3、创建链接
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。
链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。符号连接相当于Windows下的快捷方式。
1、硬链接
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。
语法:
ln [options] existingfile newfile(existingfile 待建立链接文件的文件,newfile是新创建的链接文件)
ln [options] existingfile-list directory
-f 建立时,将同档案名删除.
-i 删除前进行询问.
ln -s abc cde 建立abc 的软连接
ln abc cde 建立abc的硬连接,
用法:
第一种:为”existingfile”创建硬链接,文件名为”newfile”。
第二种:在”directory”目录中,为”existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。
注意在创建链接前,file1 显示的链接数目为1,创建链接后file1和file1hard的链接数目都变为2;file1和file1hard在inode号是一样的file1和file1hard显示的文件大小也是一样。可见进行了ln命令的操作结果:file1和file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为file1的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm file2 ,每次只会删除一个指针,链接数同时减一,当链接数减为0时,内核才会把文件内容从磁盘上删除。
还可以在不同目录,但同一文件系统中建立文件的硬链接。设file1、file2在目录/home/root/dir1中,下面的命令,在/home/root中建立file2的硬链接。
ln file2 /home/root/file2hard
下面的程序,是将dir1目录中所有文件,在目录dir2中建立硬链接
#mkdir dir2
#ln /home/root/dir1/* /home/root/dir2
如果使用了 ln –f existingfile newfile,如果newfile已经存在,则无论原来newfile是什么文件,只用当前用户对它有写权限,newfile就成为exisitngfile的硬链接文件。
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:
(1)不可以在不同文件系统的文件间建立链接
(2)只有超级用户才可以为目录创建硬链接。
二、软链接(符号链接)
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。区别:硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,而这里软链接显示的大小与原文件就不同了。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。
三、改变目录及文件权限
1、预备知识:
• 在linux系统中,每个文件或者一个目录属于 一个用户或一个组。Linux权限通过允许每个文件系统对象设置三种独立的权限级别来工作 。3种独立的权限级别为:
文件拥有者(u);
文件拥有者所在用户组中的其它成员(g);
所有其它用户(o)。
• 每个文件均拥有下列三种权限:
read (r): 查看文件内容
write (w): 修改文件
execute (x): 如同命令一样执行文件。
• 每个目录均拥有下列三种权限:
read (r): 列出目录内容
write (w): 在目录中增删文件
execute (x): 访问目录中的文件
• 当你修改文件得权限的时候,文件的全部信息,包括:
文件的位置。
文件类型。
文件长度。
哪位用户拥有该文件,哪些用户可以访问该文件。
i节点。
文件的修改时间。
文件的权限位。
• 在进行各种操作时,首先必须弄清楚自己所在的目录。如果你对自己目前的位置失去了感觉,那么各种命令可能都会失效。最有效的方法就是,经常使用pwd命令,来查看你所在的当前目录。
举例:
$cd /bin
$pwd /bin
2、使用长列表命令来查看文件与目录的信息
• 对一个文件使用ls –l 命令,就会按如下顺序显示下列信息:
文件类型(第1个字符)
- : 普通文件
d: 目录
l: 符号链接
c: 字符型设备节点
b: 块设备节点
文件访问权限(接下来的9个字符,每3个一组依次代表user、group和other)。
文件的硬链接数。
文件拥有user的用户名。
文件所属group的用户组名。
文件的字符数size (bytes)。
文件的date and time (mtime)。
文件的name。
在Linux下用ls -l 查看根目录:
3、解释文件与目录权限中各位的含义
• 以上面的aa目录为例:
drwxrwxr-x 2 zn root 4096 11月 1 23:41 aa/
第一个字符为d,表示它是一个目录文件,接下来9个字符每三位分别代表所有者权限、同组用户权限和其他用户权限,在上例中,九个字符分别为:rwx、rwx、r-x,因此aa文件夹具有所有者类中的读写和执行权限,对于组类有读写和执行权限,而对于其他用户类只有读和执行权限。
后面的信息依次表示aa文件夹的硬链接数为2,文件所属的用户名为zn,文件所属组名为 root,文件大小为4096byte,最后是文件创建的时间和文件名。
4、对普通文件与目录的权限进行操作
• chmod命令(权限符号法):
chmod命令的一般格式为:
chmod [who] operator [permission] filename
who 的含义是:
u 文件属主权限。
g 同组用户权限。
o 其他用户权限。
a 所有用户(所有者、同组用户及其他用户)。
operator的含义:
+ 增加权限。
- 取消权限。
= 设定权限。
permission的含义:
r 读权限。
w 写权限。
x 执行权限。
s 文件属主和组set-ID。
t 粘性位*。
l 给文件加锁,使其他用户无法访问。
下图中的chmod指令a+x表示将11文件的所有用户加上执行权限。用ls -l查看可以发现11的权限已经被修改。
5、 chmod命令(二进制掩码法):
二进制掩码法(绝对方法)就是使用八进制数字作为掩码来设置 不同的文件权限。每个八进制数字应用于一种用户类。你可以将这个数字想象为从所有者类 开始从左到右与权限类别相匹配。第一个八进制数字应用于所有者类,第二个是同组类,而第三个是其他用户类。
你所选择的实际的八进制数字可以为每个用户类确定读、写和执行权限。从这一点上说,需要了解八进制数字是如何转换为二进制格式的。
可以认为首先将八进制数转换为二进制格式,然后每 个三位二进制数字用于设置读、写和执行权限。每个二进制数字从左到右和相应的权限相匹配。如果一个 二进制数字是0,那么该权限则被禁止,如果是1则被打开。第一个二进制位设置了读权限的打开与关闭, 第二个设置了写权限,第三个设置了执行权限。
例如,一个八进制数字6转换为二进制数字110。这会将读写权限打开,执行权限关闭。
由八进制到二进制的转换很麻烦,有个简便方法:如果赋予读权限,算4;如果赋予写权限,算2;如果赋予执行权,算1;将这些数字累加起来,如果同时拥有读取和写权限,那就是2+4=6,也就是二进制里面的110。
举例:
$chmod 666 myfile :
赋予所有用户读和写的权限(读+写=2+4=6)
$chmod 744 myfile :
赋予文件所有者读、写和执行的权限(读+写+ 执行=1+2+4=7),所有其他用户读的权限(读=4)。
在下面的例子中,我们将11文件设置成当前用户可读写和执行,而当前组和其他组不可读写但是可执行。
6、更改文件和目录所属的用户和组
1、chown命令:
• chown命令的一般形式为:
chown -R -h owner file
-R选项意味着对所有子目录下的文件也都进行同样的操作。
-h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。
举例:在终端中运行:
$ls –l 11
我们可以看到文件的拥有者是zn。
接着运行:
$ chown root 11
运行完成后我们继续运行:
$ ls –l 11
我们可以看到文件的拥有者是root。
• 改变文件所有者的命令为chgrp
chgrp命令的使用方式与chown基本相同: chgrp –R –h group file
-R选项意味着对所有子目录下的文件也都进行同样的操作。
-h选项意味着在改变符号链接文件的所属组时 不影响该链接所指向的目标文件。
举例:在终端中运行:$ ls –l 11
我们可以看出文件所属的用户组为zn。
接着运行:$ chgrp root 11
然后继续运行:$ ls –l 11
可以看出文件的所属的组为root。
然后查看文件夹里面的11文件,发现在普通用户下已经被锁住无法打开和查看。
• 如果你想知道自己属于哪几个用户组,可以使用groups 和id命令:
$ groups 或 $ id
如果想要知道其它用户属于哪几个用户组,就在group 命令后面接上用户名,如: $ groups zn
上面的命令告诉我们,zn属于zn adm cdrom sudo dip plugdev lpadmin sambashare这些用户组。