0%

Linux命令篇

作者:17级 刘志煌

原始地址:http://blog.anoyer.cn/article/Linux-command.html

序言

废话就不多说了,还没想好说啥废话,暂时直接先上干货吧。QAQ
如发现问题还请联系博主进行修改,谢谢!!!
文章版权为Anoyer博客所有,转载请以链接形式标明本文地址

Linux常用命令

1、pwd 命令

pwd(Print Working Directory ):显示当前所在目录。

2、cd 命令

cd(Change Directory): 切换当前目录。

常用特殊目录表示:

1
2
3
4
5
6
cd 进入用户主目录;
cd ~ 进入用户主目录;
cd - 返回进入此目录之前所在的目录;
cd .. 返回上级目录(若当前目录为"/",则执行完后还在"/";".."为上级目录的意思);
cd ../.. 返回上两级目录;
cd !$ 把上个命令的参数作为cd参数使用。

3、ls 命令

ls(list): 列出指定目录列表信息,如果没有参数默认列出当前目录下的所有文件和文件夹(隐藏文件和文件夹除外)。

常见ls命令选项:

1
2
3
4
5
6
7
8
9
>-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
>-a:显示所有文件和文件夹(包括隐藏文件/文件夹);
>-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
>-A:显示除影藏文件“.”和“..”以外的所有文件列表;
>-l:列出内容的详细信息;
>-r:以文件名反序排列并输出目录内容列表;
>-s:显示文件和目录的大小,以区块为单位;
>-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
>-R:递归处理,将指定目录下的所有文件及子目录一并处理。

例如:显示根目录下所有文件和文件夹。

  • 如果一次查看多个目录,则每个目录名用空格隔开。

应用示例一:

查看目录/mnt下的所有信息(包括隐藏内容),则可以使用如下命令:

ls -a /mnt

img

应用示例二:

查看目录/mnt下的所有信息(包括隐藏内容),同时显示每个文件的详细信息,则可以使用如下命令:

ls -al /mnt

img

Linux文件操作

1、touch 创建文件

linux中创建文件的常用命令是touch,命令格式如下:

touch filename

有时可能需要创建一个空的文件的情况。在这种情况下,可以使用touch命令来轻松创建一个空文件。

例如:创建一个新的文件testfile可以使用如下命令。

touch testfile

如果想同时创建多个文件也可以使用touch命令完成,具体格式如下:

touch file1 file2 ...

只需将不同的文件名用空格分隔即可完成创建多个文件。

2、rm 删除文件

Linux中常用的删除文件的命令是rm,使用格式如下:

rm [命令选项] filename

常用命令选项:

1
2
3
>-f:强制删除文件或目录;
>-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
>-i:删除已有文件或目录之前先询问用户;

例如,删除我们刚刚创建的文件testfile可以使用如下命令。

rm -f testfile

3、mkdir 创建文件夹

Linux中创建文件夹命令是mkdir,命令格式如下:

mkdir [命令选项] dirname

常用命令选项:

-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;

例如:我们新创建一个文件夹testdir可以使用如下命令。

1
>mkdir testdir

因为新创建的文件夹是一个空的文件夹,所以使用ls -l显示的结果是空。

4、rmdir删除文件夹

Linux中删除文件夹的命令是rmdir或者rm -r,命令格式如下:

rmdir [命令选项] dirname

常用命令选项:

-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;

例如:将刚刚新创建的文件夹testdir删除可以使用如下命令。

rmdir testdir

Linux系统命令行下删除一个不为空的目录,则可以使用如下命令:

rm -r Dir

5、cp 文件和文件夹拷贝

Linux使用cp命令用来将一个或多个源文件或者目录复制到指定的目录中,命令格式如下:

cp [命令选项] 源文件 目的文件

常用命令选项:

1
2
3
>-f:强行复制文件或目录,不论目标文件或目录是否已存在; -i:覆盖既有文件之前先询问用户;
>-p:保留源文件或目录的属性;
>-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;

例如:新建一个文件newfile和一个文件夹newdir,将newfile复制到newdir目录下。具体命令如下。

1
2
3
>touch newfile
>mkdir newdir
>cp newfile newdir

6、mv 文件和文件夹移动/重命名

Linux使用mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中,命令格式如下:

mv [命令选项] 源文件 目标文件

常用命令选项:

1
2
>-f:强行复制文件或目录,不论目标文件或目录是否已存在; -i:覆盖既有文件之前先询问用户;-p:保留源文件或目录的属性;
>-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;

例如:新建一个文件newfile和一个文件夹newdir,将newfile剪切到newdir目录下,并重新命名为newfileCpy。具体命令如下。

1
2
3
>touch newfile
>mkdir newdir
>mv newfile newdir/newfileCpy

Linux命令查询

1、man 查询命令的帮助文件

linux中使用man命令来查询命令的帮助文件,命令格式如下:

man [章节] command

常用命令如下:

1
2
3
4
5
6
>d, Ctrl+D: 向文件尾部翻半屏
>u, Ctrl+U: 向文件首部翻半屏
>q: 退出
>#:跳转至第#行
>1G: 回到文件首部
>G:翻至文件尾部

命令的帮助文件通常存放在/usr/share/man目录下。

man包含9个章节,章节用数字表示,分别是:

1
2
3
4
5
6
7
8
9
>1.用户命令
>2.系统调用
>3.C库调用
>4.设备文件及特殊文件
>5.配置文件格式
>6.游戏
>7.杂项
>8.管理类的命令Linux
>9.内核API

如果查询命令的时候不追加章节,则默认从第一个章节开始查询,以此类推,直到找到对应要查询的命令为止。

例如:使用man命令查询open命令的使用方法。

man open

如果想查询系统库函数的open函数的使用方法,则使用如下命令:

man 2 open

使用man搜索命令

/KEYWORD:

KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索,不区分字符大小写;

1
2
>n: 下一个 
>N:上一个

?KEYWORD:

KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索,不区分字符大小写;

1
2
>n: 跟搜索命令同方向,下一个 
>N:跟搜索命令反方向,上一个

2、info 查询命令的帮助文件

linux中使用info命令来查询命令的帮助文件。info页面比man page编写得要更好、更容易理解,也更友好,但man page使用起来确实要更容易得多。一个man page只有一页,而info页面几乎总是将它们的内容组织成多个区段(称为节点),每个区段也可能包含子区段(称为子节点)。

命令格式如下:

info [命令参数] command

常用命令参数选项:

1
2
3
4
>-d:添加包含info格式帮助文档的目录;
>-f:指定要读取的info格式的帮助文档;
>-n:指定首先访问的info帮助文件的节点;
>-o:输出被选择的节点内容到指定文件。

常见命令如下:

1
2
3
4
5
6
7
8
9
10
>?键:它就会显示info的常用快捷键。
>N键:显示(相对于本节点的)下一节点的文档内容。
>P键:显示(相对于本节点的)前一节点的文档内容。
>U键:进入当前命令所在的主题。
>M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了。
>G键:敲G键后输入主题名称,进入该主题。
>L键:回到上一个访问的页面。
>SPACE键:向前滚动一页。
>BACKUP或DEL键:向后滚动一页。
>Q:退出info。

例如:我们使用info来查询info的帮助手册。

info info

3、whatis 显示命令的简短描述

whatis用来显示命令的简短描述。

命令格式如下:

whatis command

例如:我们使用whatis来查询ls的使用方法。

Linux之文件/目录内容查看

1、cat 查看文件内容

具体命令如下:cat 参数 文件名

常用参数如下:

  • -n 或 --number:由1开始对所有输出的行数编号;
    --b 或 --number-nonblank:和-n相似,只不过对于空白行不编号。

具体说明:

  • cat命令支持同时查看多个文件,当一次查看多个文件时,每个文件的内容都会被打印到屏幕上;
  • cat命令不能对文件进行编辑操作,只能查看文件内容。

应用示例:

查看文件/etc/passwd内容,则可以使用如下命令:

cat /etc/passwd

img

2、head 查看文件前n行内容

具体命令如下:head 参数 文件名

常用参数如下:

  • -n number:显示文件的前number行内容;

具体说明:

  • head命令是从文件的开头显示内容,默认情况下只显示前10行的内容;
  • head命令不能对文件进行编辑操作,只能查看文件内容。

应用示例:

查看文件/etc/passwd的前8行内容,则可以使用如下命令:

head -n 8 /etc/passwd

img

3、tail 查看文件后n行内容

具体命令如下:tail 参数 文件名

常用参数如下:

  • -n number:显示文件的最后number行内容;

具体说明:

  • tail命令是从文件的结尾显示内容,默认情况下只显示最后10行的内容;
  • tail命令不能对文件进行编辑操作,只能查看文件内容。

应用示例:

查看文件/etc/passwd末尾5行内容,则可以使用如下命令:

tail -n 5 /etc/passwd

img

Linux文件/目录高级管理一

1、chmod 用户文件/目录权限修改

Linux中使用chmod命令来修改文件或者目录权限。

文字设定法具体命令如下:

chmod [who] [+ | - | =] [mode] 文件名/目录名

who参数如下:

  • u 表示“用户(user)”,即文件或目录的所有者;
  • g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户;
  • o 表示“其他(others)用户”;
  • a 表示“所有(all)用户”,它是系统默认值。

操作符如下:

  • +:添加某个权限;
  • -:取消某个权限;
  • =:赋予给定权限并取消其他所有权限。

mode参数如下:

  • r 可读;
  • w 可写;
  • x 可执行。

数字设定法具体命令如下:

chmod [mode] 文件名/目录名

mode为具体的数字。

首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从07的八进制数,其顺序是ugo

将文件testFile的所有权限设置为仅读权限,可以使用如下命令:

chmod a=r testFile

img

案例演示二:

将文件testFile的所有权限设置为可读可写,同组用户权限设置为只读,可以使用如下命令:

