Linux基础
约 5585 字大约 19 分钟
2025-03-02
1. 走进Linux
1.1 Linux目录结构
登录系统后,在当前命令窗口下输入命令:ls /
,即可查看Linux目录结构。
树状目录结构:(Linux的一切资源都挂载在这个 / 根节点下)
以下是对这些目录的解释:
- /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令
- /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
- /dev : dev是Device(设备)的缩写, 存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
- /etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录
- /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
- /lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
- /media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了
- /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
- /root:该目录为系统管理员,也称作超级权限者的用户主目录
- /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序
- /srv:该目录存放一些服务启动之后需要提取的数据
- /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs
- /tmp:这个目录是用来存放一些临时文件的
- /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
- /usr/bin: 系统用户使用的应用程序
- /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序
- /usr/src: 内核源代码默认的放置目录
- /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除
目录颜色的含义:
白色:普通文件 📄 最常见的就是白色文件了,比如那些日志文件(.log)、输出文件(wrfout)等等。简单来说,白色就是告诉你:“我是个普通文件,别怕我。”
📂蓝色:目录 蓝色代表目录,比如你的home目录、usr目录等等。每次看到蓝色,就知道“哦,这里是个文件夹”。
🚀绿色:可执行文件 绿色文件通常是可执行文件或者程序,比如那些.exe文件。看到绿色,你就知道“这是个能跑的程序”。
🔗浅蓝色:链接文件 浅蓝色表示链接文件,这种文件可以通过ll filename命令查看它链接到哪个原文件。简单来说,就是“我是个链接,指向别的文件”。
💾黄色:设备文件 黄色代表设备文件,比如字符设备(character device)和块设备(block device)。这些通常是硬件设备在系统中的表示。
📑灰色:其他类型文件 灰色文件通常是那些你不太常见的文件类型,比如一些配置文件或者系统文件。看到灰色,你就知道“这是个特殊的文件”。
📦红色:压缩或包文件 红色通常表示压缩文件或者包文件,比如.tar.gz文件。如果你看到一个红色文件但不是压缩或包文件,那可能是有问题了。
⚠️红色闪烁:链接问题 如果非压缩或包文件显示为红色且闪烁,通过ll命令查看时会有红色闪烁,表示该链接文件存在问题。
🖼️紫红色:图形文件 紫红色通常是图形文件,比如.png图片。看到紫红色,你就知道“这是个图片文件”。
1.1.1 绝对路径与相对路径
绝对路径:从根目录(/)开始,表示具体的文件或目录的位置。
相对路径:相对于当前目录的位置,表示从当前目录开始寻找文件或目录。
例如:
/home/user/file.txt
表示file.txt位于user目录的子目录中。
./file.txt
表示file.txt位于当前目录中。
../file.txt
表示file.txt位于当前目录的父目录中。
/home/user/documents/file.txt
表示file.txt位于user目录的documents目录中。
1.2 命令符相关概念
[root@localhost ~]#
[root@localhost ~]#
:提示符,用来提示当前用户是root用户,登录到localhost主机,当前目录是用户主目录。$
:提示符,用来提示当前用户是普通用户。#
:提示符,用来提示当前用户是超级用户。
1.3 命令格式
命令格式:命令名 选项 参数
- 命令名:表示要执行的命令,比如
ls
、cd
、mkdir
等。 - 选项:表示命令的附加参数,比如
-a
表示显示隐藏文件,-l
表示以列表形式显示文件。 - 参数:表示命令要处理的对象,比如文件名、目录名等。
相关信息
- 执行的时候,命令本身必须存在,选项和参数可有可无。
- 选项和参数之间必须用空格隔开。
- 选项和参数也可以有多个存在
-a -l
等。
1.4 关机与重启
关机命令:shutdown
重启命令:reboot
相关信息
shutdown
命令用来关闭系统,可以指定时间、日期或者强制关机。shutdown -h now
:立即关机。shutdown -r now
:立即重启。shutdown -h 10
:10分钟后关机。shutdown -r 10
:10分钟后重启。reboot
命令用来重启系统。
最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中
2. 常用命令
2.1 文件与目录管理
ls
:列出目录内容。
相关信息
ls
命令用来显示指定目录下的文件和目录。ls -a
:显示所有文件,包括隐藏文件。ls -l
:以列表形式显示文件和目录。ls -lh
:以更加友好的方式显示文件大小。
cd
:切换目录。
相关信息
cd
命令用来切换当前工作目录到指定的目录。cd ..
:切换到上级目录。cd ~
:切换到用户主目录。cd -
:切换到上一次所在的目录。
mkdir
:创建目录。
相关信息
mkdir
命令用来创建目录。mkdir -p
:创建多级目录。例如:mkdir -p /home/user/documents/test
。mkdir -m
:设置目录权限。例如:mkdir -m 777 /home/user/documents/test
。mkdir -v
:显示创建目录的详细信息。例如:mkdir -v /home/user/documents/test
。
rmdir
:删除空目录。
相关信息
rmdir
命令用来删除空目录。rmdir -p
:删除多级空目录。例如:rmdir -p /home/user/documents/test
。- 如果目录不为空,则不能删除。
rm
:删除文件或目录。
相关信息
rm
命令用来删除文件或目录。rm -i
:删除文件或目录之前询问确认。rm -r
:递归删除目录。rm -f
:强制删除文件或目录。rm -v
:显示删除信息。
cp
:复制文件或目录。
相关信息
cp
命令用来复制文件或目录。cp -r
:递归复制目录。cp -v
:显示复制信息。
例如:复制单个文件。cp /home/user/file1.txt /home/user/documents/file1.txt
复制整个目录。cp -r /home/user/documents /home/user/documents_backup
mv
:移动文件或目录。
相关信息
mv
命令用来移动文件或目录。例如:mv demo.txt /root
mv
命令可以用来重命名文件或目录。例如:mv demo.txt demo1.txt
mv
命令可以用来移动文件或目录到指定目录。例如:mv demo.txt /root
mv
命令可以用来移动文件或目录到当前目录。例如:mv demo.txt.
touch
:创建空文件。pwd
:显示当前目录。
2.2 文件内容查看
cat
:查看文件内容。tac
:反向查看文件内容。nl
:显示行号。more
:分页查看文件内容。less
:分页查看文件内容,支持向上翻页。head
:显示文件开头内容。tail
:显示文件末尾内容。grep
:搜索文件内容。
2.3 文件搜索
find
:搜索文件。locate
:快速搜索文件。which
:查找可执行文件。whereis
:查找文件。
2.4 文件属性及权限管理
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用ll
或者ls –l
命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@localhost ~]# ls -l
total 12
drwxr-xr-x 2 root root 4096 Mar 15 10:51 Desktop
drwxr-xr-x 3 root root 4096 Mar 15 10:51 Documents
drwxr-xr-x 3 root root 4096 Mar 15 10:51 Downloads
drwxr-xr-x
字段解释:
d
:表示文件类型,d表示目录,-表示文件,l表示链接文件。rwx
:表示拥有者的权限,r表示可读,w表示可写,x表示可执行。r-x
:表示同组用户的权限,r表示可读,-表示不可写,x表示可执行。r-x
:表示其他用户的权限,r表示可读,-表示不可写,x表示可执行。
注意
要注意的是,这三个权限的位置不会改变,如果 没有权限,就会出现减号[ - ]而已
每三个权限成为一组,每组中分别有三个权限,分别是:
权限 | 数字 | |
---|---|---|
r | 读 | 4 |
w | 写 | 2 |
x | 执行 | 1 |
除了第一个字母不参与权限的表示,其他的都为权限标识符。
作用范围 | 解释 | |
---|---|---|
第一组 | 用户 | user |
第二组 | 用户组 | group |
第三组 | 其他人 | other |
2.4.1 权限修改
语法:chmod 权限模式 文件名/目录名
权限符:
u
:用户。g
:用户组。o
:其他用户。a
:所有用户。
参数:
+
:增加权限。-
:取消权限。=
:设定权限。
字符权限:
r
:可读。w
:可写。x
:可执行。
数字权限:
4
:可读。对应字符权限中的r
。2
:可写。对应字符权限中的w
。1
:可执行。对应字符权限中的x
。
案例1:将文件file1.txt
的权限设定为rw-r--r--
,即所有用户都可以读写,但只有文件所有者可以执行。
[root@localhost ~]# chmod 644 file1.txt
或者
[root@localhost ~]# chmod u=rw,g=r,o=r file1.txt
案例2:将目录test
的权限设定为rwxr-xr-x
,即所有用户都可以读写执行,但只有文件所有者可以删除目录。
[root@localhost ~]# chmod 711 test
或者
[root@localhost ~]# chmod u=rwx,g=rx,o=rx,a-w test
2.4.2 修改文件所有者
语法:chown 用户名 文件名/目录名
chown zhangsan file1.txt
说明:将文件file1.txt
的所有者设定为zhangsan
。
2.4.3 修改文件所属组
语法:chgrp 用户组名 文件名/目录名
chgrp group1 file1.txt
说明:将文件file1.txt
的所属组设定为group1
。
3. 用户和用户组管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
3.1 概念
- 用户:系统中可以登录并使用系统资源的用户。
- 用户组:多个用户的集合,可以对用户进行权限管理。
3.2 用户及UID
在Linux系统中,每一个用户默认都对应了一个UID,而这个UID可以理解是用户的身份证号
- 0:超级用户,拥有系统的最高权
- 1-499:系统账号,系统预留账号,一般不使
- 500-65534:普通用户账号。(注意,此处仅指的是CentOS系统,其他系统的自定义账户则不一定是从500开始,例如Ubuntu系统是从1000开始
- 65535:系统保留账号,一般不使用。
查看当前用户的UID:id -u
3.3 用户信息存储的位置
位置 | 描述 |
---|---|
/etc/passwd | 用户信息 |
/etc/shadow | 密码信息 |
/etc/group | 用户组信息 |
/etc/passwd
文件中,每一行对应一个用户的信息,包含了用户的用户名、用户ID、用户组ID、用户的全名、用户的主目录、用户的登录Shell等信息。root:x:0:0:root:/root:/bin/bash
字段解释:
root
:用户名x
:密码,由于Linux系统采用shadow技术,密码存放在/etc/shadow
文件中,而x
表示密码加密方式为SHA-512。0
:用户ID,每个用户都有一个唯一的ID,范围是0-65534。0
:用户组ID,每个用户都属于一个用户组,这个用户组的ID也会被记录在此处。root
:用户的全名,即用户的真实姓名。/root
:用户的主目录,用户登录系统后,默认会进入这个目录。/bin/bash
:用户的登录Shell,用户登录系统后,默认使用的Shell。
/etc/group
文件中,每一行对应一个用户组的信息,包含了用户组的名称、用户组ID、用户组内的用户列表等信息。root:x:0:
字段解释:
root
:用户组名称x
:密码,由于Linux系统采用shadow技术,密码存放在/etc/gshadow
文件中,而x
表示密码加密方式为SHA-512。0
:用户组ID,每个用户组都有一个唯一的ID,范围是0-65534。root
:用户组内的用户列表,多个用户之间用逗号分隔。
/etc/shadow
文件中,每一行对应一个用户的密码信息,包含了用户的用户名、用户的加密密码、最后一次修改密码的时间、密码失效时间等信息。root:$6$r9/y6/v1$y3/3/y6/v1/y6/v1:17446:0:99999:7:::
字段解释:
root
:用户名$6$r9/y6/v1$y3/3/y6/v1/y6/v1
:加密后的密码,采用SHA-512加密算法,加密规则为:$id$salt$hash
。17446
:最后一次修改密码的时间,以天为单位。0
:密码失效时间,以天为单位。99999
:密码过期时间,以天为单位。7
:密码最小修改间隔,以天为单位。:::
:不适用密码的限制条件。
3.4 用户管理
就是对passwd、shadow、group三个文件的增删改。
增加一个用户,UID,账户名、家目录、shell程序。新建的用户,默认的情况下是无法登录的。
创建一个用户的时候,默认情况下,会为其创建一个同名的用户组
3.4.1 添加用户
useradd [选项] 用户名
选项:
-c
:指定用户的注释信息。-u
:指定用户ID。-g
:指定用户组。-G
:指定用户所属附加组。-d
:指定用户主目录。如果目录不存在:则同时使用-m
选项,可以创建主目录。-s
:指定用户登录Shell。-m
:创建用户主目录。
案例:创建一个普通用户。使用默认值即可
[root@Demo01 home]# useradd zhangsan
[root@Demo01 home]# id zhangsan
uid=502(zhangsan) gid=502(zhangsan) 组=502(zhangsan)
相关信息
说明:该账户被创建完之后,会有哪些信息
UID:如果是当前系统的第一个账户,那么它的UID是500。
家目录(主目录):因为是默认创建,所以它的家目录所在位置是/home/zhangsan
用户组:创建用户的同时,会为其创建一个同名的用户组,zhangsan组
shell程序:默认会是bash
案例2:创建一个普通用户,其家目录是在/tedu/jerry
,主组root
,附加组tom
,adm
[root@Demo01 home]# useradd -d /tedu/jerry -g root -G tom,adm zhangsan
[root@Demo01 home]# id zhangsan
uid=502(zhangsan) gid=500(root) 组=500(root),501(tom),502(zhangsan)
案例3:创建一个普通用户,执行用户的shell程序为/bin/sh
,UID为80000
[root@Demo01 home]# useradd -s /bin/sh -u 80000 zhangsan
[root@Demo01 home]# id zhangsan
uid=80000(zhangsan) gid=502(zhangsan) 组=502(zhangsan)
说明:虽然CentOS系统中默认的UID是65536个(0-65535),但是可以手动指定它的UID超出此范围。
UID特性:内核通过判断当前UID与65535和已经使用到的UID值比较,哪段距离大,下一个UID就会自动在距离大的范围内+1
案例4:创建一个普通用户,测试账户是UID会不会延续上案例的UID
[root@Demo01 home]# useradd zhangsan1
[root@Demo01 home]# id zhangsan1
uid=503(zhangsan1) gid=503(zhangsan1) 组=503(zhangsan1)
相关信息
说明:该账户的UID是503,因为系统中已经有502的UID了。正常来应该按照上次创建用户的UID往后+1。但是80000已超过系统默认的范围,所以不会根据超出范围后UID进行+1延续。
案例5:创建伪用户
伪用户不支持登录
举例:员工离职后会把离职员工的Linux账号置为为用户
[root@Demo01 tedu]# useradd -s /sbin/nologin test2
[root@Demo01 tedu]# su test2
This account is currently not available.
相关信息
说明:创建的这个账户的shell程序是/sbin/nologin,即使使用su登录,也无法登录。
3.4.2 切换用户
切换用户:su
切换到root用户:su -
切换到普通用户:su 用户名
3.4.3 修改用户信息
修改用户信息:usermod
usermod [选项] 用户名
选项:
-c
:修改用户的注释信息。-u
:修改用户ID。-g
:修改用户组。-G
:修改用户所属附加组。-d
:修改用户主目录。-s
:修改用户登录Shell。
案例1:修改test账户的UID。
[root@Demo01 tedu]# id test4
uid=30001(test4) gid=30001(test4) 组=30001(test4)
[root@Demo01 tedu]# usermod -u 10000 test4
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4)
案例2:修改test账户的主目录。
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4)
[root@Demo01 tedu]# usermod -d /home/test4 test4
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4)
案例3:修改test账户的附加组。
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4)
[root@Demo01 tedu]# usermod -G adm,test test4
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4),10(adm),11(test)
案例4:修改test账户的shell程序。
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4)
[root@Demo01 tedu]# usermod -s /bin/bash test4
[root@Demo01 tedu]# id test4
uid=10000(test4) gid=30001(test4) 组=30001(test4)
3.4.4 删除用户
删除用户:userdel
userdel [选项] 用户名
选项:
-r
:删除用户的主目录。
案例1:删除test账户。
不加参数删除,不会把该用户的同名家目录删除
[root@Demo01 tedu]# userdel test4
案例2:删除test账户,同时删除其家目录。
[root@Demo01 tedu]# userdel -r test4
3.4.5 密码管理
语法:passwd [选项] 用户名
选项:
-l
:锁定用户账户。-u
:解锁用户账户。-d
:删除用户的密码。-f
:强制修改用户的密码。
案例1:锁定test账户。
[root@Demo01 tedu]# passwd -l test4
[root@Demo01 tedu]# su test4
This account is currently not available.
案例2:解锁test账户。
[root@Demo01 tedu]# passwd -u test4
[root@Demo01 tedu]# su test4
[test4@Demo01 tedu]$
案例3:删除test账户的密码。
[root@Demo01 tedu]# passwd -d test4
[root@Demo01 tedu]# su test4
su: 无法获取用户test4的密码
案例4:强制修改test账户的密码。
[root@Demo01 tedu]# passwd -f test4
Changing password for user test4.
New password:
BAD PASSWORD: Password must contain at least 1 uppercase letter, 1 lowercase letter, 1 digit, and 1 special character.
Retype new password:
passwd: all authentication tokens updated successfully.
相关信息
说明:强制修改密码时,要求密码必须包含至少1个大写字母,1个小写字母,1个数字,1个特殊字符。
3.5 用户组管理
系统底层会将两个GID相同用户组识别为同一个用户组,这样做的目的是让两个用户组的权限相同。
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
3.5.1 添加用户组
语法:groupadd [选项] 用户组名称
选项:
-g
:指定用户组ID。
案例1:创建一个名为test的用户组。
[root@Demo01 tedu]# groupadd test
[root@Demo01 tedu]# cat /etc/group | grep test
test:x:10001:
案例2:创建一个名为test的用户组,其ID为10001。
[root@Demo01 tedu]# groupadd -g 10001 test
[root@Demo01 tedu]# cat /etc/group | grep test
test:x:10001:
3.5.2 删除用户组
语法:groupdel 用户组名称
案例1:删除名为test的用户组。
[root@Demo01 tedu]# groupdel test
[root@Demo01 tedu]# cat /etc/group | grep test
3.5.3 修改用户组
语法:groupmod [选项] 用户组名称
选项:
-g
:修改用户组ID。-n
:修改用户组名称。
案例1:修改名为test的用户组的ID为10002。
[root@Demo01 tedu]# groupmod -g 10002 test
[root@Demo01 tedu]# cat /etc/group | grep test
test:x:10002:
案例2:修改名为test的用户组的名称为test2。
[root@Demo01 tedu]# groupmod -n test2 test
[root@Demo01 tedu]# cat /etc/group | grep test2
test2:x:10002: