总字符数: 45.00K

代码: 27.49K, 文本: 10.90K

预计阅读时间: 2.78 小时

Linux学习手册:

LINUX 系统结构

Linux系统可以粗糙地抽象为3个层次,一般称为内核层(Kernel),中间层是Shell层,既命令解释器,高层则是应用层.

层次 描述
内核层 内核层是UNIX/LINUX系统的核心和基础,它直接附着在硬件平台上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境.
Shell层 Shell层是与用户直接交互的界面.用户可以在提示符下输入命令行,由Shell解释执行并输出相应结果或有关信息,所以我们也把Shell称为命令解释器,利用系统提供的丰富命令可以快捷而简单地完成许多工作.
应用层 应用层提供基于X Window协议的图形环境.X Window协议定义了一个系统所必须具备的功能(如同TCP/IP是一个协议,定义软件所应具备的功能),任何系统能满足此协议及符合X协会其他的规范,便可称为X Window.

X Window与微软的Windows图形环境有很大的区别:

  1. Linux系统与X Window没有必然捆绑的关系,也就是说,Linux可以安装X Window,也可以不安装;
  2. 微软的Window图形环境与内核捆绑密切.

Linux系统不依赖图形环境,依然可以通过命令行完成100%的功能,而且因为不使用图形环境还会节省大量的系统资源。

作为服务器部署,绝大多数Linux并不安装或并不启用图形环境.

Linux控制台的使用

Linux系统由桌面控制台和字符控制台组成。

桌面系统即X-Window视窗,实质是在命令行下运行的应用程序.

字符控制台是Linux系统核心,大部分操作在字符界面完成。

默认Linux有6个字符控制台,可独立作业,体现了”多用户、多任务”特性.在图形界面下切换到字符界面按Ctrl+Alt+F1~F6,反之,从字符界面切换到X-Window可输入”startx”或按Ctrl+Alt+F7.

Linux图形界面相对不够完善,功能较Windows有欠缺,复杂操作难在图形界面完成。

因此,习惯在字符界面下工作对操作上有重要意义.

Linux系统默认管理员用户是root,类似于Windows的Administrator,拥有最高权限,可以操作系统所有文件和设备。

登录Linux系统输入root用户名和密码即可.

Linux 文件系统结构介绍

  • / :Linux 系统的根目录.

  • /root :该目录为系统管理员目录,如果用户是以超级用户的身份登录的,这个就是超级用户的主目录,设置成较高安全等级

  • /bin :存放系统预装的可执行程序,或用户一般使用程序,这里存放的可执行文件可以在系统的任何目录下执行.如ls,mv,rm等常用执行文件,有时内容与/usr/bin一样(使用链接文件)

  • /dev:dev 是设备(device)的英文缩写,这个目录对所有的用户都十分重要,因为在这个目录中包含了所有Linux系统中使用的外部设备,Linux中的设备也是以文件的形式存在的,但是这里并不是放的外部设备的驱动程序

  • /home :用户的主目录,如果建立一个用户,用户名是”Bob”,那么在/home目录下就有一个对应的/home/Bob路径,用来存放用户的主目录,也叫作用户的根目录,用户登录以后,默认打开自己的根目录.

  • /lib :lib是库(library)英文缩写.这个目录是用来存放系统动态连接共享库的,其作用类似于 Windows 里的 DLL 文件,几乎所有的应用程序都会用到这个目录下的共享库

  • /mnt :这个目录在一般情况下也是空的,系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容.

  • /proc :可以在这个目录下获取系统信息,这些信息是在内存中,由系统自己产生的.

  • /run :是一个临时文件系统,存储系统启动以来的信息.当系统重启时,这个目录下的文件应该被删掉或清除.如果你的系统上有 /var/run 目录,应该让它指向 run.

  • /srv :存放服务启动后需要提取的数据(不用服务器就是空)

  • /tmp :用来存放不同程序执行时产生的临时文件.

  • /var:系统中的可变文档的存放位置,这个目录存放在不断扩充的东西,我们习惯将那些经常被修改的文件存放在该目录下,比如运行的各种日志文件、未读邮件等.

  • /boot :在这个目录存放启动Linux时使用的一些核心文件,包括一些连接文件机镜像文件,都是系统启动时要用到的程序.在使用grub或lilo引导linux的时候,会用到这里的一些信息

  • /etc :etc这个目录是linux系统中最重要的目录之一.在这个目录下存放了系统管理时要用到的各种配置文件和子目录.我们要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下

  • /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下.

  • /opt:存放 Linux 中额外安装的软件.比如安装的 MySQL 数据库就可以放到这个目录下,该目录默认为空.

  • /sbin:只有系统管理员能使用的程序和指令

  • /sys: 这是linux2.6内核的一个很大的变化.该目录下安装了2.6内核中新出现的一个文件系统 sysfs .sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统.该文件系统是内核设备树的一个直观反映.当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

  • /usr :Linux的系统资源目录,里面存放的是一些系统可执行文件或者系统的一些文件库.这是linux系统中占用硬盘空间最大的目录,相当于windows下的program files目录

对于渗透测试工程师来讲需要重点注意:

  1. /tmp: 用于存放临时文件的目录.如果以高权限运行的应用程序在此目录中创建不安全的临时文件,可能被利用进行提权.渗透测试人员可能会查找此目录中的临时文件处理方面的配置不当或漏洞.
  2. /dev/shm: 用于存放共享内存对象的临时文件存储区域.由于默认权限设置为777,任何用户都可以在此目录创建或删除文件,这可能被恶意用户利用来执行特权升级或进行拒绝服务(DoS)攻击.渗透测试人员可能会检查此目录的权限设置或搜索配置不当,以便找出潜在的安全漏洞.
  3. /root: root用户的主目录,包含敏感的配置文件.渗透测试人员可能会关注此目录,以识别任何敏感信息、配置错误或潜在漏洞,这可能导致未经授权的访问.
  4. /bin: 包含所有用户使用的基本二进制可执行文件.渗透测试人员可能会在此目录中查找常见的可执行文件和二进制文件,以发现可能存在漏洞或配置错误.
  5. /dev: 包含系统中所有设备的设备文件.虽然不包含设备驱动程序,但渗透测试人员可能会寻找与设备相关的漏洞或配置错误,可能被利用以实现未经授权的访问或信息泄露.
  6. /home: 用户主目录,包括root用户的主目录(/root).渗透测试人员可能会检查用户特定的配置和存储的凭据,以识别潜在的弱点或配置错误.
  7. /sbin: 包含系统二进制文件和用于系统管理的命令.渗透测试人员关注此目录,以识别需要提升权限的可执行文件,可能被利用进行未经授权的操作.
  8. /etc: 对系统配置至关重要.渗透测试人员通常会研究此目录,寻找配置文件中的配置错误、敏感信息或可能导致安全问题的漏洞.
  9. /tmp: 如前所述,这个目录对于渗透测试人员而言非常重要,因为由不同程序创建的临时文件的处理可能存在潜在的安全风险.
  10. /media: 识别外部设备,如USB驱动器和光驱.渗透测试人员可能会评估系统如何处理外部设备,以寻找可能的安全风险或配置错误.

Linux常用命令

认识登录界面

我们来看看图中的每行所表示的是什么意思

第一行显示了Linux发行商和版本信息.

第二行展示了Linux使用的内核版本,以3.10.0为例.其中,3是主版本号,10是次要版本号,如果次要版本号为偶数,表示是一个稳定版本.最后的0是修订次数.

第三行展示了当前计算机的主机名,这里的”192”即为这台电脑的名称.

明白以上的一些参数之后,我们就可以登录了,首先在第三行的”192 login:”后面输入用户名,这里我们输入root,然后按ENTER,接着要求输入用户密码,输入密码后,如果密码正确,则会出现如下画面:

新出现的两行

Last login: 这行表示我们这个用户的上次登录的时间和位置

[root@192~]# 这行的root:表示登录的用户是root用户

  • []:这是分隔符,没有特殊含义
  • root:显示的是当前的登录用户,这里使用root用户登录.
  • @:分隔符号,没有特殊含义
  • 192:当前系统的简写主机名
  • ~:表示目前位于/root目录下
  • #:表示root用户,是超级管理员,普通用户为$

在Linux系统中有家目录的说法,那么家目录是什么?Linux系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始位置就称为用户的家

  • 超级用户的家目录:/root
  • 普通用户的家目录:/home/用户名

命令格式

命令格式:命令

[-选项] [参数]

在命令格式中,[]代表可选项,选项的功能是调整命令功能,参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作.

1
ls -al /etc
  • 个别命令使用不遵循此格式
  • 当有多个选项时,可以写在一起
  • 选项分为短格式选项(-l)和长格式选项(–all),短格式选项是英文的简写,用一个减号调用,长格式是英文完整单词,用两个减号调用.