chmod u=rw,g=r testFile

img

2、chown 修改目录所有者命令

Linux中使用chown命令来修改目录所有者。

具体命令如下:

chown 参数 用户名/用户ID 目录名

常见命令参数:

  • -R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
  • --help:在线帮助;

执行权限

chown必须以root权限才能执行,如果是普通用户想执行chown时,需要在命令前加sudo命令来提升权限为root权限。

案例演示一:

将系统中已存在的目录testDir的所有者设置为newUser,可以使用如下命令:

sudo chown newUser testDir

img

可以使用ls -lll命令查看目录所有者是否修改成功。

img

将系统中已存在的目录Dir以及其所有子目录和子文件的所有者设置为newUser,可以使用如下命令:

sudo chown -R newUser Dir

img

可以看到Dir目录下的所有子目录和子文件的所有者都已经修改成了newUser

3、chgrp 修改目录所属组命令

Linux中使用chgrp命令来修改目录所属组。

具体命令如下:

chgrp 参数 用户组名/组ID 目录名

常见命令参数:

  • -R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
  • --help:在线帮助;

执行权限

执行权限

chgrp必须以root权限才能执行,如果是普通用户想执行chgrp时,需要在命令前加sudo命令来提升权限为root权限。

案例演示一:

将系统中已存在的目录testDir的所属组设置为newGroup,可以使用如下命令:

sudo chgrp newGroup testDir

img

案例演示二:

将系统中已存在的目录Dir以及其所有子目录和子文件的所属组设置为newGroup,可以使用如下命令:

sudo chgrp -R newGroup Dir

img

linux中也可以使用chown命令来修改目录的所属组,其使用方法与修改文件的使用方法一致。

案例演示一:

使用chown命令将系统已存在的文件Dir以及其所有子目录和子文件的所有者设置为fzm所属组设置为fzm,可以使用如下命令:

sudo chown -R fzm:fzm Dir

img

Linux文件/目录高级管理二

1、df 显示磁盘分区上的可使用的磁盘空间

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

具体命令如下:

df 命令参数 参数

常用参数如下:

  • -a或--all:包含全部的文件系统,包括系统特有的/proc等文件系统;
  • -k : 以KB为单位显示各文件系统;
  • -m : 以MB为单位显示各文件系统;
  • -h : 以可读性较高的方式来显示信息;
  • -i或--inodes:显示inode的信息。

案例演示一:

查看系统所有磁盘设备,默认是KB为单位,可以使用如下命令:

df

img

案例演示二:

使用-h选项以KB以上的单位来显示,可读性高,可以使用如下命令:

df -h

img

案例演示三:

/etc目录下的可用的磁盘容量以易读的格式显示出来,可以使用如下命令:

df -h /etc

img

2、du 对文件和目录磁盘使用的空间的查看

du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。

具体命令如下:

du 命令参数 参数

常用参数如下:

  • -a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
  • -h : 以可读性较高的方式来显示信息;
  • -k : 以KB为单位显示容量;
  • -m : 以MB为单位显示容量;
  • -s : 列出总量,不列出每个目录占用的容量。

案例演示一:

列出当前目录下的所有文件的总容量,可以使用如下命令:

du

img

: 直接输入du命令没有加任何参数时,则du会分析当前所在目录的文件与目录所占用的磁盘空间,但是,实际显示时仅会显示目录容量。

案例演示二:

列出当前目录下的所有文件的总容量,同时将每个文件大小也列出来,可以使用如下命令:

du -a

img

以可读性较高的方式显示多个文件所占磁盘大小,可以使用如下命令:

du -h c++ g++

img

3、ln 创建链接和软链接

硬链接指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种链接就是硬链接。

硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止误删的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的链接。只删除一个链接并不影响索引节点本身和其它的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。

硬链接特点如下:

  • 文件有相同的inodedata block
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同inode号的文件。

具体命令如下:

ln 源文件 目标文件

案例演示一:

为当前目录下的文件testFile创建一个硬链接testFileLink,可以使用如下命令:

ln testFile testFileLink

img

ls结果的最左边一列,是文件的inode值,你可以简单把它想成C语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。可以看到,这两个文件就如同一个文件一样,inode值相同,都指向同一个区块。


软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。

软链接特点如下:

  • 源文件和目标文件有不相同的inodedata block
  • 软链接没有硬链接的限制,可以对目录文件做符号链接;
  • 软链接可以在不同文件系统之间做软链接;
  • 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l
  • 符号链接的大小是其链接文件的路径名中的字节数;

具体命令如下:

ln -s 源文件 目标文件

案例演示一·:

为当前目录下的文件testFile创建一个软链接myLink,可以使用如下命令:

ln -s testFile myLink

img

4、mount 挂载

mount命令详解

mountLinux 下的一个命令,它可以将分区挂接到 Linux 的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。

mount命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,早先 Linux 发行版并不会自动挂载,必须使用mount命令来手动完成挂载。

具体命令如下:

mount 命令参数 设备文件名 挂载点

