linux基础
最后更新于
最后更新于
Linux 系统目录结构是一个由各种目录和文件组成的树形结构,每个目录都有特定的用途。在这篇文章中,我们将讨论 Linux 系统中最常见的目录,并解释它们的用途
登录系统后输入ls
命令查看系统目录
/bin
存放着最常用的命令,包括用户和系统管理员都会使用的命令。
/boot
存放着启动 Linux 系统所需要的核心文件,包括内核文件、引导文件和镜像文件等。
/dev
Device的缩写, 存放着 Linux 系统中所有的设备文件,如硬盘、CD-ROM等。
/etc
存放着所有的系统管理配置文件,包括用户账号、网络设置、系统服务等。
/home
用户的主目录, 每个用户都有自己的目录,一般是以用户账号命名的。
/lib
存放着系统最基本的动态连接共享库,是系统运行必须的。类似于 Windows 的 DLL 文件。
/media
Linux 系统会自动识别一些设备,如 U 盘、光驱等,当识别后,会把识别的设备挂载到这个目录下。
/mnt
为了让用户临时挂载其他文件系统而设置的目录。如将光驱挂载在此目录下,就可以查看光驱里的内容。
/opt
optional(可选)的缩写,给额外安装软件使用的目录。
/proc
Processes(进程)的缩写, /proc
是一种伪文件系统(即虚拟文件系统), 存储着当前内核运行状态的信息,这些信息可以通过文件来读取。
/root
root用户的主目录, 它和/home/root
是同一个目录。
/sbin
System Binaries(系统二进制文件)的缩写, 存放着系统管理员使用的命令。
/tmp
临时文件目录, 系统可能会定期清理该目录中的文件。
/usr
User Programs(用户程序)的缩写, 存放着大多数用户程序和数据。
/var
Variable(可变)的缩写, 存放着经常更改的数据, 如系统日志、邮件等
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位并拥有不同的权限。在 Linux 系统中,通常使用 chown
命令来修改文件或目录的所有者,chmod
命令则用于设置用户的权限。
chown
(change owner) :用于修改文件或目录的所有者和组。
chmod
(change mode) :用于修改文件或目录的权限,如读、写、执行权限
在Linux 中可使用 ll
或者 ls –l
命令来显示一个文件的属性以及文件所属的用户和组
如上图所示, Mail文件的第一个属性用d表示, 则代表此文件是一个目录文件, 在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等
当为 d 则是目录
当为 - 则是文件;
若是 l 则表示为链接文档(link file);
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
如下图所示, 每个文件的属性由左边第一部分的 10 个字符来确定, 从左至右用 0-9 这些数字来表示。
第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限, 第4-6位确定属组(所有者的同组用户)拥有该文件的权限, 第7-9位确定其他用户拥有该文件的权限。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。在 Linux 系统中,用户是按组分类的,一个用户可以属于一个或多个组。
文件所有者以外的用户可以分为文件所属组的同组用户和其他用户。这些用户对文件的访问权限可能不同,因此在 Linux 系统中,需要对文件的访问权限进行管理。
在如下实例中, mysql 文件是一个目录文件, 属主和属组都为 mysql, 属主有可读、可写、可执行的权限; 与属主同组的其他用户有可读和可执行的权限; 其他用户也有可读和可执行的权限。而对于root用户来说, 文件的权限对其不起作用
chgrp
: 更改文件属组命令语法如下所示:
-R: 如果加上-R的参数,那么该目录下的所有文件的属组都会更改
chown
: 更改文件属主, 也可同时修改文件属组命令语法如下所示:
进入/root
目录(~)将install.log
的拥有者改为bin
这个账号:
将install.log
的拥有者与群组改回为root
chmod
: 更改文件权限首先了解下文件的权限等级, Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)
u
表示文件所有者, g
表示与文件拥有者属于同一个群体, o
表示其他人, a
表示这三者皆是
+
表示添加权限、-
表示取消权限、=
表示设定唯一权限
r
表示可读取, w
表示可写入, x
表示可执行
使用符号模式可以设置多个项目: who(用户类型)、operator(操作符)、permission(权限)
以下是各个项目的符号模式表:
u
user
文件所有者
g
group
文件所有者所在组
o
others
所有其他用户
a
all
所有用户, 相当于 ugo
+
为指定的用户类型增加权限
-
去除指定用户类型的权限
=
设置指定用户权限的设置,即将用户类型的所有权限重新设置
r
读
设置为可读权限
w
写
设置为可写权限
x
执行权限
设置为可执行权限
X
特殊执行权限
只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
s
setuid/gid
当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
t
粘贴位
设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位
chmod
命令可以使用八进制来指定权限
7
读(4) + 写(2) + 执行(1)
rwx
6
读(4) + 写(2)
rw-
5
读(4) + 执行(1)
r-x
4
只读(4)
r--
3
写(2) + 执行(1)
-wx
2
只写(2)
-w-
1
只执行(1)
--x
0
无
--
chmod
命令使用实例如下表格所示:
将file1.txt设为所有人都可读
chmod ugo+r file1.txt
chmod a+r file1.txt
将file1.txt和file2.txt权限设为文件拥有者和用户组可写,其他用户不可写
chmod ug+w,o-w file1.txt file2.txt
将当前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
将file文件设为任何人可读可写可执行
chmod 777 file
chmod a=rwx file
使文件具有超级用户权限,
chmod 4755 filename
umask
:更改文件默认权限创建文件的默认权限为rw-rw-rw-
, 创建目录的默认权限为rwxrwxrwx
使用umask
命令即可查询umask值, umask值表示从默认权限了去掉一些权限,然后成为最终的默认权限
可以看到umask的值为0022,第一个0为特殊权限暂且不用理他,后面三个数字分别代表u(文件拥有者)、g(用户组用户)、o(其他用户)的权限变化。u为0,权限没发生改变;g为2,权限-2,失去w(写)权限;o为2,同理
新创建一个文件, 其默认权限为rw-rw-rw-
, 由于umask值为0022, 即group和Other Users失去w权限, 最终文件的权限为rw-r--r--
新创建一个目录, 其默认权限为rwx-rwx-rwx
, 由于umask值为0022, 即group和Other Users失去w权限, 最终文件的权限为rwxr-xr-x
还可使用umask
命令修改文件默认权限
ls
ls
命令是linux系统中用来列出文件和目录的常用命令,它可以显示文件和目录的名称、权限、大小、修改时间等信息
以下是ls
命令的常用参数:
-a
:列出全部的文件,连同隐藏文件
-d
:仅列出文件目录,而不是列出目录内的文件数据
-l
:长数据串列出,包含文件的属性与权限等等数据
1.列出当前所有文件(包含隐藏文件)
2.列出当前目录下的文件属性
cd
cd命令是change directory的缩写,用于改变当前工作目录
1.使用绝对路径切换至test目录
2.使用相对路径切换至test目录
3.返回到家目录,即root目录
4.返回上级目录
pwd
pwd命令用于显示当前工作目录的绝对路径, 它是print working directory的缩写
下面是pwd命令的常用参数:
-p
:显示出确实的路径,而非使用链接 (link) 路径
1.列出当前所在目录
2.显示确实的路径, 而不显示使用链接的路径
为啥加了-P后显示的是"/var/spool/mail"呢?因为/var/mail 是链接档,链接到 /var/spool/mail
mkdir
mkdir
命令用于在Linux系统中创建新目录
下面是mkdir
命令的常用参数:
-m
:指定新创建目录的权限
-p
:如果指定的路径不存在则一并创建
1.创建新目录
2.创建多层目录
3.创建指定权限的目录
rmdir
rmdir
用于删除空目录, 若目录不为空则报错, 以下是rmdir
命令的常用参数
-p
:从该目录起,一次删除多级空目录
1.删除一个空目录
2.删除多层空目录
rm
rm
命令用于删除文件或目录,不管其是否为空
-f
:就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i
:互动模式,在删除前会询问使用者是否动作
-r
:递归删除, 最常用删除整个目录
1.删除某个目录且询问是否要删除
2.删除整个test目录
cp
cp
命令用于复制或移动文件和目录, 以下是cp
命令的常用参数:
**-f:**强制复制,若目标文件已经存在且无法开启,则移除后再尝试复制。
**-i:**在覆盖时会先询问用户是否继续,防止误操作。
**-l:**创建硬链接,而非复制文件本身。
**-p:**复制文件的权限和时间戳,适用于备份。
**-r:**递归复制,用于目录的复制。
**-s:**复制为符号链接,也叫快捷方式。
**-u:**仅当目标文件较旧时才更新。
1.将 root 目录下的 .bashrc
复制到 /tmp
下,并命名为 bashrc
2.将root/test
目录复制到/root/file
目录中
3.将/root/test/database.db
备份名为database_backup.db
mv
mv
命令用于移动文件和目录, 或修改名称, 以下是mv
命令的常用参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会升级 (update)
1.更改test目录名称为test1
2.将当前目录的12.txt文件移动至上级目录
cat
cat
命令是一种用于查看文件内容的命令,它可以将文件的内容直接输出到标准输出
以下是cat
命令常用参数:
-A :显示所有字符,包括特殊字符
-b :显示行号,仅针对非空白行
-E :在每行末尾显示$字符
-n :显示行号,包括空白行
-T :将制表符显示为^I
-v :显示不可见字符
1.查看12.txt文件的内容
2.把12.txt文件的内容加上行号输入至34.txt文件
3.清空12.txt文件
/dev/null是Linux系统中的一个特殊文件,写入/dev/null的数据都会被丢弃。这条命令将/dev/null的内容重定向输出到12.txt文件中,由于/dev/null文件内容为空,所以12.txt文件的内容会被清空
tac
tac
与cat
命令刚好相反,文件内容从最后一行开始显示
1.从末行开始显示34.txt的文件内容
more
一页一页的显示文件内容, 只能往后翻
在 more 这个程序的运行过程中,有如下几个键可以按:
空白键 (space): 向下翻一页
Enter: 向下翻一行
/字串: 代表在这个显示的内容当中, 向下搜寻"字符串"这个关键字
:f: 立刻显示出档名以及目前显示的行数
q: 离开more运行程序, 不再显示该文件内容
b:代表往回翻页
1.一页一页翻动某个文件
less
一页一页的翻动,与more命令相似,不同的是它能往前翻
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n:重复前一个搜寻 (与 / 或 ? 有关!)
q:离开 less 这个程序;
1.一页一页翻动,以下实例输出/etc/man.config文件的内容
head
显示文件内容的前几行
-n: 接数字, 代表显示几行的意思, 若不填写则默认显示前10行
1.显示文件内容的前20行
tail
显示文件内容后面几行
-n :后面接数字,代表显示几行的意思
-f :tail命令的-f参数表示"follow", 意思是实时监控文件的末尾,并将新增加的内容输出到终端。这对于需要实时监控日志文件,或者监控其他变化的文件非常有用
1.显示文件末尾的10行
2.显示文件末尾的20行
3.实时显示文件末尾的内容(如日志文件)
date
命令用于在Linux系统中显示或设置当前系统时间。它可以显示当前日期和时间,并允许用户格式化输出。它还可以用于将系统时间设置为指定的日期和时间。使用格式化字符串,可以自定义输出格式
以下是data命令的常用参数:
-d: 使用指定的日期字符串显示时间
-s:使用指定的日期字符串设置系统时间
以下是data命令的常用搭配:
date
显示当前时间
date +%Y
显示当前年份
date +%m
显示当前月份
date +%d
显示当前天数
date "+%Y-%m-%d %H:%M:%S"
显示年月日时分秒
1.显当前时间信息
2.显示当前年月日时分秒
1.显示前一天
2.显示后一天
3.显示下一个月时间
使用date命令中的-s参数来设置当前系统时间
若想恢复成正常的系统时间, 可使用ntpdate命令来同步时间, 例如下面这条命令用于同步中国的时间
其中cn.pool.ntp.org是中国的ntp服务器, 若不能连接此服务器, 可以使用其他国内NTP服务器:
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp.sjtu.edu.cn
ntp.tuna.tsinghua.edu.cn
ntp.cnnic.cn
cal
命令是一个在 Linux 系统中显示日历的命令。它可以显示指定月份或年份的日历,也可以显示当前月或当前年的日历。默认情况下,它显示当前月的日历
1.查看当前月的日历:cal
2.查看2023年的日历:cal 2023
3.查看指定年份月份的日历:cal 7 2023
gzip:压缩文件,将文件压缩为.gz
文件
gunzip:解压.gz
文件
使用此命令要注意以下几点:
只能压缩文件,不能压缩目录
不保留原先文件
若有多个文件会产生多个压缩包, 也就是说只能压缩单个文件
1.使用gzip
命令压缩文件
2.使用gunzip
命令解压.gz文件
zip压缩命令在windows和linux都能使用,且能压缩多个文件和保留原始文件
**zip:**压缩文件,将文件压缩为.zip
文件
**unzip:**解压.zip
文件
1.将flag1.txt和flag2.txt压缩成flag.zip文件
2.解压flag.zip文件
3.解压flag.zip文件至指定目录
tar是Linux和Unix系统中常用的文件归档命令,它可以将多个文件或文件夹打包成一个单独的文件,并且还可以进行压缩
如下是tar命令的常用参数:
-c
压缩.tar
文件
-v
显示详细信息
-f
指定压缩后的文件名
-z
打包文件的同时进行压缩
-x
解压.tar
文件
-C
解压文件到指定目录
1.压缩多个文件
2.解压文件至当前目录
3.解压文件至指定目录
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端
以下是find命令的使用参数:
-name
按照指定的查询方式查找文件
-user
查找指定用户的所有文件
-size
按照指定的文件大小查找文件, 单位有b(快)、c(字节)、w(字)、k(千字节)、M(兆)、G(吉字节)
1.查找/root目录下的.txt文件
2.查找/opt目录下, 用户名称为henry的文件
3.查找/home目录下文件大于100m的文件
locate命令是Linux系统中常用的文件查找命令, 使用数据库来查找文件, 所以它的查询速度非常快。
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb
指令创建locate数据库。
另外需要注意的是,默认情况下,locate命令只能查找用户自己可见的文件,如果要查找所有文件,需要使用sudo命令或者是使用root用户来查找。
以下是locate命令常用的参数:
-c
显示查找到的文件数量
-i
忽略大小写
-r
递归搜索
1.查找系统中所有文件名中包含"example"的文件
2.查找/path/to/folder文件夹中所有包含"example"的文件
grep命令是Linux系统中常用的文本查找工具。它可以在文本文件或者是标准输入中查找指定的文本, 通常配合管道符"|"进行使用
以下是grep命令常用的参数:
-c
显示匹配行数
-i
忽略大小写
-r
递归查询
-n
显示行号
-v
查找不匹配的行
1.查找/path/to/folder文件夹中所有文件中包含example的行
2.匹配test.txt内容中包含'go'的字符串
3.查找当前目录中文件名带"flag"的文件, 并显示行号
ps
命令用于查看当前系统进程的状态。它能够列出当前正在运行的所有进程,并显示它们的进程 ID(PID)、父进程 ID(PPID)、运行状态、内存占用、执行的命令等信息。
以下是 ps
命令的使用参数:
ps
命令参数
描述
a
显示所有进程,包括其他用户的进程。
x
显示所有与终端无关的进程。
u
以用户为主的格式输出进程信息。
f
以进程树的形式输出进程信息。
e
显示所有进程,包括没有终端的进程。
l
以长格式输出进程信息。
所有进程信息字段如下所示:
USER
: 进程所属的用户名
PID
:进程 ID
PPID
: 父进程ID
%CPU
:进程占用 CPU 的百分比
%MEM
:进程使用的内存占系统内存的百分比
VSZ
:进程虚拟内存的大小(单位:KB)
RSS
:进程使用的物理内存大小(单位:KB)
TTY
:进程所属的终端
STAT
:进程的状态(例如,运行、睡眠等)
START
:进程启动时间
TIME
:进程占用 CPU 的时间
COMMAND
:进程所执行的命令
1.列出所有正在运行的进程
2.列出所有与当前终端无关的进程
3.列出指定用户的进程信息, 若不加参数直接ps -u
则默认列出当前用户的进程信息
4.以进程树的形式输出进程信息
kill命令用于终止指定进程的执行。可以使用PID(进程ID)或作业号来指定进程。使用不同的信号可以控制终止进程的方式。
以下是kill命令的常用参数:
-9
表示强迫进程立即停止
-l
列出所有的信号名
以下是kill命令的常用信号:
SIGTERM
默认信号,请求进程正常终止
SIGKILL
强制终止进程,进程不会有机会进行清理和收尾工作
SIGSTOP
停止进程执行,但不终止进程
SIGCONT
恢复一个暂停的进程执行,但没有影响进程的运行状态
1.终止进程id为1234的进程:
2.以强制方式终止进程id为5678的进程:
3.停止进程id为3456的进程:
4.恢复进程id为3456的进程执行:
top 命令是一种用于实时监控系统性能的命令行工具。它能够显示当前正在运行的进程,以及每个进程的 CPU 和内存占用情况,同时还能够提供系统的负载情况。
以下是top命令的常用参数:
-d
指定刷新时间间隔,单位为秒
-p
显示指定进程ID的信息,多个进程ID用逗号分隔
-u
指定要显示哪些用户的进程信息,多个用户用逗号分隔
-c
显示完整的命令行,而不是截断的命令行
-o
用于指定在进程列表中根据哪个字段进行排序。
1.查看系统中正在运行的进程,并按照 CPU 占用率排序
2.查看系统中正在运行的进程,并按照内存占用率排序
3.查看系统中正在运行的进程,并按照进程 ID 排序
4.查看系统负载情况,包括 CPU 使用率、内存占用率、swap 交换分区使用率等
5.查看 top 命令的帮助文档
pstree
命令是一个常用的Linux/Unix命令,它能以树形结构显示进程之间的关系,可以显示当前系统中所有进程的进程树
以下是pstree命令的常用参数:
-a
显示进程的命令行参数
-c
显示进程之间的进程关系
-p
显示进程的进程号
-u
显示进程的拥有者
1.显示当前系统中所有进程的进程树
2.显示指定进程ID的进程树
3.显示进程之间的关系
VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器
VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计
VIM 与 VI 编辑器完全兼容
如下图所示,一般模式下输入i
、a
或者o
可以切换至编辑模式,编辑模式按ESC
即可退回一般模式;同理,一般模式输入:
或者/
可切换至命令模式, 命令模式按ESC
即可退回一般模式
使用vi或vim命令打开一个文档就直接进入一般模式了(默认模式),在此模式下可使用『上下左右』按键来移动光标
一般模式的主要操作有: 删除、复制、粘贴
yy
复制光标当前一行
数字+yy
例如2+yy
, 即从当前光标处复制2行
p
粘贴至当前光标处
u
撤销上一步操作
dd
删除光标当前行
数字+dd
删除光标后多少行
x
剪切一个字母
yw
复制一个词
dw
删除一个词
shift+6
(^)
移动至行头
shift+4
($)
移动至行尾
数字+shift+g
移动至指定目标行, 例如按5+shift+g
即移动至将光标移动至第5行行首
1+shift+g
移动至页首
shift+g
移动至页尾
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的, 要等到你按下i
, I
, o
, O
, a
, A
等任何一个字母之后才会进入编辑模式
通常在Linux中,按下这些按键时,在画面的左下方会出现INSERT
或REPLACE
的字样, 此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下Esc
这个按键即可退出编辑模式
i
当前光标前
a
当前光标后
o
当前光标行的下一行
I
光标所在行的最前
A
光标所在行的最后
O
当前光标行的上一行
在一般模式当中可以输入冒号:
进入命令模式
:w
保存
:q
不保存退出
:wq
保存并退出
:!
强制执行, 通常使用q!
强制退出
/要查找的词
按n
键往下查找, 按N
键往上查找
:noh
取消高亮显示
:set nu
显示行号
:set nonu
关闭行号
:%s /old /new /g
替换内容, /g
表示替换匹配到的所有内容
用户账号的管理涉及添加、删除和修改用户账号信息。而这些操作实际上就是对/etc/passwd
文件进行更新
useradd
命令描述
useradd
命令用于添加新用户, 以下是useradd
命令常用参数:
-c
: 指定用户的一段注释性描述。
-d
: 指定用户的主目录,如果此目录不存在,可以使用 -m
选项来创建主目录。
-g
: 指定用户所属的用户组。
-G
: 指定用户所属的附加组。
-s
: 指定用户的登录 Shell。
-u
: 指定用户的用户号
使用实例
1.创建一个用户sam, 其中-d和-m选项用来为用户sam生成一个主目录 /home/sam
/home为默认的用户主目录所在的父目录
2.创建一个用户gem, 指定用户登录的shell是/bin/sh
, 它属于group用户组,同时又属于adm和root用户组(这两个组是附加组)
userdel
命令描述
userdel
命令用于在 Linux 系统中删除用户。它可以删除用户的账户和与其相关的文件,例如用户主目录和用户配置文件
删除用户账号就是要将/etc/passwd等系统文件中的关于该用户的记录删除,必要时还删除用户的主目录
一下是userdel
命令的常用参数:
-r
: 删除用户的同时删除用户主目录和其他文件
-f
: 强制删除用户,不管该用户是否已登录
使用实例
1.删除用户sam以及其主目录
2.删除用户名为 tom 的用户,并强制删除其账户,即使该用户已登录
3.删除用户名为 kim 的用户,不删除其主目录和其他文件
usermod
命令描述
usermod
命令用于在 Linux 系统中修改用户信息。它可以修改用户名、用户组、用户密码、用户主目录等
以下是usermod
命令的常用参数:
-l
: 修改用户名
-g
: 修改用户所属的用户组
-G
: 修改用户所属的附加组
-d
: 修改用户主目录
-s
: 修改用户登录的 shell
-u
: 修改用户的用户号
-L
: 锁定/解锁用户
-U
: 更新用户密码
使用实例
1.修改sam用户的登录Shell为/bin/sh, 主目录为/home/z, 用户组为developer
2.修改用户名为 gem 的用户的用户名为 newgem
3.修改用户名为 jim 的用户,将其设置为附加组 adm 和 root
passwd
命令描述
passwd
命令用于在 Linux 系统中修改用户密码。使用这个命令可以更改当前用户或其他用户的密码, 请注意,在修改密码后,用户可能需要重新登录才能生效
常用的参数包括:
-d
: 删除用户密码
-l
: 锁定用户账户
-u
: 解锁用户账户
使用实例
1.例如当前用户是sam, 使用如下命令修改自己的口令
2.若当前用户是超级用户, 可以不输入旧密码就能修改任何用户的口令
3.锁定sam用户的口令, 使其不能登录
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新
groupadd
命令描述
groupadd
命令用于在 Linux 系统中创建新用户组
常用的参数包括:
-g
: 指定新用户组的组标识号 (GID)
-r
: 创建系统组(GID < 1000)
使用实例
1.创建一个名为 newgroup 的新用户组,并指定其组标识号为1000
2.创建一个名为 sysgroup 的系统用户组
3.创建一个名为 staff 的新用户组,并自动分配组标识号
groupdel
命令描述
groupdel
命令用于在 Linux 系统中删除已有的用户组
使用实例
删除一个名为 group1 的用户组
groupmod
命令描述
groupmod
命令用于在 Linux 系统中修改已有的用户组. 使用这个命令可以修改用户组的名称、组标识号以及成员等信息
常用的参数包括:
-g
: 指定新的组标识号(GID)
-n
: 指定新的组名称
-a
: 添加用户到组中
-d
: 从组中删除用户
-G
: 指定用户组成员的
使用实例
1.将名为 oldgroup 的用户组修改为 newgroup
2.将名为 oldgroup 的用户组的组标识号(GID)修改为 1000
3.将用户 tom 添加到名为 newgroup 的用户组中
4.将用户 tom 从名为 newgroup 的用户组中删除
newgrp
命令描述
newgrp
命令用于在 Linux 系统中切换用户组。使用这个命令可以让用户暂时地切换到另一个用户组中,并在操作完成后切换回原来的用户组
使用实例
如下命令将当前用户切换至root用户组, 前提条件是root用户组是该用户的主组或附加组
/etc/passwd
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性
如下例子所示, /etc/passwd
中一行记录对应着一个用户,每行记录又被冒号分隔为7个字段, 分别为用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
系统中有一类用户被称为伪用户, 这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求
常见的伪用户如下表格所示:
bin
拥有可执行的用户命令文件
sys
拥有系统文件和配置文件
adm
拥有帐户文件和系统日志
uucp
UNIX-to-UNIX复制程序使用
lp
打印系统使用
nobody
用于NFS匿名访问
/etc/shadow
由于/etc/passwd文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是**/etc/shadow
**文件。
只有超级用户才能读取此文件,这就保证了用户密码的安全性
它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开, 字段描述如下所示:
如下是/etc/shadow的文件内容:
/etc/group
用户要访问属于附加组的文件时,必须首先使用newgrp命令切换至附加组
用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号":"隔开若干个字段,这些字段描述如下所示:
如下是/etc/group的文件内容:
每一列按照/etc/passwd
密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号
一个范例文件user.txt内容如下:
newuser
命令创建用户要使用root用户只需newuser
命令
pwunconv
命令pwunconv
命令是一个命令行工具,通常用于将密码文件从旧版本的Unix使用的密码文件格式转换为当前版本的Unix使用的格式
文件内容格式为:用户名:密码
, 例如下面的passwd.txt:
chpasswd
命令chpasswd
命令是一个命令行工具,它允许您批量更改一个或多个用户的密码。它从标准输入读取用户名和密码的列表,并更新系统密码文件中相应的密码
执行如下命令, chpasswd
会将经过 /usr/bin/passwd
命令编码过的密码写入 /etc/passwd
的密码栏
pwconv
命令pwconv
命令是一个命令行工具,它用于将密码文件从系统原始的密码文件格式转换为shadow文件的格式
在Linux系统中, 执行一个shell命令通常会自动打开三个标准文件, 分别是标准输入文件、标准输出文件和标准错误输出文件。进程将从标准输入文件得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件
如下表格所示, linux shell下有三种标准的文件描述符:
0
标准输入(stdin)
<
,<<
1
标准输出(stdout)
>
, >>
, 1
>或1>>
2
标准错误输出(stderr)
2>
或 2>>
输入重定向用于改变命令的输入源, 指输入可以不来自标准输入,而来自指定的文件
输入重定向的符号为<
, 命令格式为命令<文件名
如下代码所示, 通过重定向输入将文件file的内容作为输入让cat命令执行
虽然执行结果相同,但第一行代表是以键盘作为输入设备,而第二行代码是以
test.txt
文件作为输入设备。
在LINUX中,输出重定向是指将命令的输出重定向到一个文件或者设备上。这可以通过使用">"或">>"符号来实现
重定向标准输出
>
输出重定向将命令执行的结果输出至指定的文件中, 而不会显示在屏幕上
重定向标准输出
>>
将命令的执行结果追加输出至指定文件
重定向标准错误
2>
清空指定文件的内容, 并将标准错误信息输出至此文件
重定向标准错误
2>>
将标准错误信息追加输出至指定的文件
重定向标准输出和标准错误
&>
将标准输出、标准错误的内容全部输出至指定文件, 而不会显示在屏幕上
当>&
后面接文件时,表示将标准输出和标准错误输出重定向至文件
当>&
后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符
将ls /etc
的执行结果输出至test.txt文件
将ls /etc
的执行结果追加至test.txt文件
将执行fuckcmd
命令的错误信息输出至test.txt文件
将执行fuckcmd
命令的错误信息追加输出至test.txt文件
管道可以把一系列的命令连接起来, 将第一个命令的输出作为第二个命令的输入, 而第二个命令的输出又会作为第三个命令的输入, 以此类推下去, 显示在屏幕上的内容是管道行最后一个命令的输出
管道命令由若干个指令组成, 每个指令用|
隔开, 仅有在前一个指令执行正确后才会执行后面的指令, 管道命令的使用格式如下:
cut
cut命令可将字符串按指定分隔符分割成多个部分,其中-f
参数是用来指定输出哪些区块,默认是输出所有区块。
-d
:后接分割字符,默认是制表符(tab),可以指定分割字符。
-f
:后接表示输出第几个区块或者区块范围,多个区块可以用逗号分隔
例如,将/etc/passwd文件中所有用户名输出:
1.查询PATH变量的第三部分内容
2.查询系统中有多少个用户使用bash
wc
命令是Linux中的一个文本统计工具,用于统计文本中的字符数、单词数和行数, 其中-l
参数用于统计行数
ifconfig
命令例如要将eth0接口的IP地址更改为192.168.1.100,你可以使用以下命令
如果你想为IP地址设置子网掩码,可以使用“netmask”参数。例如,要将eth0接口的子网掩码设置为255.255.255.0,你可以使用以下命令:
注意:如果你的系统使用DHCP自动获取IP地址,则可能无法使用ifconfig命令修改IP地址。在这种情况下,你可能需要使用其他工具(例如dhclient)来配置网络接口
使用vim命令修改IP的配置文件: vim /etc/sysconfig/network-scripts/ifcfg-ens33
, 要修改和添加的字段有三个, 分别是BOOTPROTO
、IPADDR
、GATEWAY
编辑完配置文件后执行: service network restart
重启网络
查看当前主机名称
通过编辑/etc/hostname
文件来修改主机名称, 修改完后需重启才能生效
hostnamectl
命令若想修改完hostnamectl立即生效而不需要重启, 可以使用hostnamectl
命令
Linux 系统的 hosts
文件是一个简单的文本文件,它用于将主机名与 IP 地址相关联。在您的计算机上,您可以使用 hosts
文件来将某些网站的名称映射到特定的 IP 地址,而无需使用域名服务器(DNS)
为了修改 hosts
文件,您需要使用特殊权限,因为它是一个系统文件
使用vim修改hosts文件: vim /etc/hosts
, 然后添加如下内容
然后就可以直接对主机名test进行ping测试
进程:计算机中, 一个正在执行的程序或命令, 被叫做“进程”(process)
服务:启动之后一直存在、常驻内存的进程,一般被称作“服务”(service)
在Linux系统中,守护进程和系统服务有一定的相似之处,但也有一些区别。
守护进程(daemon)是一种在后台运行的进程,通常用于执行某些系统任务或提供服务。它们通常不会和用户交互,并且在用户终端中不会显示输出。
系统服务(system service)是指运行在系统中的某种程序,用于提供特定的功能或服务。这些服务可以是守护进程,也可以是其他类型的进程。
因此,守护进程和系统服务是有区别的,但守护进程是系统服务的一种类型。通常情况下,系统服务都是守护进程,但并不是所有的守护进程都是系统服务
在linux系统中, 有两种不同的系统服务管理方式, 它们分别是/etc/init.d
和/usr/lib/systemd/system
, 它们的区别如下:
系统支持:/etc/init.d
目录主要用于传统的SysV风格的Linux发行版,而/usr/lib/systemd/system
目录则用于systemd系统服务管理器。systemd是目前比较流行的系统服务管理器,它支持更多的功能和特性。
服务定义方式:/etc/init.d
目录中的服务通常是由脚本定义的,而/usr/lib/systemd/system
目录中的服务则使用systemd服务定义文件(即".service"文件)定义。systemd服务定义文件包含了服务的启动参数、依赖关系、超时设置等信息。
命令行工具:/etc/init.d
目录中的服务通常使用"/etc/init.d/服务名"命令来管理,而/usr/lib/systemd/system
目录中的服务则使用"systemctl"命令来管理
1.查看网络服务状态
2.停止网络服务
3.启动网络服务
4.重启网络服务
1.查看防火墙服务状态
2.启动防火墙服务
3.停止防火墙服务
4.重启防火墙服务
基本语法
使用实例
开启或关闭防护墙服务的开机自启动
查看所有服务自启配置:chkconfig
关闭指定服务的自启动:chkconfig 服务名 off
开启指定服务的自启动:chkconfig 服务吗 on
查看指定服务的自启动状态:chkconfig 服务名 --list
1.开启或关闭network服务的自启动
2.开启或关闭network服务指定级别的自动启动
在linux系统中有7种运行级别, 而常用的级别是3和5
**运行级别0:**运行级别0系统停机状态, 系统默认运行级别不能设为0, 否则无法正常启动
**运行级别1:**单用户工作状态, 需要root权限, 用于系统维护, 禁止远程登录, 只能实地操作
**运行级别2:**多用户工作状态, 没有NFS, 不支持网络
**运行级别3:**完全的多用户工作状态, 有NFS, 登录后进入控制台命令模式
**运行级别4:**系统一般不使用, 是一个特殊的级别
**运行级别5:**登陆后进入图形GUI界面
**运行级别6:**系统关机并重启, 默认运行级别不能为6, 否则系统无法正常启动
NFS (Network File System) 是一种网络文件系统协议,它允许用户在不同的计算机之间共享文件。在 Linux 中,NFS 可以让用户将一台计算机上的文件共享给其他计算机访问
在Centos7中, 运行级别被简化成两种:
multi-user.target:等价于原运行级别3, 多用户有网, 无图形界面
**graphical.target:**等价于原运行级别5, 多用户有网, 有图形界面
例如, 使用如下命令, 将系统的默认运行级别设置为multi-user.target, systemctl set-default multi-user.target
sync
将数据由内存同步到硬盘中
halt
停机, 关闭系统, 但不断电
poweroff
关机, 断电
rebot
重启, 等同于shutdown -r now
shutdown
后面可接参数指定关机时间, 默认一分钟后关机
1.计算机将在2分钟后关机, 并在屏幕中显示指定内容, 其中-h参数表示指定多少分钟后关机, -c参数表示取消上一条shutdown命令
2.立即关机, 等同于poweroff
3.系统重启, 等同于reboot
Linux 系统采用了预读迟写(Read-ahead and Delayed Write)操作方式来提高磁盘读写效率。当用户保存文件时,Linux 核心会将数据先保存在缓存中,等缓存满了或者系统有其他需要时再将数据写入磁盘。
这种方式可以极大提高磁盘写入数据的效率,因为缓存中写入数据的速度要快于磁盘。但是,这种方式也存在安全隐患,如果系统掉电或者其他严重问题出现,那么缓存中的数据可能会丢失。
使用 sync
指令可以立即将缓存中的数据写入磁盘,以确保数据的安全性
.
匹配除了换行符以外的任意单个字符
*
前导字符出现0次或连续多次
.*
任意长度字符
^
行首(以…开头)
$
行尾(以…结尾)
^$
空行
[]
匹配括号里任意单个字符或一组单个字符
[^]
匹配不包含括号里任一单个字符或一组单个字符
^[]
匹配以括号里任意单个字符或一组单个字符开头
^[^]
匹配非括号里任意单个字符或一组单个字符开头
<
取单词的头
>
取单词的尾
< >
精确匹配
创建test.txt文件用于正则匹配操作, 文件内容如下:
1.匹配包含'go'的字符串: grep 'go' test.txt
2.匹配以'g'开头的字符串: grep '^g' test.txt
3.匹配以'g'开头,后接一个任意字符的字符串:grep '^g.' test.txt
4.匹配以'g'开头,后接多个任意字符的字符串: grep '^g.*' test.txt
5.匹配所有字符: grep '.*' test.txt
6.匹配以'gle'结尾的字符串: grep 'gle$' test.txt
7.匹配以'gle'结尾的所有字符串: grep '.*gle$' test.txt
**8.匹配以字符'a','b','c'开头的字符串: grep '^[abc]' test.txt
**
9.匹配非字符'a','b','c'开头的字符串: grep '^[^abc]' test.txt
10.匹配含有字符'a','b','c'的字符串: grep '[abc]' test.txt
扩展元字符(需用grep -E
或egrep
)
功能
+
匹配一个或多个前导字符
?
匹配零个或一个前导字符
|
或
()
将字符组合成一个整体
{n}
前导字符重复n次
{n,}
前导字符重复至少n次
{n,m}
前导字符重复n到m次
扩展元字符(需用grep -P
)
功能
\d
匹配数字, 等价于[0-9]
\w
匹配字母数字下划线, 等价于[a-zA-Z0-9_]
\s
匹配空格、制表符、换页符, 等价于[\t\r\n]
1.grep -E 'o+gle' test.txt
2. grep -E 'o?gle' test.txt
**3.匹配前导字符‘o’至少出现两次的字符串: grep -E 'go{2,}' test.txt
**
4.匹配前导字符'tao'至少出现两次的字符串: grep -E '(tao){2,}' test.txt
5.匹配包含'hello'或'jingdong'的字符串:grep -E '(hello|jingdong)' test.txt
6.匹配IP格式的字符串: grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}' test.txt
或 grep -P '(\d){1,3}\.(\d){1,3}\.(\d){1,3}.(\d){1,3}' test.txt
此处要注意对特殊字符的转义, 例如这里就对
.
使用了转义符号