Linux的命令按照来源方式分为两种:Shell内置命令和外部命令.所谓Shell内置命令,就是Shell自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,是外来命令,所有会有命令的执行文件.Linux中绝大多数命令是外部命令.

文件处理命令

目录处理命令

1. ls命令
1
2
3
4
5
6
7
8
9
10
命令英文原意:list
命令路径: /bin/ls
执行权限:所有用户
功能描述:显示目录文件
选项:
-a 显示所有文件,包括隐藏文件(以 . 开始的文件就是隐藏文件)
-d 查看目录属性(针对目录) ,显示目录信息,而不是目录下的文件
-l 显示详细信息(long 长格式)
-h 人性化显示文件大小
-i (id编号,唯一标识)

使用方法

1
2
3
4
5
6
7
[root@localhost ~]# ls  --查看目录内容
[root@localhost ~]# ls -a --显示隐藏文件
[root@localhost ~]# ls -l --显示文件的详细信息
-rw-------. 1 root root 1706 8月 30 11:45 anaconda-ks.cfg
drwxr-xr-x. 3 root root 99 8月 31 15:41 test
-rw-r--r--. 1 root root 1737 8月 30 14:34 initial-setup-ks.cfg
##权限 引用计数 所有者 所属组 大小 文件修改时间 文件名
2. mkdir命令
1
2
3
4
5
6
7
命令名称:mkdir
命令英文原意:make directories
命令路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p [目录名]
功能描述:创建新目录
-p 递归创建(可以同时创建多个目录)

使用方法

1
2
3
4
5
[root@localhost ~]# mkdir test   --创建test的空目录
[root@localhost ~]# mkdir test/abc/edf --此处会报错,原因就是没有test目录、abc目录,想要创建需要做递归创建
[root@localhost ~]# mkdir -p test/abc/edf --递归建立,就是一级一级建立目录

##注意:不要把目录弄的乱七八糟,应该有规划的创建.
3. cd命令
1
2
3
4
5
6
命令名称:cd
命令英文原意: change directory
命令路径:shell 内置命令
执行权限:所有用户
语法:cd [目录]
功能描述:切换目录

需要掌握几个概念:

  1. A:绝对路径是指通过完整的目录树结构来表示目标文件或子目录的路径.在描述中,以目录结构为例,目标目录为**/root/test**,而在该目录下有两个子目录test OnetestTwo,它们的绝对路径分别为**/root/test/testOne/root/test/testTwo**.

  2. B:相对路径是相对于当前工作目录的路径表示方法.相对路径中包含两个符号,即....其中,..表示当前工作目录的上一层目录,而.表示当前目录本身.

使用方法

1
2
3
4
5
[root@localhost ~]# cd test/testOne  --切换目录只需要在命令后面加目录名称即可
## ~ 代表用户的家目录 .. 代表上级目录 . 代表当前目录 - 代表上次所在的目录
[root@localhost ~]# cd - # "cd -" 命令回到进入当前目录之前的目录
[root@localhost ~]# cd - # 再执行一遍"cd -"命令又回到了test/abc 目录
[root@localhost ~]# cd #直接用cd命令,回到家目录

命令补全:按tab键

4. pwd命令
1
2
3
4
5
6
命令名称:pwd
命令英文原意:print working directory
命令路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录

使用方法

1
2
[root@localhost ~]# pwd	#显示绝对路径
/root
5. rmdir命令
1
2
3
4
5
6
7
命令名称: rmdir
命令英文原意:remove empty directories
命令路径:/bin/rmdir
执行权限:所有用户
语法:rmdir [目录]
功能描述:删除空目录
使用-p可递归删除

使用方法

1
2
3
[root@localhost ~]# mkdir -p test/abc/def   #使用-p递归创建目录test/abc/def
[root@localhost ~]# rmdir -p test/abc/def/ #使用-p递归删除空目录
#rmdir命令的作用十分有限,因为只能删除空目录,所以一旦目录中有文件就会报错,不常用.
6. cp命令
1
2
3
4
5
6
7
8
9
10
命令名称: cp
命令英文原意:cope
命令路径:/bin/cp
执行权限:所有用户
语法: cp -rp [原文件或目录] [目标文件或目录]
-r 复制目录
-p 保留文件属性功能描(包括所有者、所属组、权限和时间)
-l 把目标文件建立为源文件的硬链接,而不是复制源文件
-s 把目标文件建立为源文件的软链接,而不是复制源文件
功能描述:复制文件或目录,更改名字

使用方法

1
2
3
4
5
6
7
8
[root@localhost ~]# cp ps.txt /root/test/testOne   #把ps.txt文件复制到testOne目录下 
[root@localhost test]# cp -r test1 testTwo #将目录test复制到目录testTwo中
[root@localhost cesi1]# cp ps.txt ps_bak.txt #复制并且重新命名
[root@localhost cesi1]# cp -p ps.txt ps_bak2 #保留原属性
[root@localhost ~]# cp -l /root/ps.txt /root/psbak.txt #复制为硬链接文件
[root@localhost ~]# cp -s /root/ps.txt /root/psbak1.txt #复制为软链接文件

#注意:可以同时复制多个文件,只要有目标文件就可以大小写严格区分
7. mv命令
1
2
3
4
5
6
7
8
9
10
11
命令名称: mv
命令英文原意: move
命令路径:/bin/mv
执行权限:所有用户
语法:mv [原文件或目录] [目标目录]
功能描述:剪切文件、改名
选项:
-f 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-n 如果目标文件已经存在,则不会覆盖移动,而且不询问用户
-v 显示详细信息

使用方法

1
2
3
[root@localhost ~]# mv ps_bak.txt /tmp		#移动后源文件被删除,类似剪切
[root@localhost ~]# mv /root/test /tmp #可以直接移动目录,不需要加-r选项
[root@localhost ~]# mv -v /root/test /tmp #显示移动过程
8. rm命令
1
2
3
4
5
6
7
8
9
命令名称:rm
命令英文原意:remove
命令路径:/bin/rm
执行权限:所有用户
语法: rm -rf [文件或目录]
-r 删除目录
-f 强制执行(不希望有询问)
-i 交互删除,在删除之前会询问用户
功能描述:删除文件

使用方法

1
2
3
4
5
6
7
8
9
[root@localhost cesi1]# rm ps_bak2  #删除文件ps_bak2 
rm:是否删除普通文件 "ps_bak2"?y #系统询问是否删除,y同意,n不同意
[root@localhost cesi1]# rm -f ps.txt #强制删除ps.txt文件
[root@localhost cesi2]# rm -f testOne #强制删除cesi1目录
rm: 无法删除"testOne": 是一个目录
[root@localhost cesi2]# rm -rf testOne #强制删除cesi1目录

#注意:谨慎操作、没有回收站可言、删除之前先备份
#虽然"-rf"选项是用来删除目录的,但是删除文件也不会报错,所以,为了使用方便,通常情况下不论是删除文件还是删除目录,都会直接使用-rf选项.

文件处理命令

1. touch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
命令名称:touch
命令英文原意:touch 触摸
命令路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能描述:如果文件不存在,则会建立空文件;如果文件已经存在,则会修改文件的时间戳(访问时间、数据修改时间、状态修改时间都会改变),千万不要把touch命令当成新建文件的命令
选项:
-a 只修改文件的访问时间
-c 如果文件不存在,则不建立新文件
-d 把文件的时间改为指定时间
-m 只修改文件的数据修改时间

Linux中的每个文件都有三个时间,分别是访问时间(access time)、数据修改时间(modify time)和状态修改时间(change time).这三个时间可以通过stat命令进行查看.不过touch命令只能手工指定是只修改访问时间,还是只修改数据修改时间,而不能指定只修改状态时间.因为不论是修改时间,还是修改文件的数据修改时间,对文件来讲,状态都会发生改变,所以状态修改时间会随之改变.

注意:linux中,文件没有创建时间

使用方法

1
2
3
4
[root@localhost test]# touch program     #在本目录下创建文件program 
[root@localhost test]# touch /root/test/testOne/program_bak #指明路径创建program_bak
[root@localhost cesi1]# touch program file #同时创建两个文件program file
[root@localhost cesi1]# touch "program file" #创建带空格的文件
2. stat
1
2
3
4
5
6
7
命令名称:stat
英文原意:didplay file or file system status
所在路径:/usr/bin/stat
执行权限:所有用户
功能描述:显示文件或文件系统的详细信息
选项:
-f 查看文件所在的文件系统信息,而不是查看文件的信息

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@192 ~]# stat anaconda-ks.cfg #查看文件详细信息
文件:"anaconda-ks.cfg"
大小:1730 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67157058 硬链接:1
权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2021-08-28 13:27:51.039154734 +0800
最近更改:2021-05-11 00:55:44.215098551 +0800
最近改动:2021-05-11 00:55:44.215098551 +0800
创建时间:-
#虽然出现了创建时间,但是这个时间无论怎么修改都是-