常用命令参数:

1
2
3
4
>-r:将文件系统加载为只读模式;
>-h:显示帮助信息并退出;
>-t <list>:指定文件系统类型;
>-o <list>:描述设备的挂载方式;

常用文件系统类型:

1
2
3
4
5
6
>光盘或光盘镜像:iso9660
>DOS fat16文件系统:msdos
>Windows 9x fat32文件系统:vfat
>Windows NT ntfs文件系统:ntfs
>Mount Windows文件网络共享:smbfs
>UNIX(LINUX) 文件网络共享:nfs

常用设备的挂载方式:

1
2
3
4
>loop:用来把一个文件当成硬盘分区挂接上系统
>ro:采用只读方式挂接设备
>rw:采用读写方式挂接设备
>iocharset:指定访问文件系统所用字符集

注意:通常在挂载设备时不需要指定文件系统类型,mount会自动选择正确的类型。

执行权限:mount必须以root权限才能执行,如果是普通用户想执行mount时,需要在命令前加sudo命令来提升权限为root权限。

案例演示:

将文件/etc/passwd制作成一个光盘镜像文件mydisk.iso,创建一个挂载点/home/vcdrom,将镜像文件mydisk.iso挂载到/home/vcdrom目录下,列出镜像文件中的内容,具体使用如下命令:

1
2
>sudo mkisofs -r -J -V mydisk -o ./mydisk.iso /etc/passwd 2> /dev/nullsudo mkdir /home/vcdromsudo mount -o loop -t iso9660 ./mydisk.iso /home/vcdrom
>ls -l /home/vcdrom

img

第一条命令是将/etc/passwd文件制作成一个iso镜像文件;

第二条命令是创建一个挂载点;

第三条命令是将创建好的镜像文件挂载到/home/vcdrom目录下;

第四条命令是查看镜像文件的内容;

5、umount 卸载已经加载的文件系统

umount命令用于卸载已经加载的文件系统。利用设备名或挂载点都能umount文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。

具体命令如下:

umount 命令参数 挂载点/设备名

常用命令参数:

1
>-r:若无法成功卸除,则尝试以只读的方式重新挂入文件系统;-h:显示帮助信息并退出;

执行权限:

mount必须以root权限才能执行,如果是普通用户想执行mount时,需要在命令前加sudo命令来提升权限为root权限。

案例演示:

将上一个案例已经挂载好的镜像文件(mydisk.iso)卸载,然后看到挂载点目录内容,可以使用如下命令:

1
>sudo umount /home/vcdromls -l /home/vcdrom

将镜像文件从/home/vcdrom目录卸载后,该目录还原为原有的内容,即为空目录。

img

Linux之用户管理

1、useradd 创建用户

Linux创建用户命令

Linux中使用useradd命令来创建一个新用户。

命令格式格式:useradd [命令参数] 参数

常见命令参数:

  • -d<登入目录>:指定用户登入时的启始目录;
  • -D:查看或变更预设值;
  • -g<群组>:指定用户所属的群组;
  • -m:自动建立用户的登入目录;
  • -M:不要自动建立用户的登入目录;
  • -s:指定用户登入后所使用的shell

useradd必须以root权限才能执行,如果是普通用户想创建一个新用户时,需要在命令前加sudo命令来提升权限为root权限。

案例演示

1 . 查看useradd系统默认属性值,使用命令useradd -D

笔者使用的系统是Ubuntu16.04useradd系统默认值如下所示:

img

参数 说明
GROUP 指新创建的用户将被添加到用户组ID为100的公共用户组中
HOME 指新创建的用户将在/home目录下创建一个HOME账户
INACTIVE 指当密码逾期时,用户将不会被禁用
EXPIRE 指新创建的用户不会在设定日期被设置为逾期
SHELL 指新创建的用户使用/bin/sh(也就是bash)作为默认shell
SKEL 指系统会将/etc/skel目录中的内容复制到新创建的用户的HOME目录
CREATE_MAIL_SPOOL 指系统不会在邮件目录中创建一个文件用于新创建用户账户接受邮件

2 . 使用useradd命令新创建一个用户test,并且自动建立用户的登入目录。

img

在背景介绍中,我们了解到,Linux中用户信息是保存在/etc/passwd文件中,我们可以使用命令tail /etc/passwd命令查看/etc/passwd文件最后10行中是否存在刚刚新创建的test用户信息。

img

2、userdel 删除用户

Linux删除用户命令

Linux中使用userdel命令来删除一个已经存在的用户。

命令格式:userdel [命令参数] 参数

常见命令参数:

  • -f:强制删除用户,即使用户当前已登录;
  • -r:删除用户的同时,删除与用户相关的所有文件。

userdel必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。

案例演示

1 . 使用userdel命令删除一个已经存在的用户test,并且自动删除其家目录文件。

img

因为系统默认是不会给新创建的用户自动创建一个文件夹用于用户账户接收邮件,所以在使用userdel -r命令删除的时候会提醒/var/mail/test文件夹不存在。

