对Linux
文件系统目录结构的了解是学习和掌握Linux
系统的基础。Linux
文件系统是树形层次结构,具体如下图所示。
Linux
用户通常分为两类:
root
);Windows
上的普通用户)。Linux
登录系统后,默认当前所在目录为用户主目录,类似Windows
登录系统后,默认的所在目录为桌面。
root
)登录系统后默认目录为/root
;/home/username
, username
为用户名。 例如:笔者用普通用户fzm
登录系统后,那么当前所在目录为。/home/fzm
。pwd(Print Working Directory )
:显示当前所在目录。
例如:笔者用普通用户fzm
登录系统后,那么当前所在目录为/home/fzm
。
cd(Change Directory)
: 切换当前目录。
常用特殊目录表示:
cd
参数使用。例如:切换当前目录为/bin
目录。
ls(list)
: 列出指定目录列表信息,如果没有参数默认列出当前目录下的所有文件和文件夹(隐藏文件和文件夹除外)。
常见ls
命令选项:
例如:显示根目录下所有文件和文件夹。
为了掌握本关知识,你需要掌握:
Linux
文件操作之创建文件,删除文件;Linux
文件夹操作之创建文件夹、删除文件夹、文件和文件夹拷贝、移动/重命名。Linux
系统中最常用的文件操作有创建、删除文件等。
linux中创建文件的常用命令是touch
,命令格式如下:
touch filename
有时可能需要创建一个空的文件的情况。在这种情况下,可以使用touch
命令来轻松创建一个空文件。
例如:创建一个新的文件testfile
可以使用如下命令。
touch testfile
如果想同时创建多个文件也可以使用touch
命令完成,具体格式如下:
touch file1 file2 ...
只需将不同的文件名用空格分隔即可完成创建多个文件。
Linux
中常用的删除文件的命令是rm
,使用格式如下:
rm [命令选项] filename
常用命令选项:
-f:强制删除文件或目录; -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理; -i:删除已有文件或目录之前先询问用户。
例如,删除我们刚刚创建的文件testfile
可以使用如下命令。
rm -f testfile
Linux
中关于文件夹的操作主要包括创建和删除等。
Linux
中创建文件夹命令是mkdir
,命令格式如下:
mkdir [命令选项] dirname
常用命令选项: -p或--parents
若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
例如:我们新创建一个文件夹testdir
可以使用如下命令。
mkdir testdir
Linux
中删除文件夹的命令是rmdir
或者rm -r
,命令格式如下:
rmdir [命令选项] dirname
常用命令选项:-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
例如:将刚刚新创建的文件夹testdir
删除可以使用如下命令。
rmdir testdir
Linux
使用cp
命令用来将一个或多个源文件或者目录复制到指定的目录中,命令格式如下:
cp [命令选项] 源文件 目的文件
常用命令选项:
-f:强行复制文件或目录,不论目标文件或目录是否已存在;-i:覆盖既有文件之前先询问用户;-p:保留源文件或目录的属性;-R/r:递归处理,将指定目录下的所有文件与子目录一并处理。
例如:新建一个文件newfile
和一个文件夹newdir
,将newfile
复制到newdir
目录下。具体命令如下。
touch newfilemkdir newdircp newfile newdir
Linux使用mv
命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中,命令格式如下:
mv [命令选项] 源文件 目标文件
常用命令选项:
-f:强行复制文件或目录,不论目标文件或目录是否已存在; -i:覆盖既有文件之前先询问用户;-p:保留源文件或目录的属性;-R/r:递归处理,将指定目录下的所有文件与子目录一并处理'。
例如:新建一个文件newfile
和一个文件夹newdir
,将newfile
剪切到newdir
目录下,并重新命名为newfileCpy
。具体命令如下。
touch newfilemkdir newdirmv newfile newdir/newfileCpy
根据右侧窗口命令行内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
newfile
);newdir
);newfile
文件复制一份到newdir
目录下并命名为newfileCpy
。linux中使用man
命令来查询命令的帮助文件,命令格式如下:
man [章节] command
常用命令如下:
d, Ctrl+D: 向文件尾部翻半屏;u, Ctrl+U: 向文件首部翻半屏; q: 退出; #:跳转至第#行; home: 回到文件首部; end:翻至文件尾部。
命令的帮助文件通常存放在/usr/share/man
目录下。
man
包含9
个章节,章节用数字表示,分别是:
用户命令 系统调用 C库调用设备文件及特殊文件 配置文件格式 游戏杂项 管理类的命令Linux 内核API
如果查询命令的时候不追加章节,则默认从第一个章节开始查询,以此类推,直到找到对应要查询的命令为止。
例如:使用man
命令查询open
命令的使用方法。
man open
如果想查询系统库函数的open
函数的使用方法,则使用如下命令:
man 2 open
使用man
搜索命令 以KEYWORD
指定的字符串为关键字,从当前位置向文件首部搜索,不区分字符大小写;
n: 下一个 N:上一个
linux中使用info
命令来查询命令的帮助文件。info
页面比man page
编写得要更好、更容易理解,也更友好,但man page
使用起来确实要更容易得多。一个man page
只有一页,而info
页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。
命令格式如下:
info [命令参数] command
常用命令参数选项:
-d:添加包含info格式帮助文档的目录;-f:指定要读取的info格式的帮助文档;-n:指定首先访问的info帮助文件的节点;-o:输出被选择的节点内容到指定文件。
常见命令如下:
?键:它就会显示info的常用快捷键;N键:显示(相对于本节点的)下一节点的文档内容;P键:显示(相对于本节点的)前一节点的文档内容;U键:进入当前命令所在的主题;M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了;G键:敲G键后输入主题名称,进入该主题;L键:回到上一个访问的页面;SPACE键:向前滚动一页;BACKUP或DEL键:向后滚动一页;Q:退出info。
例如:我们使用info
来查询info
的帮助手册。
info info
whatis
用来显示命令的简短描述。
命令格式如下:
whatis command
例如:我们使用whatis
来查询ls
的使用方法。
根据右侧窗口命令行内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
C
库中的fopen
函数使用方法。为了完成本关任务,你需要掌握如下知识:
Linux
创建用户命令Linux
删除用户命令Linux
中使用useradd
命令来创建一个新用户。
命令格式格式:useradd [命令参数] 参数
常见命令参数:
shell
。useradd
必须以root
权限才能执行,如果是普通用户想创建一个新用户时,需要在命令前加sudo
命令来提升权限为root
权限。
1 . 查看useradd
系统默认属性值,使用命令useradd -D
。
笔者使用的系统是Ubuntu16.04
,useradd
系统默认值如下所示:
2 . 使用useradd
命令新创建一个用户test
,并且自动建立用户的登入目录。
Linux
中使用userdel
命令来删除一个已经存在的用户。
命令格式:userdel [命令参数] 参数
常见命令参数:
userdel
必须以root
权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo
命令来提升权限为root
权限。
1 . 使用userdel
命令删除一个已经存在的用户test
,并且自动删除其家目录文件。
因为系统默认是不会给新创建的用户自动创建一个文件夹用于用户账户接收邮件,所以在使用userdel -r
命令删除的时候会提醒/var/mail/test
文件夹不存在。
根据右侧窗口命令行内的提示,在Begin - End
区域内进行代码补充,具体任务如下:
新创建一个用户newUser
,并自动创建其登录目录;
useradd -m newUser
删除系统已经存在的用户oldUser
,并自动删除其关联的登录目录;
userdel -r oldUser
将当前工作目录切换到新创建的用户newUser
家目录;
cd ~ /home/newUser
使用pwd
命令打印出当前工作目录。
pwd
通过本关学习,你将掌握如下知识点:
Linux
中用户登录密码存放地以及方式passwd
命令修改用户密码chpasswd
命令修改用户密码Linux中用户的登录密码是存放在/etc/shadow
文件中,/etc/shadow
文件中存放的是加密过后的密码,所以在/etc/shadow
文件中看到的密码是加密过后的密文。
看下笔者的电脑中/etc/shadow
文件存放的内容格式。
可以看到第一个冒号前是用户名,用户名是以明文的方式存放。
在第一个冒号和第二个冒号之间存放的是加密过后的密码,密码是以密文的方式存放,其中密文是由用户密码和其它信息加密后组成的,这里不做详细讲解,我们只需要知道如果第一个冒号和第二个冒号之间是*
或者!
或者空,则表示该用户没有密码,否则,则表示该用户是有密码。
例如:用户名fzm
是存在密码,而mysql
是不存在密码的。
命令格式:passwd [命令参数] 参数
常见命令参数:
passwd
必须以root
权限才能执行,如果是普通用户想执行passwd
时,需要在命令前加sudo
命令来提升权限为root
权限。
1: 使用useradd
命令来新创建一个用户,使用passwd
命令来设置登录密码。
使用useradd
命令创建一个新用户(test
),此时test
用户是没有密码的,所以使用tail -n 1 /etc/shadow
命令查看/etc/shadow
文件的最后一行可以看出test
用户密码部分为!
。
使用passwd
命令为test
用户设置密码时,可以看到需要输入两次密码,目的是为了确保两次输入的密码一致。当设置完密码后,可以看到/etc/shadow
文件中test
用户的密码部分已经为加密过后的密文。
2: 使用passwd
命令来清除用户的密码。
使用passwd
命令清除用户test
的登录密码,使用tail -n 1 /etc/shadow
命令查看/etc/shadow
文件的最后一行可以看出test
用户密码部分为空,此时test
用户是没有密码的。
chpasswd
命令通常是用于批量修改用户密码,从标准输入批量读取成对的用户名和密码,其中输入的用户名和密码的格式为 用户名:密码
。
例如要批量更新用户密码,将用户名和密码写入到一个文件中,格式如下所示:
sudo chpasswd < batch.txt
`<符号表示输入重定向,接下来的实训中我们会详细的介绍。
命令格式:chpasswd [命令参数] 参数
常见命令参数
chpasswd
必须以root
权限才能执行,如果是普通用户执行时,需要在命令前加sudo
命令来提升权限为root
权限。
1: 使用chpasswd
命令来更新用户登录密码。
chpasswd
是从键盘不断的读入指令,我们可以使用Ctrl+D
组合键来结束键盘输入。
根据右侧窗口命令行内的提示,在Begin - End
区域内进行命令行语句补充,具体任务如下:
#!/bin/bash
#创建newUser新用户
#***********begin*************#
#新创建一个用户newUser;
useradd newUser
#使用passwd命令为用户newUser设置登录密码;
passwd newUser << EOF
123456
123456
EOF
#************end**************#
通过本关学习,你将掌握如下知识点:Linux
用户登陆的三种方式
Linux
中添加用户后,用户在图形界面登录系统的方式和Windows
一样,都是选择要登录的用户后直接输入登录密码即可。
1: 添加一个新用户,并且设置登录密码,然后在图形界面登录。
login
命令是让用户登录系统,可通过它的功能随时更换登入身份。当/etc
目录里含名称为nologin
的文件时,系统只允许root
帐号登入系统,其他用户一律不准登入。
当使用login
命令登录系统后,可以使用logout
命令或者exit
命令来退出当前用户登录,返回到登录前的用户状态。
命令格式:login [命令参数] 参数
参数为登录的用户名,可以不输入登录的用户名,直接输入login
命令后回车,然后根据提示再输入用户名和密码。
常见命令参数
login
必须以root
权限才能执行,如果是普通用户执行时,需要在命令前加sudo
命令来提升权限为root
权限。
1: 使用login
命令来登录系统(文件/etc/nologin
不存在)。
首先查看当前登录的用户名是fzm
。
使用logout
或者exit
命令退出newUser
用户,然后在查看当前登录用户是否为fzm
。
2: 使用login
命令来登录系统(文件/etc/nologin
存在)。
首先查看当前登录的用户名是fzm
。
在/etc
目录下新创建一个nologin
文件,使用如下命令创建:
sudo touch /etc/nologin
使用普通用户newUser
来登录系统,查看是否可以登录成功。
发现使用newUser
用户是无法登录系统的,只有使用root
用户才能登录系统。
su
命令切换用户身份su
命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号的密码。
当使用su
命令切换用户后,使用exit
命令退出当前身份,返回原有登录用户身份。
注:如果当前用户身份是root
,则使用su
命令切换到其他用户的时候不需要相应用户的密码
命令格式:su [命令参数] 参数
参数为登录的用户名,如果没有参数,则默认切换为root
用户。
常见命令参数
-c<指令>
或--command=<指令>
:执行完指定的指令后,即恢复原来的身份;-l
或--login
:改变身份时,也同时变更工作目录,以及HOME
,SHELL
,USER
,logname
。此外,也会变更PATH变量;-m
,-p
或--preserve-environment
:变更身份时,不要变更环境变量;-s
或--shell=
:指定要执行的shell
。su
命令所有使用者都可以执行。
1: 使用su
命令切换当前用户身份(不改变当前工作目录)。
首先查看当前登录的用户名是fzm
,当前工作目录是/home/fzm
。
切换当前用户为newUser
用户,然后查看当前用户身份和当前工作目录。
使用exit
命令退出newUser
用户,然后在查看当前登录用户身份和当前工作目录。
2: 使用su
命令切换当前用户身份(改变当前工作目录)。
首先查看当前登录的用户名是fzm
,当前工作目录是/home/fzm
。
切换当前用户为newUser
用户,然后查看当前用户身份和当前工作目录。
使用exit
命令退出newUser
用户,然后在查看当前登录用户身份和当前工作目录。
根据右侧窗口命令行内的提示,在Begin - End
区域内进行命令行语句补充,具体任务如下:
- 新创建一个用户newUser,并且设置登录密码;
useradd -m newUser
passwd newUser << EOF
123456
123456
EOF
- 使用su命令切换当前用户身份为newUser,并且执行whoami指令,然后恢复原来的身份。
su -c whoami newUser
exit
Linux
中使用groupadd
命令来创建一个新用户组。
命令格式:groupadd [命令参数] 参数
常见命令参数:
groupadd
必须以root
权限才能执行,如果是普通用户想使用该命令,需要在命令前加sudo
命令来提升权限为root
权限。
使用groupadd
命令新创建一个用户组testGroup
在背景介绍中,我们了解到,Linux
中用户组信息是保存在/etc/group
文件中,我们可以使用命令tail /etc/group
命令查看/etc/group
文件最后10行中是否存在刚刚新创建的testGroup
用户信息。
使用groupadd
命令新创建一个用户组testGroupID
,并且指定组的ID
注意:我们可以看到有时执行sudo
命令就不需要输入密码,这是因为每次都输入密码比较麻烦,所以Linux
会设置一个sudo
的会话时间,就是说我们在第一次执行sudo
的时候是要输入密码,那么在接下来的一段时间内在执行sudo
的时候就不需要输入密码,这个会话时间默认是5
分钟,用户也可以通过编辑/etc/sudoers
来修改这个会话时间的大小。
同样我们可以使用命令tail /etc/group
命令查看/etc/group
文件最后10
行中是否存在刚刚新创建的testGroupID
用户信息。
Linux
中使用groupdel
命令来删除一个已经存在的用户组。
命令格式:groupdel 参数
参数为要删除的用户组名
groupdel
必须以root
权限才能执行,如果是普通用户想使用该命令,需要在命令前加sudo
命令来提升权限为root
权限。
使用groupdel
命令删除上面创建的testGroup
和testGroupID
组
根据右侧窗口命令行内的提示,在Begin - End
区域内进行命令行语句补充,具体任务如下:
新创建一个用户组newGroup
;
groupadd -r newGroup
新创建一个用户组newGroupID
,并自设置其ID
为1010
;
groupadd -g 1010 newGroupID
删除已经存在的用户组oldGroup
。
groupdel oldGroup
Linux
中查看一个用户所属的组两种方法。
id
命令查看。命令格式:id [命令参数] 参数
参数为要查询的用户名,默认是当前登录用户。
常见命令参数:
-g或--group
:显示用户所属群组的ID
;-G或--groups
:显示用户所属附加群组的ID
;-n或--name
:显示用户,所属群组或附加群组的名称。id
命令的执行权限是面向所有用户。
案例演示:
使用id
命令查看用户fzm
所属组。
group
命令查看。命令格式:groups 参数
参数为要查询的用户名,默认是当前登录用户。
执行权限:groups
命令的执行权限是面向所有用户。
案例演示:
使用groups
命令查看用户fzm
所属组。
一个用户是可以属于多个组的。
如果要一个用户仅仅属于某一个组,而不是同时属于多个组,则使用如下命令:
命令格式:usermod -g 组名 用户名
如果要给一个用户添加一个新的组,同时保留原来有所的组,则使用如下命令:
命令格式:usermod -a -G 组名 用户名
usermod
必须以root
权限才能执行,如果是普通用户想执行usermod
时,需要在命令前加sudo
命令来提升权限为root
权限。
案例演示一:
新创建一个用户newUser
和新创建一个用户组newGroup
,使用usermod
命令将newUser
用户所属组修改为newGroup
。
首先,创建用户newUser
和组newGroup
,使用groups
命令查看用户newUser
所属的组,因为默认情况下新创建用户的时候会默认创建一个与用户名同名的私有组,并将新创建的用户所属组设置为私有组。接下来使用usermod
命令来修改用户所属组,最后查看修改是否成功。
案例演示二:
新创建一个用户newUser
和新创建一个用户组newGroup
,使用usermod
命令为newUser
用户新添加一个组newGroup
。
首先,创建用户newUser
和组newGroup
,使用groups
命令查看用户newUser
所属的组。接下来使用usermod
命令来为用户添加一个新的组,最后查看添加是否成功。
在创建新用户的同时可以修改默认用户所属组,如果想在创建的时候直接将用户所属组修改成系统中已经存在的一个组,而不是使用默认私有组,则使用如下命令:
命令格式:useradd -g 组名 用户名
在创建新用户的同时可以为用户添加其它组,如果想在创建新用户的时候为用户添加一个已经存在的组,而不仅只属于默认创建的私有组,则使用如下命令:
命令格式:useradd -G 组名 用户名
useradd
必须以root
权限才能执行,如果是普通用户执行时,需要在命令前加sudo
命令来提升权限为root
权限。
案例演示一:
新创建一个用户组newGroup
,并且使用useradd
命令新创建用户newUser
同时将其所属组修改为newGroup
。
首先,创建用户组newGroup
,使用useradd
命令创建新用户newUser
,同时将其所属组修改为newGroup
,最后查看修改是否成功。
案例演示二:
新创建一个用户组newGroup
,并且使用useradd
命令新创建用户newUser
同时为其添加一个新的用户组newGroup
。
首先,创建用户组newGroup
,使用useradd
命令创建新用户newUser
,同时为其添加一个新的用户组newGroup
,最后查看添加是否成功。
根据右侧窗口命令行内的提示,在Begin - End
区域内进行命令行语句补充,具体任务如下:
新创建一个用户newUser;
useradd -m newUser
使用usermod命令为用户newUser新添加一个已经存在的用户组oldGroup。
usermod -a -G oldGroup newUser
Linux
中使用id
命令可以查看用户的大多数信息。具体使用方法请参看上一关的实训。
Linux
中还可以通过查看/etc/passwd
文件来获取用户的信息。具体方法可以参考背景知识。
Linux
中还可以使用finger
命令来查询用户的信息。
注意:Ubuntu
系统中默认没有安装finger
命令,用户可以通过以下命令来安装finger
,然后就可以使用finger
。
sudo apt-get install finger
具体使用方法如下:
命令格式:finger [命令参数] 参数
常见命令参数
案例演示:
使用finger
命令查看用户信息。
例如,查看系统中已经存在的用户newUser
信息。
Linux
中usermod
命令是最强大的用户账户修改实用工具。
usermod
命令我们在上一关只是简单的用到其-g
、-G
参数对用户的所属组进行修改,本关我们将进一步使用usermod
命令的其它属性进行修改更多的属性。
命令格式:usermod [命令参数] 参数
常见命令参数:
shell
;ID
;usermod
必须以root
权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo
命令来提升权限为root
权限。
案例演示一:
使用usermod
命令修改用户名。
例如,在系统中已经存在一个用户名为oldUser
的用户,由于某种原因,现在必须将其修改成newUser
。
案例演示二:
使用usermod
命令修改用户登录目录。
首先使用finger
命令查看用户newUser
的登录目录为/home/oldUser
,然后新创建一个/home/newUser
,使用usermod
将用户newUser
的登录目录修改成/home/newUser
,最后使用finger
命令查看是否修改成功。
Linux
中使用groupmod
命令来修改用户组信息。
命令格式:groupmod [命令参数] 参数
常见命令参数:
groupmod
必须以root
权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo
命令来提升权限为root
权限。
案例演示:
使用groupmod
命令修改已有用户组名称。
首先通过tail
命令查看一个已有用户组信息,可以看到该用户组名为oldUser
,并且组ID为1004,通过groupmod
命令将其名由oldUser
修改成renameOldUser
,最后使用再查看是否修改成功。
根据右侧窗口命令行内的提示,在Begin - End
区域内进行命令行语句补充,具体任务如下:
将系统已有用户oldName
名修改成newName
;
usermod -l newName oldName
将修改过后的newName
用户的登录目录修改成系统已存在文件夹/home/newName
;
usermod -d /home/newName newName
将系统已有用户组oldGroup
名修改成newGroup
;
groupmod -n newGroup oldGroup