[root@192 ~]# stat -f anaconda-ks.cfg #查看文件系统信息
文件:"anaconda-ks.cfg"
ID:fd0000000000 文件名长度:255 类型:xfs
块大小:4096 基本块大小:4096
块:总计:12312705 空闲:9065203 可用:9065203
Inodes: 总计:24637440 空闲:24407454

3. cat
1
2
3
4
5
6
7
8
9
10
11
命令名称:  cat
命令英文原意:concatenate files and print on the standard output
命令路径:/usr/bin/cat
执行权限:所有用户
语法:cat [文件名]
功能描述:合并文件并打印输出到标准输出
-n:显示行号
-A:相当于-vET 选项的整合,用于列出所有隐藏符号
-E:列出每行结尾的回车符$
-T:把Tab键用^I显示出来
-v:列出特殊字符

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost cesi1]# cat /etc/issue  #查看issue文件内容
\S
Kernel \r on an \m

[root@localhost cesi1]# cat -n /etc/issue #查看文件显示行号
1 \S
2 Kernel \r on an \m
3
#cat命令用于查看文件内容,适合查看不太大的文件.
[root@192 ~]# cat -A /etc/issue
\S$
Kernel \r on an \m$
$
4. tac
1
2
3
4
5
6
命令名称:   tac
命令英文原意:
命令路径:/usr/bin/tac
执行权限:所有用户
语法:tac [文件名]
功能描述:显示文件内容(反向列示)--倒的显示

使用方法

1
2
3
4
5
6
root@localhost cesi1]# tac /etc/issue   #显示文件,反向显示 

Kernel \r on an \m
\S
[root@localhost cesi1]# tac -n /etc/issue #tac没有-n显示行号,错误的
tac:无效选项 -- n
5. more
1
2
3
4
5
6
命令名称:  more
命令英文原意:file perusal filter for crt viewin
命令路径:usr/bin/more
执行权限: 所有用户
语法: more [文件名]
功能描述: 分页显示文件内容

使用方法

1
2
3
4
5
6
7
8
9
10
11
[root@localhost cesi1]# more /etc/services
#操作事项:
# 空格或f 翻下页
# b 向上翻页
# Enter 换行
# q/Q 退出

[root@localhost cesi1]# more -100 /etc/services #从100行开始看起

[root@localhost cesi1]# more -1000d /etc/services #从1000行开始看起,显示帮助

6. less
1
2
3
4
5
6
命令名称:  less
命令英文原意:opposite of more
命令路径: /usr/bin/less
执行权限:所有用户
语法: less [文件名]
功能描述:分行显示文件内容(可向上翻页,可以搜索)

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost cesi1]# less /etc/services  #查看文件

#操作事项:
空格或 f 翻页
Enter 换行
q/Q 退出
page up 向上翻页
page down 向下翻页
箭头 (上) 逐行往上

可以进行搜索:/ 表示搜索, 例如:/servic n表示(next)继续往下找
u表示(up)往上找

7. head
1
2
3
4
5
6
7
命令名称: head
命令英文原意:output the first part of files
命令路径:/usr/bin/head
执行权限:所有用户
语法:head [文件名]
功能描述:显示文件前面几行
-n 指定行数

使用方法

1
2
3
4
5
6
7
8
9
[root@localhost cesi1]# head -n 20 /etc/services              #显示开头20行的内容
[root@localhost cesi1]# head /etc/services #默认的是前10行,主要用在查看脚本文件
[root@192 ~]# head -5 anaconda-ks.cfg #-n 5,可以写成-5,显示前5行
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom

8. tail
1
2
3
4
5
6
7
8
命令名称: tail
命令英文原意:output the last part of files
命令路径:/usr/bin/tail
执行权限:所有用户
语法:tail [文件名]
功能描述:显示文件结尾的内容
-n 指定行数
-f 监听文件的新增内容

使用方法

1
2
3
4
[root@localhost cesi1]# tail -n 19 /etc/services             #显示services文件末尾19行内容

[root@localhost cesi1]# tail -f /var/log/messages #-f 动态显示,更新后可以看到数据变化,CTRL+C退出
#光标不会退出文件,而会一直监听在文件的结尾处,验证需要开启一个新的终端

链接命令ln

1
2
3
4
5
6
7
命令名称:ln
命令英文原意: link
命令路径:/bin/ln
执行权限:所有用户
语法: ln -s[原文件] [目标文件] 创建软链接
ln [原文件] [目标文件] 创建硬链接
功能描述:生成链接文件

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost ~]# cp -l /root/ps.txt /root/psbak.txt	#复制为硬链接文件
[root@localhost ~]# cp -s /root/ps.txt /root/psbak1.txt #复制为软链接文件

#软链接
[root@localhost cesi1]# ln -s /etc/issue /root/test/issue.soft #创建软链接issue.soft
#软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求)
软链接特征:类似windows快捷方式(使用的比较多)
lrwxrwxrwx. 1 root root 10 12月 3 14:46 issue.soft -> /etc/issue
1.软链接的权限都是rwx(方便管理)
2.文件较小,只是符号链接
3.issue.soft -> /etc/issue 箭头指向源文件

#硬链接
[root@localhost test]# ln /etc/issue /root/test/issue.hard #创建硬链接issue.hard文件

[root@localhost test]# echo "www.google.com" >> /etc/issue #在文件后面加上www.google.com
[root@localhost test]# cat issue.hard #查看硬链接文件,看到数据同步更新

[root@localhost test]# ls -i issue.hard #查看硬链接的 i 节点
33555492 issue.hard
[root@localhost test]# cd /etc
[root@localhost etc]# ls -i issue #查看原文件的 i 节点
33555492 issue

# 硬链接的特点
1.不论是修改源文件,还是修改硬链接文件,另一个文件中的数据都会发生改变
2.不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问.
3.硬链接不会建立新的inode信息,也不会更改inode的总数
4.硬链接不能跨文件系统(分区)建立,应为在不同的文件系统中,inode号是重新计算的.
5.硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下的所有子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的Linux来讲过于复杂.

注意:软链接删除原文件,对软链接有影响
硬链接删除原文件,对硬链接没有影响

权限管理命令

为什么需要权限

在计算机系统中,权限的设定和不同用户等级的分配是为了确保系统的安全性和数据的完整性.尽管在个人计算机上,我们可能都是被信任的用户,可以直接使用管理员身份登录,但在服务器上,情况就不同了.

服务器承载着大量重要且具有高价值的数据,如游戏数据、电子商城数据、银行数据等.为了保护这些数据免受不当访问和意外损坏,需要对权限进行详细的设定.不同的用户可能需要执行不同的任务,具备不同的职位,因此需要分配相应的用户等级和权限等级.

在服务器环境中,不是所有用户都应该以root身份登录.管理员拥有最大的系统权限,因此为了最小化潜在的风险,需要按照工作需要和职位需要来合理分配用户等级和权限等级.这样可以有效地防止不必要的数据访问和潜在的安全漏洞,确保服务器系统的稳定性安全性.

权限管理

  • 所有者:一般是这个文件的建立者.
  • 所属组:用户组是一组用户的集合,类似大学里各种社团.将用户放到用户组里是为了方便管理.
  • 其他用户权限:字面意思即非所有者和所属组成员的用户对文件的权限.

文件类型

  • “-“:普通文件.
  • “b”:块设备文件.这是一种特殊设备文件,存储设备都是在这种文件,如分区文件 /dev/sda1 就是这种文件.
  • “c”:字符设备文件.这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等.
  • “d”:目录文件.Linux中一切皆文件,所以目录也是文件的一种.
  • “l”:软链接文件.
  • “p”:管道符文件.这是一种非常少见的特殊设备文件.
  • “s”:套接字文件,这也是一种特殊设备文件,一些服务支持Socket访问,就会产生这样的文件.

文件目录权限总结:

代表字符 权限 数字代表 对文件的含义 对目录的含义
r 读权限 4 可以查看文件的内容 可以列出目录中的内容
w 写权限 2 可以修改文件内容 可以在目录中创建、删除文件
x 执行权限 1 可以执行文件 可以进入目录

基本权限命令

1. chmod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
命令名称:   chmod
命令英文原意:change the permissions mode of a file
命令路径: /bin/chmod
执行权限:所有用户
语法: chmod [{ugoa}{+-=}{rwx}] [文件或目录]
[mode=421] [文件或目录]
-R 递归修改
功能描述:改变文件或目录权限 所有者和root可以该文件权限

用户身份
u:代表所有者(user)
g:代表所属组(group)
o:代表其他人(other)
a:代表全部身份(all)
赋予方式
+:加入权限
-:减去权限
=:设置权限
权限
r:读取权限(read)
w:写权限(write)
x:执行权限(execute)

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@192 ~]# touch qx
[root@192 ~]# ll qx
-rw-r--r--. 1 root root 0 9月 6 16:30 qx
[root@192 ~]# chmod u=rwx,g=rw,o=rw qx
[root@192 ~]# ll qx
-rwxrw-rw-. 1 root root 0 9月 6 16:30 qx
[root@192 ~]# chmod 755 qx #给文件赋予755权限:4代表r/2代表w/1代表x
[root@192 ~]# ll qx
-rwxr-xr-x. 1 root root 0 9月 6 16:30 qx
[root@localhost test]# chmod -R 777 test #修改目录test及其目录下文件为所有用户具有全部权限