2、将当前工作目录切换到新创建的用户newUser家目录;

cd /home/newUser

3、passwd 修改用户密码

用户密码存放地及方式

Linux中用户的登录密码是存放在/etc/shadow文件中,/etc/shadow文件中存放的是加密过后的密码,所以在/etc/shadow文件中看到的密码是加密过后的密文。

看下笔者的电脑中/etc/shadow文件存放的内容格式。

img

可以看到第一个冒号前是用户名,用户名是以明文的方式存放。

在第一个冒号和第二个冒号之间存放的是加密过后的密码,密码是以密文的方式存放,其中密文是由用户密码和其它信息加密后组成的,这里不做详细讲解,我们只需要知道如果第一个冒号和第二个冒号之间是*或者!或者空,则表示该用户没有密码,否则,则表示该用户是有密码。

例如:用户名fzm是存在密码,而mysql是不存在密码的。

使用passwd命令修改用户密码

命令格式:passwd [命令参数] 参数

常见命令参数:

  • -d 删除密码;
  • -l 停止账号使用;
  • -S 显示密码信息。

passwd必须以root权限才能执行,如果是普通用户想执行passwd时,需要在命令前加sudo命令来提升权限为root权限。

案例演示

1: 使用useradd命令来新创建一个用户,使用passwd命令来设置登录密码。

img

使用useradd命令创建一个新用户(test),此时test用户是没有密码的,所以使用tail -n 1 /etc/shadow命令查看/etc/shadow文件的最后一行可以看出test用户密码部分为!

使用passwd命令为test用户设置密码时,可以看到需要输入两次密码,目的是为了确保两次输入的密码一致。当设置完密码后,可以看到/etc/shadow文件中test用户的密码部分已经为加密过后的密文。

2: 使用passwd命令来清除用户的密码。

img

使用passwd命令清除用户test的登录密码,使用tail -n 1 /etc/shadow命令查看/etc/shadow文件的最后一行可以看出test用户密码部分为空,此时test用户是没有密码的。

#### 4、chpasswd 修改用户密码

chpasswd命令通常是用于批量修改用户密码,从标准输入批量读取成对的用户名和密码,其中输入的用户名和密码的格式为用户名:密码

例如要批量更新用户密码,将用户名和密码写入到一个文件中,格式如下所示:

然后执行执行如下命令来更新密码:

sudo chpasswd < batch.txt

<符号表示输入重定向,接下来的实训中我们会详细的介绍。

命令格式:chpasswd [命令参数] 参数

常见命令参数

  • -e:输入的密码是加密后的密文;
  • -h:显示帮助信息并退出。

chpasswd必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。

案例演示

1: 使用chpasswd命令来更新用户登录密码。

img

chpasswd是从键盘不断的读入指令,我们可以使用Ctrl+D组合键来结束键盘输入。

5、login 让用户登录系统

使用login命令登录

login命令是让用户登录系统,可通过它的功能随时更换登入身份。当/etc目录里含名称为nologin的文件时,系统只允许root帐号登入系统,其他用户一律不准登入。

当使用login命令登录系统后,可以使用logout命令或者exit命令来退出当前用户登录,返回到登录前的用户状态。

命令格式:login [命令参数] 参数

参数为登录的用户名,可以不输入登录的用户名,直接输入login命令后回车,然后根据提示再输入用户名和密码。

常见命令参数

  • -p:告诉login指令不销毁环境变量;
  • -h:指定远程服务器的主机名。

login必须以root权限才能执行,如果是普通用户执行时,需要在命令前加sudo命令来提升权限为root权限。

案例演示

1: 使用login命令来登录系统(文件/etc/nologin不存在)。

首先查看当前登录的用户名是fzm

使用newUser用户来登录系统,然后查看当前登录的用户名。

img

使用logout或者exit命令退出newUser用户,然后在查看当前登录用户是否为fzm

2: 使用login命令来登录系统(文件/etc/nologin存在)。

首先查看当前登录的用户名是fzm

/etc目录下新创建一个nologin文件,使用如下命令创建:

sudo touch /etc/nologin

使用普通用户newUser来登录系统,查看是否可以登录成功。

发现使用newUser用户是无法登录系统的,只有使用root用户才能登录系统。

6、su 切换用户身份

使用su命令切换用户身份

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号的密码。

当使用su命令切换用户后,使用exit命令退出当前身份,返回原有登录用户身份。

注:如果当前用户身份是root,则使用su命令切换到其他用户的时候不需要相应用户的密码

命令格式:su [命令参数] 参数

参数为登录的用户名,如果没有参数,则默认切换为root用户。

常见命令参数

  • -c<指令>--command=<指令>:执行完指定的指令后,即恢复原来的身份;
  • -l--login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
  • -m,-p--preserve-environment:变更身份时,不要变更环境变量;
  • -s<shell>--shell=<shell>:指定要执行的shell

su命令所有使用者都可以执行。

案例演示

1: 使用su命令切换当前用户身份(不改变当前工作目录)。

