Linux 基础知识总结
一、初探 Linux
Linux 简介
Linux 是一个自由、开放源码的操作系统,具有以下几个关键特性:
类 Unix 系统
Linux 是一个类 Unix 操作系统,类似于 Unix 系统的结构和设计。它继承了 Unix 的许多概念,如多用户、多任务和文件系统等,但它是开放源代码的,任何人都可以查看、修改和分发。Linux 本质是 Linux 内核
Linux 这个名字严格来说指的是 Linux 内核,内核是操作系统的核心部分,负责硬件管理、进程调度、内存管理等。然而,单独的 Linux 内核并不足以组成一个完整的操作系统,因此开发者基于 Linux 内核构建了不同的 Linux 发行版(如 Ubuntu、CentOS、Debian 等)。Linux 之父——林纳斯·本纳第克特·托瓦兹
Linus Benedict Torvalds 被誉为 Linux 之父,是 Linux 内核的最早作者。他不仅创作了 Linux 内核,还发起了开源社区的发展,推动了全球范围内的协作式开发。他也是 Git 版本控制系统的创始人。Linus 的工作不仅对操作系统的开发产生了深远影响,还促进了开源文化的崛起。
Linux 作为开源操作系统,它的稳定性、安全性和灵活性使得它广泛应用于服务器、嵌入式设备以及桌面系统中。
Linux 诞生
Linux 的诞生可以追溯到 1989 年,当时 Linus Torvalds 服役于芬兰陆军新地区旅,担任少尉,主要负责弹道计算。服役期间,他购买了安德鲁·斯图尔特·塔能鲍姆(Andrew S. Tanenbaum)所著的《Minix》教科书和其源代码,开始研究操作系统。
Minix 是塔能鲍姆教授为教学目的所创作的一个迷你版本的类 Unix 操作系统,它采用了微内核设计。Minix 对 Linus 的操作系统创作产生了重要影响。
1990 年,Linus Torvalds 退役后回到赫尔辛基大学,并进一步接触到 Unix 操作系统。他受 Minix 启发,决定自己编写一个类似 Unix 的操作系统内核。
1991 年,Linus 开源了自己编写的 Linux 内核,并将其上传到互联网上,邀请他人参与开发。这个内核最初并不完整,但很快吸引了全球程序员的参与。至此,Linux 的开源社区和生态系统开始逐渐壮大。
Linux 以一只企鹅作为标志,这只企鹅被命名为 Tux,象征着 Linux 社区的活力、创新和开源精神。
常见的 Linux 发行版本
Linux 内核本身只是操作系统的一部分,其他的工具和软件是构成一个完整操作系统的必要组件。一些组织或厂商将 Linux 内核与各种软件包、文档、管理工具等组合起来,形成了不同的 Linux 发行版。每个发行版都可能有其独特的特性、目标用户和维护支持。
主要类型的 Linux 发行版
- 商业公司维护的发行版本
这些发行版通常由商业公司支持,提供长期的更新、技术支持和企业级的服务。- Red Hat Enterprise Linux (RHEL)
由 Red Hat 公司维护,专为企业环境设计,提供长期的支持和商业技术服务。
- Red Hat Enterprise Linux (RHEL)
- 社区组织维护的发行版本
这些发行版主要由开源社区开发和维护,通常免费且开源。常见的社区发行版包括:- CentOS
基于 RHEL,但没有商业支持,完全免费。CentOS 提供与 RHEL 类似的功能,适合用于企业环境,但没有 RHEL 的官方技术支持。 - Ubuntu
基于 Debian,是一个广泛使用的发行版,特别适合初学者和桌面用户。Ubuntu 提供易于使用的界面,广泛的社区支持和软件包。 - Debian
稳定性非常高,广泛用于服务器和开发环境。Debian 是许多其他发行版的基础,包括 Ubuntu。
- CentOS
推荐给初学者的发行版
对于学习 Linux 的初学者,CentOS 是一个推荐的选择,原因如下:
- CentOS 是免费的且开源,没有商业许可证费用。
- CentOS 基于 RHEL,与 RHEL 功能高度一致,能够为用户提供企业级的稳定性和性能。
- 安全性和稳定性:CentOS 继承了 RHEL 的稳定性和长期支持,适合初学者学习和实验。
因此,CentOS 是一个适合初学者学习 Linux 基础和进行实际操作的良好平台。
二、Linux 文件系统
Linux 文件系统简介
在 Linux 操作系统中,“一切都是文件”是其核心设计理念之一。这意味着,所有由操作系统管理的资源(无论是硬件设备、网络接口、磁盘存储还是普通文件和目录)都被抽象成文件进行管理和操作。
"一切都是文件"的概念
这个理念源自于 UNIX 操作系统,并且被 Linux 沿用和发展。在 Linux 中,文件不仅仅是指磁盘上的普通数据文件,还包括:
- 设备文件:用于与硬件设备(如硬盘、键盘、显示器等)进行交互的文件。
- 网络接口:网络设备如网络卡、网络连接等也以文件的形式出现,可以像操作文件一样进行读写。
- 管道文件:用于进程间通信的特殊文件。
- 符号链接(symlink):类似快捷方式的文件,指向其他文件或目录。
这种设计理念使得用户和开发者能够通过统一的接口访问各种硬件和资源,无需关注它们的具体实现和类型。例如,硬盘的文件系统、打印机、甚至是网络接口都可以通过类似文件的方式进行访问和操作。
优势与特点
- 统一接口:所有资源通过文件系统进行统一管理,简化了系统的设计和操作。无论是读取磁盘文件、控制设备,还是管理网络资源,都通过文件描述符进行统一的操作。
- 灵活性和可扩展性:这种文件为中心的设计不仅使得操作更为简便,还提升了系统的灵活性。例如,用户可以通过标准的文件操作命令(如
cat
、echo
、cp
等)对设备进行操作。 - 简化资源管理:因为所有资源都可以通过文件系统访问,系统管理变得更加一致和高效。例如,设备文件位于
/dev
目录,用户可以像操作普通文件一样对设备进行读写操作。 - 高度可定制:Linux 的文件系统设计支持多种不同类型的文件系统,如 ext4、XFS、Btrfs 等,且能够支持跨平台的文件系统管理。
典型的文件系统结构
在 Linux 系统中,文件系统具有一定的层级结构,通常包含以下几个重要目录:
/bin
:基本的用户命令文件。/etc
:系统配置文件。/dev
:设备文件,所有硬件设备都在此目录下以文件的形式呈现。/home
:用户的主目录,每个用户都有一个自己的子目录。/mnt
和/media
:用于挂载外部设备或其他文件系统的挂载点。/proc
:虚拟文件系统,包含当前系统的进程和内核信息。/sys
:提供与内核交互的接口,用于访问内核中的信息。
通过这种设计,Linux 提供了一个统一且强大的操作平台,使得对文件、设备、资源等的操作更加方便与灵活。这也是 Linux 系统能够高效管理多种硬件和资源的基础。
inode 介绍
在 Linux/Unix 文件系统中,inode(索引节点)是文件系统的核心组件之一。它包含了文件的元数据信息(如权限、大小、时间戳等),但不存储文件的实际数据内容。以下是 inode 的一些关键点:
1. 文件元信息存储
- inode 存储了关于文件的重要信息,但不包括文件的实际内容。具体来说,它存储了:
- 文件的大小
- 文件的权限(如读、写、执行权限)
- 文件的所有者和所属组
- 文件的创建时间、修改时间和访问时间
- 文件的硬链接计数
- 文件的实际数据块位置(即文件存储在哪些磁盘块中)
- inode 的作用是通过文件的元数据帮助操作系统快速定位文件的实际内容,系统通过 inode 中存储的指针信息来找到存储在磁盘上的数据块。
2. 固定大小的数据结构
- 每个文件都对应一个唯一的 inode。inode 的大小在文件系统创建时就已经固定,通常为 128 字节或 256 字节,这个大小决定了它能存储多少元数据信息。
3. 高效的访问速度
- 因为 inode 本身不存储文件数据,而是存储指向文件数据的指针,操作系统可以通过 inode 快速定位到文件数据块的位置,从而提高文件访问的效率。访问 inode 信息非常快速,因为可以直接通过 inode 编号来定位到文件的元数据。
4. inode 数量是有限的
- 文件系统中包含的 inode 数量是有限的,这取决于文件系统的类型和创建时的配置。当 inode 用尽时,系统无法再创建新的文件或目录,即使磁盘上还有空闲空间。需要根据文件和目录的预期数量来合理分配 inode 的数量。
5. 使用命令查看 inode 信息
- 可以使用
stat
命令来查看文件的 inode 信息,命令会返回文件的 inode 编号、文件类型、权限、大小、创建时间、修改时间等信息。
stat filename
inode 与 block 的关系
- inode 存储文件的元数据和文件数据块的位置指针,而 block 存储文件的实际数据。
- 文件的实际内容存储在磁盘的一个或多个数据块中,而 inode 仅仅记录了数据块的位置。
- 一个文件的数据可以跨越多个 block(如果文件较大),但每个 block 只存储一个文件的部分数据。每个 block 只能存放文件的内容,而不能存放其他文件的数据。
- 即使文件名被修改或删除,文件的 inode 号码保持不变,从而保证文件的元数据信息不受文件名变化的影响。
总结
- inode 是文件的元数据存储结构,包含文件的大小、权限、所有者、创建时间等信息。
- block 存储文件的实际内容,文件的数据块可能会分布在多个物理位置。
- inode 使得 Linux 文件系统能够高效管理和定位文件,尤其在文件名发生变化或文件被移动时仍能保证文件访问的准确性。
通过 inode,Linux 系统实现了高效的文件管理和快速的数据访问,从而提升了整个文件系统的性能和灵活性。
硬链接与软链接
在 Linux/类 Unix 系统中,文件链接(File Link)允许我们创建指向其他文件的引用。常见的两种文件链接类型是 硬链接(Hard Link) 和 软链接(Symbolic Link 或 Symlink)。
1. 硬链接(Hard Link)
- inode 共享:硬链接是通过共享相同的 inode 节点号与源文件连接的,这意味着硬链接和源文件在文件系统中是完全平等的。无论是源文件还是硬链接,它们都指向相同的 inode,实际上它们都指向相同的文件数据块。
- 文件删除:只有当文件的所有硬链接和源文件都被删除时,文件才会真正从文件系统中删除。如果存在硬链接指向该文件,即使源文件删除了,硬链接仍然可以访问该文件的内容。
- 限制:
- 硬链接不能指向目录,这样可以避免循环引用和目录结构不一致的问题。
- 硬链接不能跨越不同的文件系统。如果试图在不同的文件系统之间创建硬链接,可能会导致 inode 节点号冲突,因为每个文件系统都有独立的 inode 表。
- 创建硬链接的命令:使用
ln
命令。
ln source_file hardlink_name
2. 软链接(Symbolic Link 或 Symlink)
- inode 不共享:软链接与源文件不同,它是通过文件路径指向源文件,而不是通过 inode 号码。软链接本质上是一个特殊的文件,它保存了源文件的路径信息。
- 文件删除:如果源文件被删除,软链接会变成“悬挂链接”(Broken Link),因为它仍然指向一个已不存在的文件。
- 优势:
- 可以指向目录,且允许跨文件系统创建软链接。
- 软链接的目标文件即使不存在也能创建。
- 软链接在用户层面非常灵活,可以用来创建快捷方式。
- 创建软链接的命令:使用
ln -s
命令。
ln -s source_file symlink_name
硬链接为什么不能跨文件系统?
硬链接不能跨文件系统的原因在于它是通过 inode 节点号建立连接的。每个文件系统有独立的 inode 表,用来管理该文件系统内部的所有文件。硬链接和源文件共享相同的 inode 节点号,而 inode 节点号是局部于文件系统的。
如果尝试在不同的文件系统之间创建硬链接,会导致两个不同文件系统的 inode 节点号冲突,因为每个文件系统的 inode 表独立,并且 inode 节点号的范围有限。因此,硬链接只能在同一文件系统内进行创建,无法跨文件系统操作。
Linux 文件类型
在 Linux 中,文件系统支持多种文件类型,每种类型有不同的用途和特性。以下是常见的文件类型及其简要说明:
1. 普通文件(-)
- 用途:存储数据和信息,常见的类型包括文本文件、图片、视频、音频、程序源代码等。
- 访问:用户可以根据文件的权限来查看、修改或删除这些文件。
示例:
-rw-r--r-- 1 user group 1024 Apr 14 10:00 file.txt
2. 目录文件(d,directory file)
- 用途:用来组织和管理文件系统中的文件。目录文件包含指向其他文件或目录的名称和位置。
- 访问:打开目录文件实际上就是打开其中的文件或子目录。
示例:
drwxr-xr-x 2 user group 4096 Apr 14 10:00 directory/
3. 符号链接文件(l,symbolic link)
- 用途:符号链接文件保存的是指向其他文件或目录的路径,而不是文件本身。它类似于 Windows 系统中的快捷方式。
- 访问:通过符号链接访问时,系统会根据链接内容自动跳转到目标文件。
示例:
lrwxrwxrwx 1 user group 5 Apr 14 10:00 link -> file.txt
4. 字符设备文件(c,char)
- 用途:用于访问字符设备,如键盘、鼠标、串口设备等。字符设备按字符的形式与计算机交互。
- 访问:字符设备允许按字节读取或写入。
示例:
crw-rw-rw- 1 root root 5, 1 Apr 14 10:00 /dev/ttyS0
5. 块设备文件(b,block)
- 用途:用于访问块设备,如硬盘、软盘等。块设备按块的形式与计算机交互,每次读取或写入一定大小的数据块。
- 访问:块设备通常用于存储大容量数据。
示例:
brw-rw-rw- 1 root root 8, 1 Apr 14 10:00 /dev/sda
6. 管道文件(p,pipe)
- 用途:管道文件用于在进程之间进行通信,它是 Unix 和 Linux 中的一种进程间通信机制。管道允许一个进程的输出作为另一个进程的输入。
- 访问:管道文件通过特定的命令(如
|
)在命令行中使用。
示例:
prw-r--r-- 1 user group 0 Apr 14 10:00 mypipe
7. 套接字文件(s,socket)
- 用途:套接字文件用于进程间的网络通信,支持本机之间的通信或跨网络的通信。
- 访问:套接字用于建立通信通道,类似于网络上的端口。
示例:
srwxrwxrwx 1 user group 0 Apr 14 10:00 socket
总结
Linux 系统中的每个文件类型都扮演着不同的角色。通过查看文件类型,用户可以更清楚地知道该文件的用途和如何与之交互。可以使用 ls -l
命令查看文件类型,或者 file
命令确认文件的实际类型。
Linux 目录树
Linux 文件系统采用层次化的目录结构,类似于倒立的树状结构。每个目录都可以包含文件和其他子目录。根目录(/
)是整个文件系统的起始点,所有其他目录和文件都从根目录向下扩展。
常见目录说明:
/bin:存放基本的二进制可执行文件,如
ls
、cat
、mkdir
等,系统启动和普通用户操作常用的命令都位于此。/etc:存放系统配置文件,如网络配置、用户信息和各种系统服务配置文件。该目录中的文件影响系统的全局行为。
/home:存放所有用户的个人文件目录,每个用户都有一个以其用户名命名的子目录。例如,用户
user
的主目录通常是/home/user
。/usr:包含系统的应用程序和文件,是存放大多数程序和库文件的地方。这个目录下有
bin
、lib
等子目录,用于存放可执行文件和系统库。/opt:用于存放额外安装的可选应用程序包。第三方软件包通常安装在此目录,例如 Tomcat、Eclipse 等。
/proc:虚拟文件系统,包含关于系统运行时的信息,例如当前内核、进程、硬件等。它并不实际存储数据,而是内核的映射。
/root:超级用户(
root
)的主目录。与普通用户的主目录不同,root
目录直接位于根目录下。/sbin:包含系统管理员使用的二进制可执行文件,通常需要
root
权限才能访问。这些文件多用于系统级管理,例如ifconfig
、fsck
等命令。/dev:存放设备文件,包括硬盘、终端、USB 设备等。设备文件允许用户和程序与硬件进行交互。
/mnt:通常为空,用于系统管理员临时挂载其他文件系统。例如,可以将外部硬盘或网络共享挂载到此目录。
/boot:存放系统启动时必需的文件,例如内核映像和引导加载器配置文件。
/lib 和 /lib64:存放与系统运行相关的共享库文件。32 位系统通常使用
/lib
,64 位系统则使用/lib64
。/tmp:存放临时文件,所有用户和程序都可以访问。此目录中的文件通常会在系统重启时被清除。
/var:存放运行时数据,包括日志文件、邮件队列、缓存等。它包含一些系统和服务动态生成的文件。
/lost+found:通常为空,系统非正常关机或文件系统出错时,未能成功恢复的文件会被放置在此目录中。
总结
Linux 的目录树结构设计让不同类型的文件可以有条不紊地组织在一起,有助于系统管理和维护。了解这些目录的功能对于使用和管理 Linux 系统非常重要。
三、Linux 常用命令
目录切换
cd usr
:切换到该目录下 usr 目录cd ..(或cd../)
:切换到上一层目录cd /
:切换到系统根目录cd ~
:切换到用户主目录cd -
: 切换到上一个操作所在目录
目录操作
ls
:显示目录中的文件和子目录的列表。例如:ls /home
,显示/home
目录下的文件和子目录列表。ll
:ll
是ls -l
的别名,ll 命令可以看到该目录下的所有目录和文件的详细信息mkdir [选项] 目录名
:创建新目录(增)。例如:mkdir -m 755 my_directory
,创建一个名为my_directory
的新目录,并将其权限设置为 755,即所有用户对该目录有读、写和执行的权限。find [路径] [表达式]
:在指定目录及其子目录中搜索文件或目录(查),非常强大灵活。例如:① 列出当前目录及子目录下所有文件和文件夹:find .
;② 在/home
目录下查找以.txt
结尾的文件名:find /home -name "*.txt"
,忽略大小写:find /home -i name "*.txt"
;③ 当前目录及子目录下查找所有以.txt
和.pdf
结尾的文件:find . \( -name "*.txt" -o -name "*.pdf" \)
或find . -name "*.txt" -o -name "*.pdf"
。pwd
:显示当前工作目录的路径。rmdir [选项] 目录名
:删除空目录(删)。例如:rmdir -p my_directory
,删除名为my_directory
的空目录,并且会递归删除my_directory
的空父目录,直到遇到非空目录或根目录。rm [选项] 文件或目录名
:删除文件/目录(删)。例如:rm -r my_directory
,删除名为my_directory
的目录,-r
(recursive,递归) 表示会递归删除指定目录及其所有子目录和文件。cp [选项] 源文件/目录 目标文件/目录
:复制文件或目录(移)。例如:cp file.txt /home/file.txt
,将file.txt
文件复制到/home
目录下,并重命名为file.txt
。cp -r source destination
,将source
目录及其下的所有子目录和文件复制到destination
目录下,并保留源文件的属性和目录结构。mv [选项] 源文件/目录 目标文件/目录
:移动文件或目录(移),也可以用于重命名文件或目录。例如:mv file.txt /home/file.txt
,将file.txt
文件移动到/home
目录下,并重命名为file.txt
。mv
与cp
的结果不同,mv
好像文件“搬家”,文件个数并未增加。而cp
对文件进行复制,文件个数增加了。
文件操作
像 mv
、cp
、rm
等文件和目录都适用的命令,这里就不重复列举了。
touch [选项] 文件名..
:创建新文件或更新已存在文件(增)。例如:touch file1.txt file2.txt file3.txt
,创建 3 个文件。ln [选项] <源文件> <硬链接/软链接文件>
:创建硬链接/软链接。例如:ln -s file.txt file_link
,创建名为file_link
的软链接,指向file.txt
文件。-s
选项代表的就是创建软链接,s 即 symbolic(软链接又名符号链接) 。cat/more/less/tail 文件名
:文件的查看(查) 。命令tail -f 文件
可以对某个文件进行动态监控,例如 Tomcat 的日志文件, 会随着程序的运行,日志会变化,可以使用tail -f catalina-2016-11-11.log
监控 文 件的变化 。vim 文件名
:修改文件的内容(改)。vim 编辑器是 Linux 中的强大组件,是 vi 编辑器的加强版,vim 编辑器的命令和快捷方式有很多,但此处不一一阐述,大家也无需研究的很透彻,使用 vim 编辑修改文件的方式基本会使用就可以了。在实际开发中,使用 vim 编辑器主要作用就是修改配置文件,下面是一般步骤:vim 文件------>进入文件----->命令模式------>按i进入编辑模式----->编辑文件 ------->按Esc进入底行模式----->输入:wq/q!
(输入 wq 代表写入内容并退出,即保存;输入 q!代表强制退出不保存)。
文件压缩
1)打包并压缩文件:
Linux 中的打包文件一般是以 .tar
结尾的,压缩的命令一般是以 .gz
结尾的。而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般 .tar.gz
。
命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件
,其中:
- z:调用 gzip 压缩命令进行压缩
- c:打包文件
- v:显示运行过程
- f:指定文件名
比如:假如 test 目录下有三个文件分别是:aaa.txt
、 bbb.txt
、ccc.txt
,如果我们要打包 test
目录并指定压缩后的压缩包名称为 test.tar.gz
可以使用命令:tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt
或 tar -zcvf test.tar.gz /test/
。
2)解压压缩包:
命令:tar [-xvf] 压缩文件
其中 x 代表解压
示例:
- 将
/test
下的test.tar.gz
解压到当前目录下可以使用命令:tar -xvf test.tar.gz
- 将 /test 下的 test.tar.gz 解压到根目录/usr 下:
tar -xvf test.tar.gz -C /usr
(-C
代表指定解压的位置)
文件传输
scp [选项] 源文件 远程文件
(scp 即 secure copy,安全复制):用于通过 SSH 协议进行安全的文件传输,可以实现从本地到远程主机的上传和从远程主机到本地的下载。例如:scp -r my_directory user@remote:/home/user
,将本地目录my_directory
上传到远程服务器/home/user
目录下。scp -r user@remote:/home/user/my_directory
,将远程服务器的/home/user
目录下的my_directory
目录下载到本地。需要注意的是,scp
命令需要在本地和远程系统之间建立 SSH 连接进行文件传输,因此需要确保远程服务器已经配置了 SSH 服务,并且具有正确的权限和认证方式。rsync [选项] 源文件 远程文件
: 可以在本地和远程系统之间高效地进行文件复制,并且能够智能地处理增量复制,节省带宽和时间。例如:rsync -r my_directory user@remote:/home/user
,将本地目录my_directory
上传到远程服务器/home/user
目录下。ftp
(File Transfer Protocol):提供了一种简单的方式来连接到远程 FTP 服务器并进行文件上传、下载、删除等操作。使用之前需要先连接登录远程 FTP 服务器,进入 FTP 命令行界面后,可以使用put
命令将本地文件上传到远程主机,可以使用get
命令将远程主机的文件下载到本地,可以使用delete
命令删除远程主机的文件。这里就不进行演示了。
文件权限
操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制,在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable),分为三组。分别对应文件的属主(owner),属组(group)和其他用户(other),通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。
通过 ls -l
命令我们可以 查看某个目录下的文件或目录的权限
示例:在随意某个目录下ls -l
第一列的内容的信息解释如下:
下面将详细讲解文件的类型、Linux 中权限以及文件有所有者、所在组、其它组具体是什么?
文件的类型:
- d:代表目录
- -:代表文件
- l:代表软链接(可以认为是 window 中的快捷方式)
Linux 中权限分为以下几种:
- r:代表权限是可读,r 也可以用数字 4 表示
- w:代表权限是可写,w 也可以用数字 2 表示
- x:代表权限是可执行,x 也可以用数字 1 表示
文件和目录权限的区别:
对文件和目录而言,读写执行表示不同的意义。
对于文件:
权限名称 | 可执行操作 |
---|---|
r | 可以使用 cat 查看文件的内容 |
w | 可以修改文件的内容 |
x | 可以将其运行为二进制文件 |
对于目录:
权限名称 | 可执行操作 |
---|---|
r | 可以查看目录下列表 |
w | 可以创建和删除目录下文件 |
x | 可以使用 cd 进入目录 |
需要注意的是:超级用户可以无视普通用户的权限,即使文件目录权限是 000,依旧可以访问。
在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。
- 所有者(u):一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者,用
ls ‐ahl
命令可以看到文件的所有者 也可以使用 chown 用户名 文件名来修改文件的所有者 。 - 文件所在组(g):当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组用
ls ‐ahl
命令可以看到文件的所有组也可以使用 chgrp 组名 文件名来修改文件所在的组。 - 其它组(o):除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
我们再来看看如何修改文件/目录的权限。
修改文件/目录的权限的命令:chmod
示例:修改/test 下的 aaa.txt 的权限为文件所有者有全部权限,文件所有者所在的组有读写权限,其他用户只有读的权限。
chmod u=rwx,g=rw,o=r aaa.txt
或者 chmod 764 aaa.txt
补充一个比较常用的东西:
假如我们装了一个 zookeeper,我们每次开机到要求其自动启动该怎么办?
- 新建一个脚本 zookeeper
- 为新建的脚本 zookeeper 添加可执行权限,命令是:
chmod +x zookeeper
- 把 zookeeper 这个脚本添加到开机启动项里面,命令是:
chkconfig --add zookeeper
- 如果想看看是否添加成功,命令是:
chkconfig --list
用户管理
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
Linux 用户管理相关命令:
useradd [选项] 用户名
:创建用户账号。使用useradd
指令所建立的帐号,实际上是保存在/etc/passwd
文本文件中。userdel [选项] 用户名
:删除用户帐号。usermod [选项] 用户名
:修改用户账号的属性和配置比如用户名、用户 ID、家目录。passwd [选项] 用户名
: 设置用户的认证信息,包括用户密码、密码过期时间等。。例如:passwd -S 用户名
,显示用户账号密码信息。passwd -d 用户名
: 清除用户密码,会导致用户无法登录。passwd 用户名
,修改用户密码,随后系统会提示输入新密码并确认密码。su [选项] 用户名
(su 即 Switch User,切换用户):在当前登录的用户和其他用户之间切换身份。
用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同,如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。
Linux 系统用户组的管理相关命令:
groupadd [选项] 用户组
:增加一个新的用户组。groupdel 用户组
:要删除一个已有的用户组。groupmod [选项] 用户组
: 修改用户组的属性。
系统状态
top [选项]
:用于实时查看系统的 CPU 使用率、内存使用率、进程信息等。htop [选项]
:类似于top
,但提供了更加交互式和友好的界面,可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。uptime [选项]
:用于查看系统总共运行了多长时间、系统的平均负载等信息。vmstat [间隔时间] [重复次数]
:vmstat (Virtual Memory Statistics) 的含义为显示虚拟内存状态,但是它可以报告关于进程、内存、I/O 等系统整体运行状态。free [选项]
:用于查看系统的内存使用情况,包括已用内存、可用内存、缓冲区和缓存等。df [选项] [文件系统]
:用于查看系统的磁盘空间使用情况,包括磁盘空间的总量、已使用量和可用量等,可以指定文件系统上。例如:df -a
,查看全部文件系统。du [选项] [文件]
:用于查看指定目录或文件的磁盘空间使用情况,可以指定不同的选项来控制输出格式和单位。sar [选项] [时间间隔] [重复次数]
:用于收集、报告和分析系统的性能统计信息,包括系统的 CPU 使用、内存使用、磁盘 I/O、网络活动等详细信息。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。ps [选项]
:用于查看系统中的进程信息,包括进程的 ID、状态、资源使用情况等。ps -ef
/ps -aux
:这两个命令都是查看当前系统正在运行进程,两者的区别是展示格式不同。如果想要查看特定的进程可以使用这样的格式:ps aux|grep redis
(查看包括 redis 字符串的进程),也可使用pgrep redis -a
。systemctl [命令] [服务名称]
:用于管理系统的服务和单元,可以查看系统服务的状态、启动、停止、重启等。
网络通信
ping [选项] 目标主机
:测试与目标主机的网络连接。ifconfig
或ip
:用于查看系统的网络接口信息,包括网络接口的 IP 地址、MAC 地址、状态等。netstat [选项]
:用于查看系统的网络连接状态和网络统计信息,可以查看当前的网络连接情况、监听端口、网络协议等。ss [选项]
:比netstat
更好用,提供了更快速、更详细的网络连接信息。
其他
sudo + 其他命令
:以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。grep 要搜索的字符串 要搜索的文件 --color
:搜索命令,--color 代表高亮显示。kill -9 进程的pid
:杀死进程(-9 表示强制终止)先用 ps 查找进程,然后用 kill 杀掉。shutdown
:shutdown -h now
:指定现在立即关机;shutdown +5 "System will shutdown after 5 minutes"
:指定 5 分钟后关机,同时送出警告信息给登入用户。reboot
:reboot
:重开机。reboot -w
:做个重开机的模拟(只有纪录并不会真的重开机)。
四、Linux 环境变量
在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的主目录(HOME)。
环境变量分类
按照作用域来分,环境变量可以简单的分成:
- 用户级别环境变量 :
~/.bashrc
、~/.bash_profile
。 - 系统级别环境变量 :
/etc/bashrc
、/etc/environment
、/etc/profile
、/etc/profile.d
。
上述配置文件执行先后顺序为:/etc/environment
–> /etc/profile
–> /etc/profile.d
–> ~/.bash_profile
–> /etc/bashrc
–> ~/.bashrc
如果要修改系统级别环境变量文件,需要管理员具备对该文件的写入权限。
建议用户级别环境变量在 ~/.bash_profile
中配置,系统级别环境变量在 /etc/profile.d
中配置。
按照生命周期来分,环境变量可以简单的分成:
- 永久的:需要用户修改相关的配置文件,变量永久生效。
- 临时的:用户利用
export
命令,在当前终端下声明环境变量,关闭 shell 终端失效。
读取环境变量
通过 export
命令可以输出当前系统定义的所有环境变量。
# 列出当前的环境变量值
export -p
除了 export
命令之外, env
命令也可以列出所有环境变量。
echo
命令可以输出指定环境变量的值。
# 输出当前的PATH环境变量的值
echo $PATH
# 输出当前的HOME环境变量的值
echo $HOME
环境变量修改
通过 export
命令可以修改指定的环境变量。不过,这种方式修改环境变量仅仅对当前 shell 终端生效,关闭 shell 终端就会失效。修改完成之后,立即生效。
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
通过 vim
命令修改环境变量配置文件。这种方式修改环境变量永久有效。
vim ~/.bash_profile
如果修改的是系统级别环境变量则对所有用户生效,如果修改的是用户级别环境变量则仅对当前用户生效。
修改完成之后,需要 source
命令让其生效或者关闭 shell 终端重新登录。
source /etc/profile