# 644,文件的基本权限,代表rw-r--r--
# 755,这是文件的执行权限和目录的基本权限,代表rwxr-xr-x
# 777,这是最大权限,尽量不要赋予这样的权限
2. chown
1
2
3
4
5
6
命令名称:  chown
命令英文原意:change file own ership
命令路径: /bin/chown
执行权限:所有权限
语法: chown [用户] [文件或目录]
功能描述:改变文件或目录的所有者 只有root用户可以

使用方法

1
2
3
4
5
6
7
[root@192 ~]# chown Bob test #改变Bob文件的所属用户
[root@192 ~]# ll test
-rwxr-xr-x. 1 Bob root 0 9月 6 16:30 test

[root@192 ~]# chown bob:bob test #改变所属用户和用户组,使用:也可以用.替代
[root@192 ~]# ll test
-rwxr-xr-x. 1 bob bob 0 9月 6 16:30 test

文件搜索命令

Linux拥有强大的搜索功能,但是强大带来的缺点是相对比较复杂,搜索命令只是选项较多,不容易记忆而已,并不难理解.

在使用搜索命令的时候,大家要注意,如果搜索的范围过大、搜索的内容过多,则会给系统造成巨大的压力,所以不要在服务器访问的高峰执行大范围的搜索命令.

命令 描述
find 文件搜索
which 搜索命令所在目录及别名信息
whereis 搜索命令所在目录及帮助文档路径
grep 在文件内容中搜索子串匹配的行并输出
1. which
1
2
3
4
5
6
命令名称:which
命令英文原意:shows the full path of(shell) commands
命令路径:/usr/bin/which
执行权限:所有用户
语法:which [命令]
功能描述:搜索命令所在目录及别名信息

使用方法

1
2
3
4
5
6
7
8
9
10
11
#需要了解知识:
# /bin或/usr/bin/ 所有用户使用的命令
#/sbin或/usr/sbin 只有root用户才能使用

[root@localhost test]# which ls #查看ls目录的路径
alias ls='ls --color=auto'
/usr/bin/ls

[root@localhost test]# which cp #查看cp目录的路径
alias cp='cp -i'
/usr/bin/cp
2. find

find是Linux中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode号等来搜索文件.但是find命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大,所以在使用find命令搜索时,不要指定过大的搜索范围.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##需要了解知识: 
1.搜索会大量占用系统资源
2.Linux以数据块为最小存储单位:1数据块=512字节=0.5KB 100MB=102400KB= 204800数据块
3.搜索的范围尽量越小越好,越精确越好,这样可以节约Linux的系统资源
4.在find中用到的通配符 *:可以匹配任意字符 ?:可以匹配单个字符

命令名称: find
命令英文原意: scarch for files in a directory hierarchy
命令路径:/usr/bin/find
执行权限:所有用户
语法:find 搜索路径 [选项] 搜索内容
选项
-name 按照文件名搜索
-iname 按照文件名搜索,不区分文件名大小写
-inum 按照inode号搜索
功能描述:文件搜索

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
##范例1:按照文件名搜索
-name -iname -inum (* ?) 的用法
[root@localhost /]# find /etc -name init #在目录/etc中查找文件init
#使用通配符(* ?)进行查找文件
[root@localhost /]# find /etc -name *init* #查找包含init的文件
[root@localhost /]# find /etc -name init??? #查找init后面有3个字符的文件
#使用 -iname 不区分大小写
[root@localhost /]# find /etc -iname init* #查找init*文件不区分大小写


##范例2:按照文件大小搜索
-size +n:大于 -n:小于 =n 等于 n表示数据块 (n是整数)
#find不写单位默认按照512B来进行查找,单位依次是b/c/w/k/M/G;c表示字节、w表示双字节(中文)
[root@localhost /]# find / -size +204800 #在根目录下查找大于100MB的文件
[root@localhost /]# find / -size +300k #在根目录下查找大于300KB的文件
[root@localhost /]# find / -size -300k #在根目录下查找小于300KB的文件



##范例3:-user:根据用户查询 -group:根据所属组查询
[root@localhost /]# find /home -user cesi #在根目录下查找所有者为cesi的文件
[root@localhost /]# find /home -user cesi -name cesi #在根目录下查找所有者为cesi文件名字为cesi的文件
/home/cesi


##范例4:按照修改时间搜索
linux中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)
-atime[+/-]时间:按照访问时间搜索
-mtime[+/-]时间:按照文件数据修改时间搜索
-ctime[+/-]时间:按照文件状态修改时间搜索
[root@localhost /]# find /root -atime -5 #查找/root文件下5天内修改的文件
-5 代表5天内修改的文件
5 代表前5-6天修改的文件
+5 代表6天前修改的文件

[root@localhost /]# find /root -amin -30 #查找/root文件下30分钟内被浏览过的文件
-amin
-mmin
-cmin

##范例5:按照权限搜索
-perm 权限模式:查找文件权限刚好等于"权限模式"的文件
-perm -权限模式:查找文件权限全部包含"权限模式"的文件
-perm +权限模式:查找文件权限包含"权限模式"任意一个权限的文件
[root@localhost /]# chmod 755 test1
[root@localhost /]# chmod 444 test2
[root@localhost /]# chmod 600 test3
[root@localhost /]# chmod 200 test4
[root@localhost /]# find / -perm -u=s
[root@localhost /]# find -perm 444 #按照指定权限搜索文件,文件的权限必须和搜索指定的权限一致

##范例6:按照文件类型搜索
-type d :查找目录
-type f :查找普通文件
-type l :查找软链接文件

##范例7:逻辑运算符(与或非)
-a and -o or -not
[root@localhost /]# find /etc -name init* -a -type d #查找init*开头的目录(配合使用)

## 范例8:
-exec:对搜索结果执行操作 -ok:询问确认信息
{} \; :固定格式 {}:结果集 \:转译符 ;:结束
[root@localhost /]# find / -name kali.txt -ok rm -rf {} \; #使用rm命令删除找到的文件
3. grep
1
2
3
4
5
6
命令名称:grep
命令英文原意:grep
命令路径:/bin/grep
执行权限:所有用户
语法: grep -iv [指定字串] [文件]
功能描述:在文件中搜索字符串匹配的行并输出

使用方法

1
2
3
4
5
6
7
8
9
[root@localhost sbin]# grep -i sum ./sum.sh  #查找sum.sh脚本中sum的内容 

-i 不区分大小写
-v 排除指定字串,反向查找
-n 输出行号
--color=auto 搜索出的关键字用颜色显示

[root@localhost sbin]# grep -i ^# /etc/passwd #查找首行为#号的内容
[root@localhost sbin]# grep -iv ^# /etc/passwd #查找首行不为#号的内容

帮助命令

1. man [info]

1
2
3
4
5
6
命令名称:man
命令英文原意:manual 手册
命令路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
功能描述:获取帮助信息

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## 查看命令的帮助信息
[root@localhost sbin]# man ls #查看ls命令的帮助信息
#键盘输入 / -l #可以找关于-l相关选项的内容,按键盘 n 查找下一个 (/表示搜索)

## 查看配置文件的帮助信息 使用man查看配置文件时,不要增加绝对路径,直接写配置文件名称就可以
[root@localhost sbin]# man services #查看配置文件services的帮助信息