首先查看当前登录的用户名是fzm,当前工作目录是/home/fzm

切换当前用户为newUser用户,然后查看当前用户身份和当前工作目录。

使用exit命令退出newUser用户,然后在查看当前登录用户身份和当前工作目录。

2: 使用su命令切换当前用户身份(改变当前工作目录)。

首先查看当前登录的用户名是fzm,当前工作目录是/home/fzm

切换当前用户为newUser用户,然后查看当前用户身份和当前工作目录。

使用exit命令退出newUser用户,然后在查看当前登录用户身份和当前工作目录。

*3、使用su命令切换当前用户身份为newUser,并且执行whoami指令,然后恢复原来的身份 *

su -c whoami newUser

用户高级管理

1、groupadd 创建一个新用户组

Linux创建用户组命令

Linux 中使用groupadd命令来创建一个新用户组。

命令格式:groupadd [命令参数] 参数

常见命令参数:

  • -g:指定新建工作组的id;
  • -r:创建系统工作组,系统工作组的组ID小于500;

groupadd必须以root权限才能执行,如果是普通用户想使用该命令,需要在命令前加sudo命令来提升权限为root权限。

案例演示一

使用groupadd命令新创建一个用户组testGroup

img

在背景介绍中,我们了解到,Linux中用户组信息是保存在/etc/group文件中,我们可以使用命令tail /etc/group命令查看/etc/group文件最后10行中是否存在刚刚新创建的testGroup用户信息。

img

案例演示二

使用groupadd命令新创建一个用户组testGroupID,并且指定组的ID

img

注意:我们可以看到有时执行sudo命令就不需要输入密码,这是因为每次都输入密码比较麻烦,所以Linux会设置一个sudo的会话时间,就是说我们在第一次执行sudo的时候是要输入密码,那么在接下来的一段时间内在执行sudo的时候就不需要输入密码,这个会话时间默认是5分钟,用户也可以通过编辑/etc/sudoers来修改这个会话时间的大小。

同样我们可以使用命令tail /etc/group命令查看/etc/group文件最后10行中是否存在刚刚新创建的testGroupID用户信息。

img

2、groupdel 删除一个已经存在的用户组

Linux删除用户组命令

Linux 中使用groupdel命令来删除一个已经存在的用户组。

命令格式:groupdel 参数

参数为要删除的用户组名

groupdel必须以root权限才能执行,如果是普通用户想使用该命令,需要在命令前加sudo命令来提升权限为root权限。

案例演示一

使用groupdel命令删除上面创建的testGrouptestGroupID

img

3、id 用于显示用户的ID,以及所属群组的ID

Linux查看用户所属组
使用id命令查看。

命令格式:id [命令参数] 参数

参数为要查询的用户名,默认是当前登录用户。

常见命令参数:

  • -g或--group:显示用户所属群组的ID
  • -G或--groups:显示用户所属附加群组的ID
  • -n或--name:显示用户,所属群组或附加群组的名称。
  • -r或–real  显示实际ID。
  • -u或–user  显示用户ID。
  • -help  显示帮助。
  • -version  显示版本信息。

id命令的执行权限是面向所有用户。

案例演示:

使用id命令查看用户fzm所属组。

img

####4、groups 查看用户所属组

使用group命令查看。

命令格式:groups 参数

参数为要查询的用户名,默认是当前登录用户。

执行权限:groups命令的执行权限是面向所有用户。

案例演示:

使用groups命令查看用户fzm所属组。

img

5、usermod 修改用户属性

Linux用户信息修改命令

Linuxusermod命令是最强大的用户账户修改实用工具。

usermod命令我们在上一关只是简单的用到其-g-G参数对用户的所属组进行修改,本关我们将进一步使用usermod命令的其它属性进行修改更多的属性。

命令格式:usermod [命令参数] 参数

常见命令参数:

  • -c<备注>:修改用户帐号的备注文字;
  • -d<登入目录>:修改用户登入时的目录;
  • -e<有效期限>:修改帐号的有效期限;
  • -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
  • -g<群组>:修改用户所属的群组;
  • -G<群组>;修改用户所属的附加群组;
  • -l<帐号名称>:修改用户帐号名称;
  • -L:锁定用户密码,使密码无效;
  • -s:修改用户登入后所使用的shell
  • -u:修改用户ID
  • -U:解除密码锁定。

usermod必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。

使用usermod命令修改用户组

如果要一个用户仅仅属于某一个组,而不是同时属于多个组,则使用如下命令:

命令格式:usermod -g 组名 用户名

如果要给一个用户添加一个新的组,同时保留原来有所的组,则使用如下命令:

命令格式:usermod -a -G 组名 用户名

usermod必须以root权限才能执行,如果是普通用户想执行usermod时,需要在命令前加sudo命令来提升权限为root权限。

案例演示一:

新创建一个用户newUser和新创建一个用户组newGroup,使用usermod命令将newUser用户所属组修改为newGroup

img

