您现在的位置是:网站首页> 编程资料编程资料
linux用户与文件基础命令介绍(1)_linux shell_
2023-05-26
474人已围观
简介 linux用户与文件基础命令介绍(1)_linux shell_
linux系统是一个多用户多任务的分时操作系统,但系统并不能识别人,它通过账号来区别每个用户。每个linux系统在安装的过程中都要为root账号设置密码,这个root即为系统的第一个账号。每一个用这个账号登录系统的用户都是超级管理员,他们对此系统有绝对的控制权。通过向系统管理员进行申请,还可以为系统创建普通账号。每个用普通账号登录系统的用户,对系统都只有部分控制权。
我们知道计算机中的数据是以二进制0、1的形式存储在硬件之上的。在linux中,为了管理的方便,系统将这些数据组织成目录和文件,并以一个树形的结构呈现给用户。如下图所示:

其中处于顶端的/是根目录,linux下所有的文件均起始于根目录。另外很重要的一点,linux中不仅普通文档是文件,目录是文件,甚至设备、进程等等都被抽象成文件。这样做的目的是为了简化操作和方便管理。
于是,本文开始所说的控制权,即为用户对系统中文件的控制权。通常所说的某某文件的权限,是针对特定用户而言的。
另外,每一个登录的用户,在任意的时刻均处于某个目录之内,称为当前目录(current directory)。用户在刚刚登录的时候所处的目录是家目录,root用户的家目录是/root,普通用户的家目录通常为/home/user_name。在这里第一个字符/即是上文所说的根目录,root和home是根目录下的两个子目录名,要注意home后面的/是目录分隔符,而不是目录名的一部分,user_name是普通用户家目录的名字。
下面我们来看具体命令:
1、pwd 打印当前目录
pwd [OPTION]...
例如:
[root@centos7 ~]# pwd /root
2、cd 切换目录
cd [DIR]
例如切换到根目录然后打印当前目录(注意命令提示符的变化):
[root@centos7 ~]# cd / [root@centos7 /]# pwd /
这两个命令非常简单,简单到它们的选项都不常用,其中cd命令后面跟一个路径名。这个路径名可以是“绝对的”也可以是“相对的”。绝对的表示成以/为开头的路径名,如命令cd /usr/local/src中的路径名;相对的表示成相对于当前目录的路径名,若将linux中目录的包含与被包含关系比喻成父子关系的话,符号..代表的是父目录,符号.代表当前目录。
例:
假设当前所处目录为/usr/local/src,那么切换到根目录可以用两种方法:cd /和cd ../../..
[root@centos7 src]# cd ../../.. [root@centos7 /]# pwd /
然后再切换回root的家目录: cd root和cd ./root
[root@centos7 /]# cd ./root [root@centos7 ~]# pwd /root
另外如果cd后面任何参数都没有的时候,执行的效果是切换回家目录:
[root@centos7 /]# cd [root@centos7 ~]# pwd /root
3、ls 列出目录内容
ls [OPTION]... [FILE]...
当命令ls后不跟任何参数的时候显示当前目录的内容
[root@centos7 ~]# ls anaconda-ks.cfg install.log install.log.syslog
上面的例子显示了/root目录下的三个文件anaconda-ks.cfg、anaconda-ks.cfg、anaconda-ks.cfg。
选项-l可以使ls命令的结果以长格式显示:
[root@centos7 ~]# ls -l total 84 -rw------- 1 root root 1666 Jan 14 2016 anaconda-ks.cfg -rw-r--r-- 1 root root 55745 Jan 14 2016 install.log -rw-r--r-- 1 root root 5039 Jan 14 2016 install.log.syslog
显示结果的意思后述。
4、mkdir 创建目录
mkdir [OPTION]... DIRECTORY...
通常的使用方法是命令名之后直接跟目录名(可以多个),这里说一下linux文件命名的规则:linux允许文件名使用除字符/之外的所有字符,文件名的最大字符数为255(中文字符为127),linux不鼓励在文件名中出现特殊字符(容易引起混淆),文件名对大小写敏感。文件或目录数量限制与所使用的文件系统有关。
如当前目录下创建temp目录并用ls查看:
[root@centos7 ~]# mkdir temp [root@centos7 ~]# ls anaconda-ks.cfg install.log install.log.syslog temp
选项-p可以递归地创建子目录,如进入temp并创建目录dir1和dir2,dir1的子目录test:
[root@centos7 ~]# cd temp [root@centos7 temp]# mkdir -p dir1/test dir2 [root@centos7 temp]# ls dir1 dir2 [root@centos7 temp]# cd dir1 [root@centos7 dir1]# ls test
5、touch “创建文件”
touch [OPTION]... FILE...
其实此命令作用是修改文件时间,当指定的文件不存在时就会创建新文件。由于文件时间的更改可以通过许多其它途径,反而许多用户都误以为它就是创建文件的命令。如在temp目录下创建文件file1 在temp的子目录dir1下创建文件file2:
[root@centos7 temp]# touch file1 dir1/file2 [root@centos7 temp]# ls dir1 dir2 file1 [root@centos7 temp]# cd dir1 [root@centos7 dir1]# ls file2 test
6、useradd 添加账号
useradd [options] name
如创建一个名叫learner的账号:
[root@centos7 dir1]# useradd learner
useradd命令默认在创建用户账号的同时也会创建用户的家目录,同时更新系统中与用户相关的配置文件(linux中有许多配置文件,它们的作用是为软件运行设置环境信息、参数等,它们通常是纯文本的格式,方便用户变更其内容以改变软件运行环境。在linux中,大多数配置文件都处于目录/etc内,如与用户管理相关的配置文件:/etc/passwd,/etc/group,/etc/shadow,/etc/gshadow等)。
让我们进入新创建的用户家目录并用ls命令查看目录内容:
[root@centos7 dir1]# cd /home/learner [root@centos7 learner]# ls [root@centos7 learner]#
终端上并没有打印出任何信息,试试ls的-a选项:
[root@centos7 learner]# ls -a . .. .bash_logout .bash_profile .bashrc
选项-a作用是显示目录下所有文件,包括当前目录.和父目录..,linux中以.开头的文件是隐藏文件。在这里的三个隐藏文件是用户learner登录系统时所要用到的配置文件。
7、passwd 添加或更改账号口令
passwd [OPTION]... [NAME]
注意通过命令useradd新添加的账号并不能马上进行登录,还必须为账号添加口令为新用户learner添加口令:
[root@centos7 ~]# passwd learner Changing password for user learner. New UNIX password: xxxxxx #此处的xxxxxx并不在屏幕上显示 BAD PASSWORD: it is too simplistic/systematic #此处可能会给出密码太简单的警告 Retype new UNIX password: xxxxxx #重复输入,此处的xxxxxx不在屏幕上显示 passwd: all authentication tokens updated successfully.
当passwd命令后没有用户名直接执行时,它的作用是更改当前账号的口令。
8、cat 查看文件内容
cat [OPTION]... [FILE]...
如查看保存系统账号的配置文件/etc/passwd
[root@centos7 ~]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin .... learner:x:1000:1000::/home/learner:/bin/bash
这里节选了部分输出,我们看到新创建的账号learner的信息在文件最后一行。文件中每一行都被:分割为7列,拿第一行举例说明每一列所表示的含义:
1) root表示账号名。
2) x是口令,在一些系统中,真正的口令加密保存在/etc/shadow里,这里保留x或*。
3) 0是用户ID。
4) 0是用户组ID,对应着/etc/group文件中的一条记录。
5) root是描述性信息。
6) /root是用户家目录。
7) /bin/bash是用户的登录shell,每一个登录的用户,系统都要启动一个shell程序以供用户使用。
对应于新创建的用户learner来说,它的用户ID是1000,通常用户ID(UID)与用户名是一一对应的。root的UID是0。用户组ID(GID)如果在创建用户的时候没有被指定,那么系统会生成一个和UID号相同的GID,并把新用户放到这个组里面。用户组的意义是为了给权限控制增加灵活性,比如把不同的用户归到一个组之内,然后使文件针对这个组设置权限。
系统中还有一些登录shell为/sbin/nologin的用户,这些用户是“伪用户”,它们是不能登录的,它们的存在主要是为了方便管理,满足相应的系统进程对文件属主的要求。
9、head tail more less 查看内容
这四个命令使用和cat类似,只是显示方式的区别。
head从文件的第一行开始显示,默认显示10行,使用选项-n可以指定显示行数:
[root@centos7 ~]# head -n 3 /etc/group root:x:0: bin:x:1: daemon:x:2:
显示文件/etc/group的前三行。
/etc/group中每行被:分隔成4列:
1) 组名
2) 口令,linux中一般无组口令,此处一般为x或*
3) 组ID(GID)
4) 组内成员列表,多个用逗号分隔。如果字段为空表示用户组为GID的用户名。
tail默认输出文件的倒数10行内容,也可以用选项-n指定行数:
[root@centos7 temp]# tail -n 4 /etc/shadow postfix:!!:16814:::::: sshd:!!:16814:::::: tcpdump:!!:16994:::::: learner:$6$.U5pPYhu$h9TnYR9L4dbJY6b6VgnAQBG5qEg6s5fyJpxZVrAipHeeFhHAiHk6gjWa/xOfvWx.CzM2fvk685OEUc.ZdBYiC0:17095:0:99999:7:::
显示文件/etc/shadow的后4行。
/etc/shadow中保存的是账号密码等信息,每行被:分隔成9列:
1) 用户名
2) 加密的密码
3) 上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数)。
4) 两次修改口令间隔最少的天数;如果这个字段的值为空,帐号永久可用;
5) 两次修改口令间隔最多的天数;如果这个字段的值为空,帐号永久可用;
6) 提前多少天警告用户口令将过期;如果这个字段的值为空,帐号永久可用;
7) 在口令过期之后多少天禁用此用户;如果这个字段的值为空,帐号永久可用;
8) 用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
9) 保留字段,目前为空,以备将来发展之用;
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。
另外命令tail还有个常用选项-f,作用是随着文件内容的增加而输出,默认输出间隔为1s。
more和less两个命令的作用都是分页显示文件内容,区别是more不允许往回翻,只能用enter键和空格键分别显示下一行和下一页(类似于man命令),less允许往回翻,向上箭头和pageup按键也是可用的。读者可自行实验这两个命令,这里不再举例。
10、groupadd创建用户组
groupadd [OPTION] group
选项'-g'可以为新创建用户组指定GID。如创建一个新用户组group1并指定其GID为1005,然后再新创建一个用户tom,使他的UID为1002,GID为1000,登录shell为/bin/sh:
[root@centos7 ~]# groupadd -g 1005 group1 [root@centos7 ~]# useradd -u 1002 -g 1000 -s /bin/sh tom [root@centos7 ~]# tail -n 1 /etc/passwd tom:x:1002:1000::/home/tom:/bin/sh [root@centos7 ~]# tail -n 1 /etc/group group1:x:1005:
这里useradd命令的选项-u、-g和-s分别指定新用户的uid、gid和登录shell。
11、chmod 改变文件权限
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
在看此命令用法之前,我们先来解释一下命令ls的选项-l的输出:
[root@centos7 temp]# ls -l 总用量 0 drwxr-xr-x 3 root root 29 10月 21 20:34 dir1 drwxr-xr-x 2 root root 6 10月 21 20:33 dir2 -rw-r--r-- 1 root root 0 10月 21 20:34 file1
这部分输出被分为7个部分:
1) -rw-r--r-- 10个字符中第一个字符-代表文件类型,linux中文件共有7种类型,分别表示如下:
d:代表文件是一个目录
l:符号链接
s:套接字文件
b:块设备文件
c:字符设备文件
p:命名管道文件
-:普通文件,或者说除上述文件外的其他文件
剩下的9个字符每三个一组,表示这个文件的权限,linux中文件权限用二进制的000-111(一位八进制数)来分别代表文件的权限,其中:
r(read):读权限(如果是文件表示读取文件内容,如果是目录表示浏览目录)。二进制第一位置1即100,十进制为数字4。
w(write):写权限(对文件而言,具有新增、修改文件内容的权限,对目录来说,具有删除、移动目录内文件的权限。)。二进制第二位置1即010,十进制为数字2。
x(execute):执行权(对文件而言,具有执行文件的权限;对目录来说具有进入该目录的权限。)。二进制第三位置1即001,十进制为数字1。
-(无权限):当没有上述权限时。二进制表示为000。
这样本例中最后一行文件file1权限:
前三个字符`rw-`表示文件的所有者(`owner`)对文件具有读和写的权限,十进制数字为4+2=6。
中间三个字符`r--`表示文件的所属组(`group`)对文件具有读权限,十进制数字为4。
最后三个字符`r--`表示系统中其他用户(`others`)对文件具有读权限,十进制数字为4。
这样文件的权限可以用十进制数字`644`来表示。
对于目录dir1来说:
前三个字符`rwx`表示目录所有者(`owner`)对其具有读、写和执行的权限,十进制表示为4+2+1=7。
中间三个字符`r-x`表示目录的所属组(`group`)对其具有读和执行的权限,十进制表示为4+1=5。
后三个字符`r-x`表示系统中其他用户(`others`)对其具有读和执行的权限,十进制表示为4+1=5。
这个目录权限用十进制表示即为`755`,注意文件和目录相同权限之间的区别。
2) 权限后面的数字代表文件的硬链接数
3) root文件的所有者,有时表示为用户的UID。
4) root文件的所属组,有时表示为用户组的GID。
5) 文件大小,以字节`Byte`为单位。
6) 10月 21 表示文件内容最近一次被修改的时间。
7) 最后一列为文件名。
如给文件file1的用户组增加执行权限:
[root@centos7 temp]# chmod g+x file1 [root@centos7 temp]# ls -l file1 -rw-r-xr-- 1 root root 0 10月 21 20:34 file1
这里g+x表示给group增加执行x的权限。
如给文件file1的其他人减少读权限:
[root@centos7 temp]# chmod o-r file1 [root@centos7 temp]# ls -l
相关内容
- linux网络相关命令汇总(6)_linux shell_
- bash脚本编程学习之算术运算与文件查找_linux shell_
- 一个简单的linux命令 pwd_linux shell_
- 一个简单的linux命令 mkdir_linux shell_
- 深入理解Shell输出颜色与控制_linux shell_
- shell(bash)下“time” 命令的输出详解_linux shell_
- Shell交互批量更改主机名的方法_linux shell_
- shell两个文件去重的多种姿势_linux shell_
- 用Shell判断字符串包含关系的方法小结_linux shell_
- Linux运维常用命令_linux shell_
点击排行
本栏推荐