##查看一个特殊的 passwd
[root@192 ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
#说明:passwd中有两个帮助文档passwd.1.gz和passwd.5.gz ,其中 1:命令的帮助 5:配置文件的帮助
查看配置文件的帮助
[root@localhost sbin]# man 5 passwd #查看配置文件的帮助文档

## 查看date帮助文档
[root@localhost sbin]# date #查看时间
#使用man date 查看格式如下
[root@localhost sbin]# date 120811582021
2021年 12月 08日 星期三 11:58:00 CST

2. help

1
2
3
4
5
命令名称:help
命令路径:shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得shell内置命令的帮助信息

3. –help

1
[root@localhost sbin]# touch --help

压缩解压缩命令

Linux系统中,与Windows不同,文件类型并非仅依赖于扩展名,而主要取决于文件的权限.Linux系统不靠扩展名来区分文件类型,而是通过权限来控制.各种压缩格式(如”.zip”、”tar”、”gz”、”bz2”等)在Linux中的解压缩方法各不相同,扩展名在此主要作为用户辨识压缩格式的标识.

用户在Linux系统中不需要深入了解各种压缩格式的技术差异,只需知道对应的压缩包如何解压缩,以及在需要压缩文件时应如何操作.这种差异不仅体现在表面的扩展名上,更涉及到系统底层的权限和文件管理机制.因此,在Linux中正确识别和处理压缩文件需要用户了解正确的压缩格式,以使用相应的压缩命令.

1. gzip gunzip命令

.gz格式是Linux中最常用的压缩格式,使用gzip命令进行压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
命令名称:gzip
命令英文原意:GUNzip
命令路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件
压缩后的格式: .gz

命令名称:gunzip
命令英文原意:GUNunzip
命令路径:/bin/gunzip
执行权限:所有用户
语法:gzip [压缩文件]
功能描述:解压缩.gz的压缩文件
1
2
3
[root@localhost test]# cp /etc/services /root/test/compress   #复制services文件,更名为compress 
[root@localhost test]# gzip compress ##压缩比是5倍左右
[root@localhost test]# gunzip compress.gz #解压compress.gz文件
gzip

只能压缩文件,压缩后不保留原文件,不能压缩目录

2. zip unzip命令

.zip是Windows中最常用的压缩格式,Linux也可以正确识别.zip格式,这可以方便地和Windows系统通用压缩文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
命令名称:zip
命令路径:/usr/bin/zip
执行权限:所有用户
语法:zip 选项[-r] [压缩后文件名] [文件或目录]
-r 压缩目录
功能描述:压缩文件或目录
压缩后文件格式: .zip
优点:Linux和windows都支持的压缩格式,且压缩后保留原格式

命令名称:unzip
命令路径:/usr/bin/unzip
执行权限:所有用户
语法:unzip [压缩文件]
功能描述:解压 .zip 的压缩文件
1
2
[root@localhost test]# zip yasuo.zip yasuo
[root@localhost test]# unzip yasuo.zip #解压yasuo.zip

3. bzip2 bunzip2命令

.bz2格式是Linux的另一种压缩格式,从理论上来讲,.bz2格式的算法更先进,压缩比更好;而.gz格式相对来讲压缩时间更快。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
命令名称:bzip2
命令路径:/usr/bin/bzip2
执行权限:所有用户
语法:bzip2 选项[-k] [文件]
-k产生压缩文件后保留原文件
功能描述:压缩文件
压缩后文件格式: .bz2

命令名称:bunzip2
命令路径:/usr/bin/bunzip2
执行权限:所有用户
语法:bunzip2 [-k][压缩文件]
-k 解压缩后保留原文件
功能描述:解压 .zip 的压缩文件
1
2
[root@localhost test]# bzip2 -k compress  #使用bzip2  压缩文件compress 
[root@localhost test]# bunzip2 -k compress.bz2 #使用bunzip2解压compress.bz2文件

4. tar命令

在Linux中,对打包和压缩是区别对待的.在Linux中,如果想把多个文件或目录打包到一个文件包中,使用的是tar命令,而压缩使用的是gzip或bzip2命令.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
命令名称:tar
命令路径:/bin/tar
执行权限:所有用户
语法:tar 选项[-zcf] [压缩后文件名] [目录]
-c 打包
-v 显示详细信息
-f 指定文件名(必须加)
-z 打包同压缩
功能描述:打包目录 名字是为了方便区分,一般加.tar
压缩后文件格式: .tar.gz


命令名称:tar
tar命令解压缩语法:
-x 解包
-v 显示详细信息
-f 指定解压文件
-z 解压缩
1
2
3
4
5
6
7
8
9
10
root@localhost test]# tar -cvf test.tar   testOne testTwo  #打包testOne  testTwo目录 
[root@localhost test]# gzip testOne.tar #压缩testOne.tar

##.tar.gz压缩格式是互联网最常见的压缩格式
[root@localhost test]# tar -zcf testOne.tar.gz testOne #打包压缩testOne目录为testOne.tar.gz
[root@localhost test]# tar -zxvf testOne.tar.gz #解压解包 testOne.tar.gz

##.tar.bz2
[root@localhost test]# tar -cjf compress.tar.bz2 compress #使用tar 用选项-j 替代 bzip2命令
[root@localhost test]# tar -xjf compress.tar.bz2

网络命令

IP地址是计算机在互联网中唯一的地址编码.每台计算机如果需要接入网络和其他计算机进行数据通信,就必须配置唯一的公网IP地址.

Linux也需要配置IP地址才可以正常使用网络.其实Linux主要是通过修改网卡配置文件来永久修改IP地址的.

1. ip命令

ip命令逐渐取代了ifconfig命令,两条命令功能接近,但是ip命令的功能更加强大

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
命令名称:ip
英文原意:Internet Protocol
所在路径:/usr/sbin/ip
执行权限:超级用户
功能描述:显示和设置网络路由、路由策略.
语法:ip options object {command | help}
options包括:
-V,显示版本
-h,符合人类阅读习惯显示输出
-f,-family {inet, inet6, link} 强制使用指定的协议族
-4,指定使用的网络层协议是IPv4协议
-6,指定使用的网络层协议是IPv6协议
-B,指定使用的网络层协议是Bridge协议
-D,指定使用的网络层协议是decnet协议
-M,指定使用的网络层协议是mpls协议
-0,指定使用的网络层协议是link协议
-i,指定使用的网络层协议是ipx协议
-d,输出更详细的信息
-o,-oneline,输出信息每条记录输出一行,即使内容较多也不换行显示
-r,-resolve,显示主机时,不使用IP地址,而使用主机的域名
-l,-loops,指定"ip地址刷新"的最大循环数.如果设置为0,那么将会一直尝试,直到所哟地址被移除.
-t,-timestamp,当使用监视器选项时,输出时间戳
-a,-all,执行指定命令给所有对象(如果命令支持这个选项)
-c,-color,使用颜色输出

ip command语法:
object包括:
address:网络设备的IP(v4或者v6)地址信息
link :网络设备信息
maddress:多播地址
mourte:组播路由缓存条目
monitor:监控网络链接消息
netns:管理网络命名空间
ntable:管理邻居表缓存操作
neighbour:邻居表
route:路由表
rule:IP策略
tunnel:IP隧道
tuntap:管理tun/tap设备

COMMAND包括:
add:新增
delete:删除
show(or list):显示
set:设置参数

使用方法

1.查看IP地址信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@192 ~]# ip address show  ##
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
##以上是lo(本地回环网卡)的信息,它只是代表我们的网络协议正常,就算不插入网线也可以ping通,所以没有实际意义.
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:22:2b:04 brd ff:ff:ff:ff:ff:ff ##MAC地址
inet 192.168.111.130/24 brd 192.168.111.255 scope global noprefixroute dynamic ens33
##IP地址和子网掩码
valid_lft 1274sec preferred_lft 1274sec
inet6 fe80::756e:e00:e05e:e2f7/64 scope link noprefixroute
valid_lft forever preferred_lft forever
##以上是ens33网卡的信息
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:8b:10:e4 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000

##这个命令可以进行简写 ip add
这个命令主要可以查看MAC地址、IP地址和子网掩码这三个信息,其他内容如IPV6的信息目前还没有生效,可以忽略

2.查看路由表

1
2
3
4
5
[root@192 ~]# ip route show
default via 192.168.111.2 dev ens33 proto dhcp metric 100 ##此为网关
192.168.111.0/24 dev ens33 proto kernel scope link src 192.168.111.130 metric 100

##这个命令简写为 ip route

2. ifconfig命令

1
2
3
4
5
6
7
8
命令名称:ifconfig
命令英文原意:interface configure
命令路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息

没有该命令,可以通过 yum provides ifconfig命令安装

1.查看IP地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@192 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
#ens33网卡信息 网络参数 最大传输单元
inet 192.168.111.130 netmask 255.255.255.0 broadcast 192.168.111.255
#IP地址 #子网掩码 #广播地址
inet6 fe80::756e:e00:e05e:e2f7 prefixlen 64 scopeid 0x20<link>
#IPv信息,目前未生效
ether 00:0c:29:22:2b:04 txqueuelen 1000 (Ethernet)
#MAC地址
RX packets 36975 bytes 3483314 (3.3 MiB)
#接收的数据包大小
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33822 bytes 25432748 (24.2 MiB)
#发送的数据包大小
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
#本地回环网卡信息
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2660 bytes 226556 (221.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2660 bytes 226556 (221.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 52:54:00:8b:10:e4 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

3. ifup和ifdown命令

ifup和ifdown是两个非常简单的命令,其作用类似于Windows中的启用和禁用网卡,主要用于启用和关闭网卡

1
2
[root@192 ~]# ifdown eth0  #关闭eth0网卡
[root@192 ~]# ifup eth0 #启用eth0 网卡

4. ping命令

ping命令是常用的网络命令,主要通过ICMP进行网络探测,测试网络中主机的通信情况

1
2
3
4
5
6
7
8
命令名称:ping
命令路径:/bin/ping
执行权限:所有用户
语法:ping 选项 ip地址
-c 指定发送次数
-b 后面加入广播地址,用于对整个网段进行探测
-s 字节:指定探测包的大小
功能描述:测试网络连通性
1
2
3
root@localhost test]# ping 192.168.2.156   #测试到主机的连通性,按Ctrl+C后结束测试
root@localhost test]# ping -c 3 192.168.111.1 #指定ping的次数
root@localhost test]# ping -b -c 3 192.168.111.255 #探测网段可用主机