首先,创建用户newUser和组newGroup,使用groups命令查看用户newUser所属的组,因为默认情况下新创建用户的时候会默认创建一个与用户名同名的私有组,并将新创建的用户所属组设置为私有组。接下来使用usermod命令来修改用户所属组,最后查看修改是否成功。

案例演示二:

新创建一个用户newUser和新创建一个用户组newGroup,使用usermod命令为newUser用户新添加一个组newGroup

img

首先,创建用户newUser和组newGroup,使用groups命令查看用户newUser所属的组。接下来使用usermod命令来为用户添加一个新的组,最后查看添加是否成功。

案例演示三:

使用usermod命令修改用户名。

例如,在系统中已经存在一个用户名为oldUser的用户,由于某种原因,现在必须将其修改成newUser

img

案例演示四:

使用usermod命令修改用户登录目录。

img

首先使用finger命令查看用户newUser的登录目录为/home/oldUser,然后新创建一个/home/newUser,使用usermod将用户newUser的登录目录修改成/home/newUser,最后使用finger命令查看是否修改成功。

6、finger 查看用户属性

注意Ubuntu系统中默认没有安装finger命令,用户可以通过以下命令来安装finger,然后就可以使用finger

sudo apt-get install finger

具体使用方法如下:

命令格式:finger [命令参数] 参数

常见命令参数

  • -l:多行显示;
  • -s:单行显示。这个选项只显示登入名称、真实姓名、终端机名称、闲置时间、登入时间、办公室号码及电话号码。如果所查询的使用者是远端服务器的使用者,这个选项无效。

案例演示:

使用finger命令查看用户信息。

例如,查看系统中已经存在的用户newUser信息。

img

7、groupmod 修改用户组信息

Linux用户组信息修改命令

Linux 中使用groupmod命令来修改用户组信息。

命令格式:groupmod [命令参数] 参数

常见命令参数:

  • -g<群组识别码>:设置欲使用的群组识别码;
  • -n<新群组名称>:设置欲使用的群组名称。

groupmod必须以root权限才能执行,如果是普通用户想使用该命令时,需要在命令前加sudo命令来提升权限为root权限。

案例演示:

使用groupmod命令修改已有用户组名称。

img

首先通过tail命令查看一个已有用户组信息,可以看到该用户组名为oldUser,并且组ID为1004,通过groupmod命令将其名由oldUser修改成renameOldUser,最后使用再查看是否修改成功。

VIM基本用法

1、打开文件和保存退出

viUnix操作系统中最常用的全屏编辑器,Linux中常用的是vi的加强版vimvimvi完全兼容。在Linux系统中,vivim是完全等价的两条命令。

vi/vim编辑器可以执行输入、删除、查找、替换、块操作等众多文件操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑器程序没有的工程。vi/vim编辑器以命令行的方式处理文件,尽管不如图形化处理方式直观,但它具有操作速度快、功能全面等优点。另外,vi/vim不是一个排版程序,它不像WordWPS那样可以对字体、格式、段落等其他属性进行设置,它只是一个文本编辑器程序。

启动vi/vim编辑器

vi/vim的基本格式如下:

vi [option] [filename...]

vim [option] [filename...]

其中,[option]是选项,[filename]是需要编辑的一个或多个文件名。

案例演示1:

启动vi/vim编辑器,同时打开文件testFile,可以使用如下命令:

vi testFile

vim testFile

img

img

[请在右侧“命令行”里直接体验]

因为当前目录下没有testFile文件,所以此时打开的文件是空,并且在底部一行显示的是打开的文件名以及当前被打开的文件状态,因为是新建的文件,所以显示的是"testFile" [New File]标识。

退出vi/vim编辑器。

案例演示2:

退出vi/vim编辑器,同时保存新创建的文件testFile,具体操作如下所示:

1
>输入:wq命令后回车即可保存当前文件并退出vi/vim编辑器;

img

[请在右侧“命令行”里直接体验]

按下回车键后,我们将退出了当前vi/vim编辑器,如果不想保存testFile文件而是只想退出vi/vim编辑器,则我们输入:q命令后回车即可。

img

2、工作模式切换与插入模式

vi/vim编辑器有三种工作模式,每种工作模式都有不同的作用,以下是这三种工作模式的详细介绍:

  1. 命令模式: \查看当前文件内容,此时不能对文件内容进行写入操作,从该模式可以切换为插入模式和底线命令模式。
  2. 插入模式: \可以对文件内容进行编辑操作,从该模式可以切换为命令模式。
  3. 底线命令模式: \不可以对文件内容进行编辑,在此模式下可以执行一些vi/vim的命令,例如: 退出命令、保存内容命令等等。从该模式可以切换为命令模式。

img

注意: 启动vi/vim后,首先进入的是命令模式。

命令模式与插入模式相互切换

首先启动vi/vim编辑器后,首先进入的工作模式是命令模式,在当前模式下,我们只能查看文件内容,不能对文件内容进行写入操作。如果想对文件进行写入操作,那么我们只有进入插入模式下。

  1. 命令模式->插入模式方法
    从命令模式到插入模式的切换方法有多种,我们介绍如下3中常用方法:
输入命令 说明
i, I i 为『从目前光标所在处输入』,I 为『在目前所在行的第一个非空格符处开始输入』。
a, A a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。
o, O 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行。
  1. 插入模式->命令模式方法
    由插入模式切换到命令模式比较简单,我们只需要点击ESC键即可返回到命令模式。

案例演示1:

使用vi/vim编辑器打开文件testFile,并且将工作模式切换到插入模式,输入Hello vi/vim字符串,最后保存文件并退出,可以使用如下命令:

vi testFile

vim testFile

打卡testFile文件命令;

img

首先进入的是命令模式;

img

按下字母i后进入插入模式;

img

输入Hello vi/vim字符后,按下ESC键后返回命令模式,最后输入:wq保存退出文件;

img

[请在右侧“命令行”里直接体验]

命令模式与底线命令模式相互切换

vi/vim底线命令模式下如何执行写复杂的命令,例如我们常用的保存退出命令(wq)等。

  1. 命令模式->底线命令模式方法
    从命令模式到底线命令模式的切换比较简单,我们只需要输入:字符即可,注意:是英文输入法下的冒号。
  2. 底线命令模式->命令模式方法
    由底线命令模式切换到命令模式比较简单,我们只需要点击ESC键即可返回到命令模式。

3、命令模式

vi/vim编辑器与其它编辑器最大的不同之处是不能使用鼠标进行操作(可以在配置文件中设置鼠标属性,默认是禁止使用鼠标),我们可以在命令模式下移动光标位置,常见移动命令如下所示:

命令 说明
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页

案例演示1:

使用vi/vim编辑器打开文件oldFile,移动当前光标到第一行的第二字符处,可以使用如下步骤:

打卡oldFile文件命令;

img

首先进入的是命令模式;

img

移动光标到第一行的第5个字符处(按5次→);

img

最后输入:q退出文件;

img

[请在右侧“命令行”里直接体验]

命令模式删除操作

我们不光可以在插入模式下可以对文件内容进行删除操作,我们可以直接在命令模式下对文件进行删除操作,常见删除命令如下所示:

命令 说明
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键)
nx n 为数字,连续向后删除 n 个字符。例如,我要连续删除 5 个字符 ,则可以使用5x
dd 删除光标所在的那一整行
ndd n 为数字。删除光标所在的向下 n 行,例如10dd则是删除 10 行
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据

案例演示1:

使用vi/vim编辑器打开文件oldFile,删除当前文件的第二行所有内容,最后保存文件并退出,可以使用如下步骤:

打卡oldFile文件命令;

img

首先进入的是命令模式;

img

移动光标到文件第二行;

img

输入dd字符后删除当前行内容,最后输入:wq保存退出文件;

img

[请在右侧“命令行”里直接体验]

命令模式复制粘贴操作

常见复制命令如下所示:

命令 说明
yy 复制光标所在的那一行
nyy n 为数字。复制光标所在的向下 n 行,例如 10yy 则是复制 10 行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据

常见粘贴命令为p, Pp 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行!

案例演示1:

使用vi/vim编辑器打开文件oldFile,将第一行内容复制,然后粘贴到文件的末尾,最后保存文件并退出,可以使用如下步骤:

打卡oldFile文件命令;

img

首先进入的是命令模式;

img

复制第一行内容(yy),移动光标到最后一行,粘贴(p)内容到当前行的下一行,最后输入:wq保存退出文件;

img

####4、底线命令模式

vi/vim底线命令模式下,我们可以执行一些特殊的命令,同时可以完成特殊的操作,例如:执行linux系统中的命令、对文件的内容进行查找或替换操作等。

搜索替换

vi/vim编辑器在底线命令模式下可以对文件内容进行查找和替换操作,常见查找和替换命令如下所示:

命令 说明
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可。
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文字母。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
[:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 。
:1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2。
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代。

案例演示1:

使用vi/vim编辑器打开文件oldFile,将所有line单词替换为words单词,并保存退出,可以使用如下步骤:

打卡oldFile文件命令;

img

首先进入的是命令模式;

img

首先输入:切换当前模式为底线命令模式,然后输入1,$s/line/words/g后回车;

img

img

[请在右侧“命令行”里直接体验]

底线命令模式下执行特殊命令

常见在底线命令模式执行的命令如下所示:

命令 说明
:w 将编辑的数据写入硬盘档案中
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

案例演示1:

使用vi/vim编辑器打开文件oldFile,显示当前文件行号,将当前文件的第1-3行内容另存为oldFileCpy文件,使用cat命令查看新生成文件内容,可以使用如下步骤:

打卡oldFile文件命令;

img

输入:set nu后回车,显示行号;

img

img

输入:1,3 w oldFileCpy后回车

img

最后在vi中使用cat命令查看新生成的文件oldFileCpy内容;

img

img

按下回车键后返回当前vi编辑器,最后输入q退出文件;

img