5. ss命令

在CentOS7,可以通过ss命令取代netstat命令.

1
2
3
4
5
6
7
8
9
10
命令名称:ss
命令路径:/usr/sbin/ss
执行权限:超级用户
语法:ss 选项
-a:列出所有网络状态,包括Socket程序
-n:使用IP地址和端口号显示,不使用域名和服务名
-p:显示PID和程序名
-t:显示TCP端口的连接状态
-u:显示UDP端口的连接状态
功能描述:查询网络访问
1
2
3
4
5
6
root@localhost test]# ss -an #查看本机所有的网络连接,包括Scoket程序连接,TCP连接,UDP连接

root@localhost test]# ss -tuln #查询本机开启的端口,tu代表查看TCP和UDP连接,l代表查看监听状态,n代表用IP和端口号显示.

root@localhost test]# ss -tuan ##查看本机开启的端口与正在进行的连接
## -a 代表所有内容,和-l选项的区别是,-a选项除了可以看到监听状态的端口,还可以查看正在连接的端口.如果只使用-an会列出大量的Scoket连接,干扰查看,使用-tuan可以只显示TCP和UDP的连接状态.

6. netstat命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
命令名称:netstat
命令路径:/bin/netstat
执行权限:所有用户
语法:netstat [选项]
功能描述:输出网络连接、路由器、接口统计、伪装连接和组播成员
选项:
-a: 列出所有网络状态,包括Socket程序
-c 秒数:指定每隔几秒刷新一次网络状态
-t: TCP协议 通过3次握手后连通
-u: UDP协议 不握手直接发送信息
-l: 显示监听状态的连接
-r: 路由表
-n: 显示IP地址和端口号,不使用域名与服务名
-p: 显示PID和程序名

端口的作用:在互联网中,如果IP地址是服务器在互联网中唯一的地址标识,那么想象一下,我有一台服务器,它有固定的公网IP地址,通过IP地址可以找到我的服务器.但是我的服务器中既启动了网页服务(WEB服务),又启动了文件传输服务(FTP服务),那么你的客户端访问我的服务器,到底应该如何确定你访问的是哪一个服务?

端口就是用于网络通信的接口,是传输层向上传递数据到应用层的通道.我们可以理解为每个常规服务都有默认的端口号,通过不同的端口号,就可以确定不同的服务.这样,互联网上的数据流就能准确地到达我们期望的服务,实现了不同服务之间的有效区分和协同工作.

1
2
3
[root@localhost ~]# netstat -tuln  ##查看本机开启的端口
[root@localhost ~]# netstat -tulnp ##查看本机有哪些程序开启的端口
[root@localhost ~]# netstat -an ##查看所有连接

7. lsof

  • lsof(List Open Files)是一个用于显示系统中已打开文件的工具,包括网络套接字、设备文件等.
  • 通过lsof命令,你可以查看哪些进程打开了哪些文件、套接字,以及它们所占用的资源情况.
基本语法

lsof的基本语法是:

1
lsof [option] [file | directory | process ID]
  • option:用于指定一些选项,如-i用于显示网络连接.
  • file | directory | process ID:可选参数,用于过滤显示的结果.
主要功能
  • 显示打开文件的进程:
    • lsof [file]:显示指定文件相关的进程信息.
    • lsof [directory]:显示指定目录相关的进程信息.
  • 网络连接查询:
    • lsof -i:显示所有打开的网络连接和套接字信息.
  • 按进程ID过滤:
    • lsof -p [process ID]:显示特定进程ID打开的文件和套接字.
  • 按用户过滤:
    • lsof -u [username]:显示指定用户打开的文件和套接字.
例子和用法
  • 显示所有打开文件的进程:

    1
    lsof
  • 显示指定文件相关的进程信息:

    1
    lsof /path/to/file
  • 显示网络连接和套接字信息:

    1
    lsof -i
系统级别的操作
  • 查找占用端口的进程:

    1
    lsof -i :[port]
  • 查看已删除的文件被哪个进程占用:

    1
    lsof +L1

8. scp

  • scp(Secure Copy Protocol)是一个用于在本地和远程系统之间安全地传输文件的命令行工具.
  • scp通过SSH协议进行数据传输,提供加密和认证的安全性.
基本语法

scp的基本语法是:

1
scp [options] [source] [destination]
  • options:可选参数,用于指定一些选项,如-r用于递归复制.
  • source:源文件或目录的路径.
  • destination:目标路径,可以是本地路径或远程主机路径.
主要功能
  • 从本地到远程的复制:
    • scp [source] [user@remote_host:destination]
  • 从远程到本地的复制:
    • scp [user@remote_host:source] [destination]
  • 递归复制:
    • scp -r [source_directory] [user@remote_host:destination_directory]
  • 指定端口:
    • scp -P [port] [source] [user@remote_host:destination]
例子和用法
  • 从本地到远程的复制:

    1
    scp file.txt root@192.168.64.123:/path/to/destination/
  • 从远程到本地的复制:

    1
    scp root@192.168.64.123:/path/to/source/file.txt /local/destination/
  • 递归复制:

    1
    scp -r folder root@192.168.64.123:/path/to/destination/
注意事项
  • scp是基于SSH的,确保远程主机支持SSH.
  • 当传输大量文件或文件夹时,使用-r选项以递归方式复制.

9. nmtui

  • 命令名称: nmtui
  • 命令路径: /usr/bin/nmtui
  • 执行权限: root权限执行.
  • 语法:nmtui

进程管理命令

1. ps

查看进程信息

基本语法

ps [options]

主要功能
  • ps命令用于显示当前运行的进程信息.
  • 通过不同的选项可以指定显示不同类型的进程信息.
例子和用法
  • 显示所有用户的详细进程信息:

    1
    2
    3
    4
    5
    ps aux
    [root@localhost ~]# ps aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.3 193688 6216 ? Ss 14:12 0:03 /usr/lib/systemd/systemd --switched-root --system --desroot 2 0.0 0.0 0 0 ? S 14:12 0:00 [kthreadd]
    root 4 0.0 0.0 0 0 ? S< 14:12 0:00 [kworker/0:0H]
    • USER: 显示进程的拥有者,即运行进程的用户.
    • PID: 进程ID,是每个进程的唯一标识符.
    • %CPU: 进程占用CPU的百分比,表示进程在CPU上的利用率.
    • %MEM: 进程占用内存的百分比,表示进程在物理内存上的利用率.
    • VSZ: 进程的虚拟内存大小(以KB为单位),包括进程使用的所有虚拟内存.
    • RSS: 进程使用的实际物理内存大小(以KB为单位),即驻留集大小.
    • TTY: 与进程关联的终端类型,如果没有终端与之关联,则显示?.
    • STAT: 进程状态,常见的包括:
      • S(Sleeping): 进程休眠中.
      • R(Running): 进程正在运行.
      • D(Disk sleep): 进程不可中断的休眠.
      • Z(Zombie): 僵尸进程,进程已经终止,但其父进程尚未回收其资源.
    • START: 进程启动的时间,显示时钟时间或者日期.
    • TIME: 进程占用CPU的累计时间,显示格式为分钟:秒.
    • COMMAND: 启动进程的命令行.
  • 查找特定进程的详细信息:

    1
    ps aux | grep process_name

2. top

实时查看系统进程

基本语法

top

主要功能
  • top命令提供了实时显示系统中运行的进程及其资源占用情况的功能.
  • 以动态更新的方式展示进程列表和各项资源使用情况.
例子和用法

实时显示运行中的进程列表和系统资源使用情况:

1
2
3
4
5
6
7
8
9
10
11
12
top

top - 16:22:40 up 2:09, 2 users, load average: 0.00, 0.02, 0.05
Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1863028 total, 131844 free, 496824 used, 1234360 buff/cache
KiB Swap: 2097148 total, 2095348 free, 1800 used. 1170648 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18724 root 20 0 0 0 0 S 1.0 0.0 0:00.07 kworker/1:2
705 root 20 0 21684 1296 992 S 0.7 0.1 0:01.40 irqbalance
419 root 20 0 0 0 0 S 0.3 0.0 0:12.38 xfsaild/dm-0
  1. 系统概况部分:
    • top - 16:22:40 up 2:09, 2 users, load average: 0.00, 0.02, 0.05
      • 16:22:40: 当前系统时间.
      • up 2:09: 系统运行时间,2小时9分钟.
      • 2 users: 当前登录的用户数.
      • load average: 0.00, 0.02, 0.05: 系统负载,分别表示1分钟、5分钟和15分钟的负载平均值.
  2. 任务信息部分:
    • Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
      • 116 total: 总任务数.
      • 1 running: 正在运行的任务数.
      • 115 sleeping: 休眠中的任务数.
      • 0 stopped: 停止的任务数.
      • 0 zombie: 僵尸任务数.
  3. CPU使用情况部分:
    • %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
      • %Cpu(s): CPU使用率.
      • us: 用户空间占用CPU的百分比.
      • sy: 内核空间占用CPU的百分比.
      • ni: 用户进程以优先级调整过的时间.
      • id: CPU空闲时间.
      • wa: CPU等待I/O操作的时间.
      • hi: CPU处理硬中断的时间.
      • si: CPU处理软中断的时间.
      • st: 被虚拟机偷取的时间.
  4. 内存使用情况部分:
    • KiB Mem: 1863028 total, 131844 free, 496824 used, 1234360 buff/cache
      • 1863028 total: 总内存大小.
      • 131844 free: 空闲内存大小.
      • 496824 used: 已使用内存大小.
      • 1234360 buff/cache: 用作缓存的内存大小.
    • KiB Swap: 2097148 total, 2095348 free, 1800 used. 1170648 avail Mem
      • 2097148 total: 总交换空间大小.
      • 2095348 free: 空闲交换空间大小.
      • 1800 used: 已使用的交换空间大小.
      • 1170648 avail Mem: 可用于分配的内存大小.
  5. 进程列表部分:
    • PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
      • PID: 进程ID.
      • USER: 进程所属用户.
      • PR: 进程的优先级.
      • NI: 进程的优先级值(负值表示高优先级,正值表示低优先级).
      • VIRT: 进程使用的虚拟内存大小.
      • RES: 进程使用的实际物理内存大小.
      • SHR: 进程使用的共享内存大小.
      • S: 进程状态(详见man top中的PROCESS STATES).
      • %CPU: 进程占用CPU的百分比.
      • %MEM: 进程占用内存的百分比.
      • TIME+: 进程累计占用CPU的时间.
      • COMMAND: 启动进程的命令行.
安全性和权限
  • top通常需要超级用户权限,或者用户拥有特定的权限组(如proc组).
注意事项
  • 提供交互式界面,方便实时监控系统性能.
  • 结合不同选项使用,可以按需查看各项资源使用情况.

3. Kill

kill命令用于终止或向进程发送信号,是 Linux 系统中进程管理的重要工具.通过 kill 命令,用户可以控制和管理运行中的进程.

基本语法

kill的基本语法如下:

1
kill [options] <PID>
  • options:可选参数,用于指定发送的信号类型等.
  • <PID>:进程ID,表示要操作的目标进程.
主要功能
  • 终止进程: kill 主要用于终止运行中的进程,通过向目标进程发送信号来实现.
例子和用法
  • 向进程发送默认信号(SIGTERM):

    1
    kill 1234
  • 向进程发送指定信号(SIGKILL):

    1
    kill -9 5678
系统级别的操作
  • 终止指定进程:

    1
    kill 1234
安全性和权限
  • kill命令需要执行用户对目标进程的操作权限,通常需要与目标进程拥有相同的用户权限.
注意事项
  • 在终止进程时,使用不同的信号可能导致不同的行为,谨慎选择信号类型.
  • 使用 -9 选项(SIGKILL)将强制终止目标进程,但可能导致数据丢失,应慎用.

系统管理

1. Systemctl命令

  • systemctl是一个用于控制systemd系统和服务的命令行工具.

  • systemd是现代Linux系统的初始化系统,负责启动和管理系统上运行的服务.

  • systemctl命令可用于查看和控制服务、查看系统日志以及执行其他系统管理任务.

基本语法

systemctl的基本语法是:

1
systemctl [option] [command] [unit]
  • option:用于指定一些全局选项.
  • command:指定要执行的操作,如startstoprestart等.
  • unit:可选参数,指定服务或其他系统单元的名称.
主要功能
  • 服务管理:
    • start [unit]:启动服务.
    • stop [unit]:停止服务.
    • restart [unit]:重新启动服务.
    • status [unit]:查看服务状态.
    • enable [unit]:设置服务为开机自启.
    • disable [unit]:禁止服务开机自启.
  • 系统状态查询:
    • journalctl:查看系统日志.
    • list-units:显示当前活动的系统单元.
    • analyze:查看系统加载时间和性能.
  • 单元文件管理:
    • list-unit-files:列出所有可用的单元文件.
    • show [unit]:显示单个单元文件的详细信息.
例子和用法
  • 启动和停止服务:

    1
    2
    systemctl start apache2
    systemctl stop apache2
  • 查看服务状态:

    1
    systemctl status apache2
  • 查看系统日志:

    1
    journalctl

2. Service

service命令是用于在Unix-like操作系统中管理系统服务的脚本工具.它提供了一种简单的方式来启动、停止、重新启动和查询系统服务的状态.

基本语法

service的基本语法是:

1
service [option] serviceName [command]
  • option:用于指定一些全局选项.
  • serviceName:指定服务的名称.
  • command:可选参数,指定要执行的操作,如startstoprestart等.
主要功能
  • 服务管理
    • start [serviceName]:启动服务.
    • stop [serviceName]:停止服务.
    • restart [serviceName]:重新启动服务.
    • status [serviceName]:查看服务状态.
    • enable [serviceName]:设置服务为开机自启.
    • disable [serviceName]:禁止服务开机自启.
例子和用法
  • 启动和停止服务:

    1
    2
    bashCopy codeservice apache2 start
    service apache2 stop
  • 查看服务状态:

    1
    2
    bashCopy code
    service apache2 status
  • 重新启动服务:

    1
    2
    bashCopy code
    service apache2 restart

通过 service 命令,可以方便地管理系统服务的运行状态.

3. 关机重启命令

说到关机和重启,很多人认为,重要的服务器(比如银行的服务器、电信的服务器),如果重启了,则会造成大范围的灾难,其实,银行或电信服务器,也是需要维护,是依靠备份服务器来代替,如果你有自己的经验,则完全可以按照自己的经验来维护服务器.

shutdown
1
2
3
4
5
6
[root@localhost test]# shutdown [选项]  时间
选项:
-c:取消前一个关机命令
-h:关机
-r:重启

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost test]# shutdown -h now  #表示现在关机 

[root@localhost test]# shutdown -h 20:00 #表示晚上8点关机

[root@localhost test]# shutdown -r 20:00 #表示晚上8点重启

[root@localhost test]# shutdown -c #表示取消关机命令

[root@localhost test]# shutdown +5 "System will shutdown after 5 minutes"

#设定5分钟后关机,并发警告信息给登录用户

其他关机指令
1
2
3
[root@localhost test]# halt  #直接关机
[root@localhost test]# poweroff #相当于直接断电
[root@localhost test]# init 0 #修改运行级别为关机
其他重启命令
1
2
[root@localhost test]# reboot  #重启 
[root@localhost test]# init 6 #修改运行级别为重启

用户和用户组管理

    **Linux系统**是一个**多用户多任务**的**分时操作系统**.用户在使用系统资源之前,需向系统管理员申请一个账号,并以此账号的身份进入系统.账号有助于系统管理员跟踪用户活动、控制他们对系统资源的访问,同时也帮助用户组织文件并提供安全性保护.
                                            
每个用户账号都有**唯一的用户名和相应的口令**.用户通过输入**正确的用户名和口令**进行登录,随后可以进入系统并访问自己的主目录.这种安排有助于实现对系统资源的合理管理和用户身份的认证.

实现用户账号的管理,要完成的工作主要有如下几个方面:

  1. 用户账号的添加、删除与修改.
  2. 用户口令的管理.
  3. 用户组的管理.

用户管理

1. useradd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
命令名称:useradd
命令路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户 用户名不要弄的太复杂


useradd [选项] [用户名]
选项:
-c comment 指定一段注释性描述.
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录.
-g 用户组 指定用户所属的用户组.
-G 用户组,用户组 指定用户所属的附加组.
-s Shell文件 指定用户的登录Shell.
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号.
用户名:指定新账号的登录名.
1
2
3
4
5
6
7
8
实例1
[root@localhost ~]# useradd –d /home/sam -m sam
此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录).

实例2
[root@localhost ~]# useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组.
这里可能新建组:[root@localhost ~]#groupadd group及groupadd adm 增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等.

Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理.

2. userdel

如果一个用户的账号不再使用,可以从系统中删除.删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录.
删除一个已有的用户账号使用userdel命令,其格式如下:

1
2
3
4
5
userdel [选项]  [用户名]
常用的选项是 -r,它的作用是把用户的主目录一起删除.
例如:
[root@localhost ~]# userdel -r sam
此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录.
3. usermod

修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等.
修改已有用户的信息使用usermod命令,其格式如下:

1
2
3
4
5
6
usermod [选项] [用户名]
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值.另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名.
例如:
[root@localhost ~]# usermod -s /bin/ksh -d /home/z –g developer sam
此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer.
4. passwd

用户管理的一项重要内容是用户口令的管理.用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令.
指定和修改用户口令的Shell命令是passwd.超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
命令名称:passwd
命令路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户密码

命令的格式为:
passwd [选项] [用户名]
选项:
-l 锁定口令,即禁用账号.
-u 口令解锁.
-d 使账号无口令.
-f 强迫用户下次登录时修改口令.
如果默认用户名,则修改当前用户的口令.
1
2
3
4
5
6
7
8
9
10
11
案例
假设当前用户是sam,则下面的命令修改该用户自己的口令:
[root@localhost ~]$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
[root@localhost ~]# passwd sam
New password:*******
Re-enter new password:*******
##注意:普通用户只能修改自己的密码,且必须符合复杂度的要求.密码规则:最少8位,大小写字母,数字符号组合

为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。

为用户指定空口令时,执行下列形式的命令

1
2
[root@localhost ~]# passwd -d sam 
此命令将用户 sam 的口令删除,这样用户 sam 下一次登录时,系统就不再允许该用户登录了 .
passwd

命令还可以用 -l(lock) 选项锁定某一用户 ,使其不能登录

1
[root@localhost ~]# passwd -l sam 
5. who
1
2
3
4
5
6
7
8
9
10
11
命令名称:who
命令路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看当前登录用户信息

[root@localhost test]# who
root pts/1 2021-12-07 14:14 (192.168.47.1)

解释:登录用户名 终端终端 tty本地终端 / pts远程终端 登录时间 IP地址

6. whoami
1
2
3
4
5
6
7
8
命令名称:whoami
命令路径:/usr/bin/whoami
执行权限:所有用户
语法:whoami

功能描述:显示当前登录用户的用户名.

该命令用于查询当前登录到系统的用户的用户名,并将其显示在终端上.不需要任何参数,仅输入 whoami 即可获取当前用户的身份信息.这对于确认当前用户身份在进行操作时非常有用.
7. id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
命令名称:id
命令路径:/usr/bin/id
执行权限:所有用户
语法:id [选项] [用户名]
功能描述:显示用户或组的身份标识.

主要选项:
-u:显示用户ID.
-g:显示用户所属的组ID.
-G:显示用户所属的所有组ID.
-n:以名称而非数字形式显示ID.
-r:显示实际用户ID.

示例:
id:显示当前用户的用户ID、组ID及所属的所有组ID.
id -u:仅显示当前用户的用户ID.
id -g:仅显示当前用户所属的组ID.
id -G:显示当前用户所属的所有组ID.
id -n:以名称形式显示用户和组的ID.
id -r:显示实际用户ID.
8. su
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
命令名称:su
命令路径:/bin/su
执行权限:所有用户
语法:su [选项] [用户]
功能描述:切换用户身份.

主要选项:
-:切换到目标用户的环境,包括工作目录和环境变量.
-c command:执行完指定命令后,切回原用户.
-l 或 --login:切换到目标用户的环境.
-m 或 --preserve-environment:不修改环境变量.
-s shell:指定要使用的shell.

示例:
su:切换到超级用户(root).
su -:切换到超级用户的环境.
su -l username:切换到指定用户的环境.
su -c "command":以指定用户执行命令.
su -s /bin/bash:切换到指定shell.
用户组管理

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建.
用户组的管理涉及用户组的添加、删除和修改.组的增加、删除和修改实际上就是对/etc/group文件的更新.

1. groupadd
1
2
3
4
5
其格式如下:
groupadd [选项] [用户组]
选项:
-g GID 指定新用户组的组标识号(GID).
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同.
1
2
3
4
5
6
范例1:
[root@localhost ~]# groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的基础上加1.
范例2:
[root@localhost ~]# groupadd -g 101 group2
此命令向系统中增加了一个新组group2,同时指定新组的组标识号是101.
2. groupdel
1
2
3
4
5
6
其格式如下:
groupdel [用户组]

范例:
[root@localhost ~]# groupdel group1
此命令从系统中删除组group1.
3. groupmod
1
2
3
4
5
6
7
8
9
10
11
12
13
其语法如下:
groupmod [选项] [用户组]
选项:
-g GID 为用户组指定新的组标识号.
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同.
-n新用户组 将用户组的名字改为新名字

范例1:
[root@localhost ~]# groupmod -g 102 group2
此命令将组group2的组标识号修改为102.
范例2:
[root@localhost ~]# groupmod –g 10000 -n group3 group2
此命令将组group2的标识号改为10000,组名修改为group3.
4. newgrp

一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限.用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组.例如:

1
2
[root@localhost ~]$ newgrp root 
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组.类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成.

与用户账号有关的系统文件

完成用户管理的工作有多种方法,但每一种方法实际上都涉及对相关的系统文件进行修改.与用户和用户组相关的信息存放在一些系统文件中,其中包括 /etc/passwd/etc/shadow/etc/group等.接下来将分别介绍这些文件的内容.

1. /etc/passwd文件

/etc/passwd 文件是用户管理工作中涉及的最重要的文件之一.每个用户在Linux系统中都有一个对应的记录行,该行包含了用户的基本属性.这个文件对所有用户都是可读的,而其内容则类似于下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# cat /etc/passwd 
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh

每个字段的含义:

  1. 用户名 (john): 用户的登录名.
  2. 密码占位符 (x): 在过去,密码是存储在这里的,现在通常被放置在 /etc/shadow 文件中.
  3. 用户ID (1000): 用户的唯一标识符.
  4. 组ID (1000): 用户所属的主要用户组的标识符.
  5. 用户描述 (John Doe): 一般是用户的真实姓名或其他描述性信息.
  6. 用户家目录 (/home/john): 用户的主目录,登录时的初始工作目录.
  7. 登录Shell (/bin/bash): 用户登录时启动的Shell.

通过修改这个文件中的记录,可以更改用户的属性,但需要小心,因为直接编辑可能会导致系统不稳定.通常,用户和组的管理最好使用专门的命令工具,如useradduserdelusermod等.

伪用户(Pseudo

Users)

在系统中,存在一类称为伪用户(pseudo users)的特殊用户.虽然它们在 /etc/passwd 文件中有一条记录,但由于其登录Shell为空,因此这些用户无法进行登录.它们的存在主要为了方便系统管理,并满足系统进程对文件属主的特定要求.

常见的伪用户及其含义:

  • bin: 拥有可执行的用户命令文件.
  • sys: 拥有系统文件.
  • adm: 拥有帐户文件.
  • uucp: 用于UUCP(Unix to Unix Copy)通信协议.
  • lp: 用于lp或lpd子系统,负责打印服务.
  • nobody: 用于NFS(Network File System)服务,通常用于执行不涉及安全问题的服务.
2. /etc/shadow
  1. 伪用户和安全性

    除了之前提到的标准伪用户(如bin、sys、adm等),Linux系统还包含许多其他伪用户,如audit、cron、mail、usenet等.这些伪用户与系统中相关的进程和文件密切相关.

  2. 口令文件的安全性

    用户口令在 /etc/passwd 文件中可读,因此如果密码简单或者规律性强,存在被破解的风险.为提高安全性,Linux系统将加密后的口令分离存储在独立文件中,即 /etc/shadow 文件.该文件只有超级用户有读权限,确保了用户密码的安全性.

    /etc/shadow 文件中的记录行与 /etc/passwd 中的用户一一对应,由 pwconv 命令根据 /etc/passwd 中的数据自动生成.记录行包含以下字段:

    • 登录名:/etc/passwd 中的登录名一致.
    • 加密口令: 存放加密后的用户口令.
    • 最后一次修改时间: 用户最后一次修改口令时的天数.
    • 最小时间间隔: 两次修改口令之间所需的最小天数.
    • 最大时间间隔: 口令保持有效的最大天数.
    • 警告时间: 从系统开始警告用户到口令失效之间的天数.
    • 不活动时间: 用户没有登录活动但账号仍能保持有效的最大天数.
    • 失效时间: 给出账号的生存期,期满后账号不再合法.

    这样的分离增强了系统的安全性,防止直接读取口令文件导致的安全问题.

下面是/etc/shadow的一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# cat /etc/shadow
root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::
3. /etc/group

用户组信息存储在/etc/group文件中.在Linux系统中,将用户分组是对用户进行管理和控制访问权限的一种方式.每个用户属于一个主组,并可以属于多个附加组.用户要访问属于附加组的文件时,需要使用newgrp命令成为所要访问组的成员.

/etc/group文件的格式与/etc/passwd类似,由冒号(:)隔开若干字段,包括:

  • 组名: 用户组的名称,由字母或数字构成,不应重复.
  • 口令: 用户组加密后的口令字,一般为空.
  • 组标识号: 用于系统内部标识组的整数.
  • 组内用户列表: 属于这个组的所有用户,用逗号(,)分隔,可能是主组或附加组.

以下是/etc/group文件的示例:

1
2
3
4
5
6
7
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam