第一章、Linux概述
一、Linux的应用领域
1、个人桌面领域
此领域是传统Linux应用薄弱的环节,近些年来随着ubuntu,fedora等优秀桌面环境的兴起,Linux在个人桌面领域的占有率在逐渐的提高
2、服务器领域
Linux在服务器领域的应用是最强的。
Linux免费,稳定,高效的特点在这里得到了很好的体现,尤其在一些高端领域尤为广泛(c/c++/php/java/python/go)
3、嵌入式领域
Linux运行稳定,对网络的良好支持,低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年来在嵌入式领域的应用得到了非常大的提高
主要应用:机顶盒,数字电视,网络电话,程控交换机,手机,PDA,智能家具,智能硬件等都是其应用领域。以后在物联网中应用会更加广泛。
二、Linux概述
- Linux怎么读:不下10种
- Linux是一个开源,免费的操作系统,其稳定性,安全性,处理多并发已经得到了业界的认可,目前很多企业级的项目(c/c++/php/python/java/go)都会部署到Linux/unix系统上。
- 常见的操作系统:windows,ISO,Android,MacOS,Linux,Unix
Linux是一个开源的、类Unix操作系统,其内核最初由芬兰计算机科学家Linus Torvalds在1991年创建。它的设计受到了Unix操作系统的启发,但具有许多独特的特点。Linux操作系统的发展受到了全球开发者社区的广泛支持,这个社区不断地为Linux内核添加新功能、修复漏洞,并且创建了许多与Linux兼容的软件。Linux的内核与操作系统其他组件的组合形成了各种Linux发行版,这些发行版包括但不限于Ubuntu、Debian、Fedora、Red Hat、CentOS、Arch Linux和OpenSUSE等。
Linux是一个非常灵活和可定制的操作系统,适用于各种计算机系统,从个人计算机到服务器以及嵌入式系统。它被广泛用于各种设备和领域,包括服务器、超级计算机、个人电脑、智能手机、路由器、电视机顶盒等。它还具有广泛的应用程序支持,包括用于办公套件、网页浏览器、多媒体应用、图形工具和开发工具等。许多云计算平台也部署在Linux服务器上。
Linux具有许多优点,包括稳定性、可靠性、安全性和灵活性。它的开源性质使得用户可以自由地访问和修改其源代码,从而允许用户根据自己的需求进行定制和优化。同时,Linux社区也提供了广泛的支持和资源,包括文档、论坛和社区支持,使得初学者和专业人士都能够轻松地获取帮助和解决方案。由于这些特点,Linux已经成为许多计算机用户和开发人员的首选操作系统。
1、Linux之父:Linus Torvalds
Git创作者
世界著名黑客
2、Linux主要的发行版
Ubuntu(乌班图),RedHat(红帽),CentOS,
Debain(碟变),Fedora,SuSE,OpenSUSE
3、Linux内核源码
Linux0.01版本源码,不到1w行
三、Linux和Unix的关系
Linux和Unix之间存在着密切的关系,这源于Linux操作系统最初的设计目标之一是兼容Unix。Unix是一种类Unix操作系统家族的原始操作系统,于20世纪70年代初期由肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)等人开发。它的设计目标是提供一个强大的多用户、多任务操作系统,具有良好的可移植性和稳定性。
Linux最初是作为一个仿照Unix的操作系统开发的,因此它从Unix继承了许多设计原则和特点。这包括使用类似于Unix的文件系统、命令行界面、权限模型以及许多工具和实用程序。此外,Linux内核本身也受到Unix内核的影响,这导致了它们在某些方面具有相似的特性和功能。
然而,Linux并不是基于原始的Unix代码开发的,而是作为一个独立的项目由Linus Torvalds开发。因此,尽管Linux与Unix之间有许多相似之处,但它们是独立开发的两个不同的操作系统。由于Unix的商业化和专有性质,Linux填补了一个提供开源、免费、可定制的类Unix操作系统的空白,这使得Linux在计算机领域得到了广泛的应用和发展。
总的来说,Linux可以被视为是Unix的一种替代品,提供了类似于Unix的功能和接口,并在开源、免费的基础上发展出了自己独特的特点和生态系统。
1、图解
第二章、VM和Linux系统的安装
第一种方案:直接在物理机上安装Linux系统
第二种方案:在VM上安装Linux系统,一般采用第二种方案
一、安装VMware WorkStation和 Linux系统
1、基本说明
学习Linux需要一个环境,我们需要创建一个虚拟机,然后在虚拟机上安装一个CentOS系统来学习
- 先安装wmware workstation
- 再安装CentOS系统
2、主机、VM和Linux的关系
二、vmware workstation下载及安装
1、开启虚拟化
2、下载及安装教程
三、Linux镜像下载
1、下载说明
2、阿里云下载
3、163下载
4、快速下载
四、Linux安装
1、判断主机CPU数及核数
2、手动分区原则
3、随机密码生成
4、安装步骤
5、查看CentOS版本
你可以使用以下命令来查看 CentOS 版本信息:
cat /etc/centos-release
这将显示 CentOS 安装的版本信息,包括主要版本号和补丁级别。
五、网络连接的三种模式
六、虚拟机克隆
如果你已经安装了一台Linux操作系统,还想要更多的,没有必要重新安装,只需要克隆就可以
1、直接拷贝一份安装好的虚拟机文件
将安装好的虚拟机文件直接拷贝后,使用vmware workstation打开
2、使用VMware workstation 克隆
克隆时,需要先关闭Linux系统
七、虚拟机快照
如果在使用虚拟机系统的时候(Linux),想回到原先的某一个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware也提供了这样的功能,叫做快照管理
八、虚拟机迁移和删除
1、虚拟机迁移
虚拟系统安装好了,它的本质就是文件(放在文件夹中的),因此虚拟系统的迁移很方便,可以将安装好的虚拟系统这个文件夹整体拷贝或剪切到另外位置使用
2、虚拟机删除
使用手动删除:直接手动删除虚拟机系统对应的文件夹即可
使用vmware删除:
九、安装VMTools
VMTools安装后,可以让我们在Windows下更好的管理VM虚拟机
可以设置Windows和CentOS的共享文件夹
1、进入CentOS,弹出桌面的其他镜像文件
2、点击VM菜单的 -》 install vmware tools
3、CentOS会出现一个VM的安装包,xxx.tar.gz
4、拷贝到 /opt
5、使用解压命令 tar,得到一个安装文件
cd /opt 进入opt目录
ls -l 查看当前目录中的文件
tar -zxvf xx.tar.gz 解压该文件
6、进入该vm解压的目录,/opt目录下
cd vmware-tools-distrib
7、安装 ./vmware-install.pl
全部使用默认设置即可,一路回车,就可以安装成功
注意:安装vmtools需要有gcc 使用gcc -v命令查看是否安装
十、设置共享文件夹
1、基本介绍
为了方便,可以设置一个共享文件夹,比如:D:\myshare
2、具体步骤
菜单 -> VM -> setting 如图设置即可,注意:设置选项为always enable,这样就可以读写了
Windows和CentOS可共享,D:\myshare目录可以读写文件了
共享文件夹在CentOS的 /mnt/hgfs/下
3、注意事项和细节说明
Windows和CentOS就可以共享文件了,但是在实际开发中,文件的上传和下载是需要使用远程方式完成的
第三章、目录结构
一、概述
Linux 系统的目录结构是按照 Filesystem Hierarchy Standard (FHS)(文件系统层次结构标准)组织的。它定义了 Linux 系统中各个目录的用途和内容。
1、层级式的树状目录结构
Linux的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录 “/” ,然后在此目录下再创建其他的目录
2、Linux中,一切皆文件
将所有的硬件映射成文件来管理
在 Linux 系统中,"一切皆文件" 是一个重要的概念,它指的是在 Linux 系统中几乎所有的东西,包括硬件设备、外部设备、进程、目录和文件等,都被抽象化为文件的形式来表示和管理。这个概念的核心思想在于提供了一种统一的视角和访问方式,使得用户和系统可以以一致的方式来处理和管理各种资源。
具体来说,"一切皆文件" 的概念可以解释为以下几点:
-
硬件设备表示为文件:在 Linux 中,硬件设备通常被表示为文件,例如硬盘驱动器可以表示为
/dev/sda
,键盘可以表示为/dev/input/event0
等。 -
进程表示为文件:Linux 中的进程也被表示为文件,可以在
/proc
目录下找到对应的进程文件,例如/proc/<PID>/
。 -
系统资源表示为文件:许多系统资源,如网络接口、系统状态信息等,也被表示为文件或者文件夹。
-
配置信息表示为文件:Linux 系统的许多配置信息和设置也被保存在文件中,例如
/etc
目录下的配置文件。
这种文件抽象的方式使得用户可以通过统一的文件操作接口(如读取、写入、复制、移动等)来管理和处理各种资源,从而简化了系统管理和操作。同时,这种一致的抽象也为开发者提供了方便的接口,使得他们可以利用文件系统接口来操作和管理各种资源,而不需要针对不同类型的资源实现不同的操作接口
二、进程和服务
在计算机中,进程和服务是密切相关的概念,它们之间有着紧密的联系。下面是进程和服务之间关系的几个要点:
-
进程和服务的定义:进程是指在计算机系统中正在运行的程序的实例,它包含了程序的代码、数据以及程序运行所需的资源。而服务通常指在操作系统中以后台方式运行的应用程序或进程,它们提供特定的功能或服务,例如网络服务、打印服务、数据库服务等。
-
服务是特殊的进程:服务本质上也是一种特殊类型的进程,它在后台持续运行以提供某种特定的功能或服务。服务通常会在系统启动时自动启动,并且会持续运行以处理来自用户或其他程序的请求。
-
服务依赖进程:服务通常依赖于一个或多个相关的进程来运行。这些进程负责执行服务所需的具体功能,以满足用户或其他程序的需求。
-
进程和服务之间的交互:进程和服务之间通过操作系统提供的通信机制进行交互。服务可以创建或终止进程,而进程可以调用服务提供的功能或服务。通过这种交互,进程和服务可以共同完成复杂的计算机任务和服务需求。
总体而言,进程和服务在计算机系统中是相互依存的概念。进程是操作系统中正在运行的程序实例,而服务是在后台运行的特定类型的进程,它们相互配合以提供各种功能和服务,保证系统的正常运行和用户需求的满足
三、主要文件目录
1、/:
包含整个文件系统的所有文件和子目录
2、/bin:
是Binary的缩写,这个目录存放着普通用户最经常使用的命令,存放普通用户的命令
/user/bin /user/local/bin
- 通常包含了可执行的二进制文件。这些二进制文件是基本的系统管理工具和普通用户可用的基本命令行工具。`/bin`目录被包含在$PATH环境变量中,所以用户可以轻松地以命令行方式使用这些工具。
- 在Linux中,`/bin`目录中的工具通常是非常基本的,例如`ls`、`cp`、`mv`等。这些工具都是用C语言等编程语言编写的,可以通过终端运行,并且是Linux系统中必不可少的。在安装Linux系统时,`/bin`目录中的工具会被安装在系统中,并在系统启动后就可以使用。
- `/bin`目录的另一个重要作用是在系统出现问题时提供给用户一些基本的命令行工具,例如单用户模式、安装CD等,这些工具可以帮助用户恢复或修复系统问题,因为这些工具通常不需要其他的库文件或者环境变量支持,因此很容易使用。
- 总之,`/bin`包含了用户可以使用的基本命令行工具。即使在安装服务器等环境时,它也是必需的一部分,因为在很多紧急情况下,它提供了一些可以使用的命令行工具以修复系统问题。
3、/sbin:
S就是Super User 的意思,这里存放的是系统管理员使用命令
/user/sbin /user/local/sbin
- `/sbin` 目录包含了一些供系统管理员使用的系统管理工具和命令,如系统启动、关机、硬件配置等。
- 在 `/sbin` 目录中,你可以找到一些常见的系统管理工具和命令,比如 `shutdown`、`reboot`、`ifconfig`、`route` 等等。这些工具和命令通常被用于对系统进行配置、管理和维护,只有系统管理员或者具有特殊权限的用户才能够调用这些命令。
- 需要注意的是,`/sbin` 目录中的命令和工具通常是需要超级用户权限才能够执行的,因此一般用户是无法访问到该目录下的文件。通常情况下,如果你需要执行一个 `sbin` 目录下的命令,你需要使用 `sudo` 命令来获取管理员权限,或者使用 `su` 命令切换到 root 用户。
- 总之,`/sbin` 目录包含了一些供系统管理员使用的系统管理工具和命令。这些工具和命令通常是需要超级用户权限才能够执行的,一般用户是无法访问和调用该目录下的程序的。
4、/home:
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名
- `/home` 目录是 Linux 系统中的一个特殊目录,在一个多用户的 Linux 系统中,每个用户都会有一个独立的家目录,即`/home`目录下的一个子目录。
- 在`/home` 目录下,每个用户的目录都以其用户名作为名称,该目录存储着该用户的文件、文档以及个人设置等信息。例如,用户A的个人文件和设置存储在`/home/A`目录中,而用户B的个人文件和设置则存储在`/home/B`目录中。
- 刚刚安装好的 Linux 系统中,`/home` 目录通常是空的,只有`root`用户拥有该目录下的写权限。当你创建新用户时,系统会自动创建该用户的家目录,并将其设置为该用户的默认工作目录。
- `/home` 目录通常用于用户文件和配置的管理,也是可持续化存储用户数据的一种方式。用户可以在自己的家目录中创建自己的文件夹,存放自己的文件和数据,并根据需要设置相应的权限,以便掌握对文件的访问和修改控制权。此外,程序也可以使用用户家目录下的某些文件来存储一些配置信息,以备在下次登录时或程序启动时使用。
- 总之,`/home` 目录是 Linux 系统中用于存储用户文件和配置信息。它为 Linux 系统中的多用户功能提供了基础,让用户可以在同一系统中同时使用不同的账户和配置信息。
[root@wdc-vsanqe-mgmt1-dhcp94-119 home]# ll
total 0
drwxr-xr-x. 2 root root 43 Oct 31 02:54 jzq
[root@wdc-vsanqe-mgmt1-dhcp94-119 home]# useradd Tom
[root@wdc-vsanqe-mgmt1-dhcp94-119 home]# ll
total 0
drwxr-xr-x. 2 root root 43 Oct 31 02:54 jzq
drwx------. 2 Tom Tom 59 Nov 1 02:10 Tom
[root@wdc-vsanqe-mgmt1-dhcp94-119 home]# userdel -r Tom
[root@wdc-vsanqe-mgmt1-dhcp94-119 home]# ll
total 0
drwxr-xr-x. 2 root root 43 Oct 31 02:54 jzq
5、/root:
该目录为系统管理员,也称作超级权限者的用户主目录
- `/root` 目录是系统的超级管理员(root)的主目录。在 Linux 系统中,root 账户是具有完全的系统管理权限并拥有所有权利的账户,它是系统的最高管理员。
- `/root` 目录包含了 root 用户的个人文件和配置文件,包括一些重要的配置文件、SSH 私钥和其他系统管理工具。和普通用户的家目录 `/home` 不同,`/root` 目录是一个系统级别的目录,在一般情况下普通用户是无法访问和修改该目录下的任何文件的。
[capv@build-centos8-template /]$ cd /root/
-bash: cd: /root/: Permission denied
[capv@build-centos8-template /]$
- `/root` 目录包含了许多常见的文件和目录,包括 `.bashrc` 表示 Bash shell 的配置文件、`.profile` 表示系统环境变量的配置文件以及一些其他的系统配置文件。当系统需要读取 root 用户的个人文件或者目录时,通常会直接引用 `/root`。
- 需要注意的是,由于 `root` 账户具有最高的权限,因此操作 `/root` 目录需要非常小心,以免损坏系统和数据。 在一般情况下,你应该避免使用 `root` 账户登录系统和使用 `root` 账户来执行一些不必要的操作。
- 总之,`/root` 目录是系统的超级管理员(root)的主目录,包含了许多重要的文件和配置文件。操作这个目录需要具备足够的权限和必要的谨慎性。
6、/lib:
系统开机锁需要最基本的动态链接共享库,其作用类似于Windows中的DLL文件,几乎所有的应用程序都需要用到这些共享库
- `/lib`目录是Linux系统中的一个非常重要的目录,包含了许多与系统和各种应用程序相关的重要的库文件,这些库文件被编译成可共享的对象文件,是许多程序和库所依赖的文件。
- 在`/lib`目录中,我们可以看到很多以类似`lib*.so*`的命名方式的文件。这些文件通常是共享库(动态链接库)文件,即多个程序共享使用的某种固定的代码逻辑。它们包括各种常用的代码库,如数学库、I/O库、网络库等,不同的编程语言也有它们自己的库文件,比如 `Python` 的库文件就会被放在`/lib/python/`下面。
- 此外,在`/lib`目录下还包含了一些内核模块(drivers)的可执行二进制文件,这些模块是 Linux 内核中某些设备的驱动程序模块,可以被动态地链接到内核中。
- 总之,`/lib`目录是Linux系统中一个非常重要的目录,它包含了许多被系统和应用程序所依赖的共享库文件和内核驱动程序模块,为 Linux 系统和应用程序的正确运行提供了必要的支持。
7、lost+found:
这个没有了一般情况下是空的,当系统非法关机后,这里就存放了一些文件
在标准的 Linux 文件系统中,lost+found
目录是用来存放在文件系统检查与修复过程中找到的丢失的文件片段或文件片段的文件名。它并不是特定于某个特定版本的 CentOS 或其他 Linux 发行版。
如果您在某个特定版本的 CentOS 中看到了 lost+found
目录,而在其他版本中没有看到,可能是因为文件系统检查或修复过程中发现了一些问题,需要将这些丢失的文件片段放置在 lost+found
目录中。这可能是由于文件系统不正常关闭、硬件故障或其他文件系统错误等原因导致的。
因此,lost+found
目录的存在与否取决于文件系统的完整性和发生的错误情况,而不是特定于某个版本的操作系统。在其他版本中可能也会有 lost+found
目录,但由于没有需要放置的文件片段,因此可能看不到该目录。
8、/etc:
所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库管理系统,则会有配置文件my.cnf
该目录存储了各种系统级别的配置文件,是Linux系统中所有的常用应用程序和服务所需的重要配置文件的存储位置。该目录在系统级别和全局范围内定义了很多关键性的值。
在`/etc`目录中,包括了许多文件和子目录,这些文件和子目录是按照应用程序和服务的名称进行组织的。例如,以下是一些在`/etc`目录下的子目录及相关的配置文件:
- `/etc/network`:存储网络相关的设置,包括IP地址、网关、DNS、DHCP等。
- `/etc/passwd`:存储系统中所有的用户账户信息,包括用户名、用户ID、主目录等等。
- `/etc/group`:存储系统中的所有用户组信息,包括组名、组ID、组成员等等。
- `/etc/fstab`:存储系统中所有文件系统的挂载点信息和属性,包括磁盘分区、NFS、CD-ROM等。
- `/etc/sudoers`:存储 `sudo` 命令的相关配置信息,包括哪些用户可以通过 `sudo` 执行哪些命令等。
- `/etc/ssh/sshd_config`:存储 `sshd` 服务的配置信息,包括SSH连接的安全设置、监听端口等。
- `/etc/crontab`:存储定时任务配置信息,包括需要执行的命令、执行的时间等。
当你想更改系统级别的设置和配置时,你经常需要在`/etc`目录下查找和编辑对应的配置文件。这些文件有可能是键值对形式的文本文件,也有可能是类似INI或XML的格式文件。这些配置文件通常具有详细的注释说明,以便用户即使不是专业人士,也能够进行基本的理解和修改。
总之,`/etc`目录包含了各种系统级别的配置文件,是系统中各种应用程序和服务所依赖的设置的存储位置。
9、/usr:
用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录
`/usr` 目录包含了系统的许多应用程序、库文件、文档和资源文件。与 `/`(根目录)不同,`/usr` 目录包含的大多数文件和目录都不是系统必需的,它们都是可选的、用户安装的软件和应用程序。
在 `/usr` 目录中,你可以找到以下一些常见的目录:
- - `/usr/bin`: 存放系统管理员和用户使用的二进制可执行文件;
- - `/usr/sbin`: 存放系统管理员使用的二进制可执行文件,需要 root 权限才能访问;
- - `/usr/lib`: 存放共享库文件,即许多程序共用的代码库;
- - `/usr/share`: 存放应用程序的资源文件、文档等共用数据文件;
- - `/usr/local`: 存放本地安装的软件及其相关的资源文件、文档等共用数据文件;
- - `/usr/include`: 存放头文件,包含了开发应用程序所需的一些标准 C/C++ 头文件。
需要注意的是,`/usr` 目录是一个非常重要的系统目录,在 Linux 系统中大部分软件和应用程序都是安装在该目录下的。你可以多次使用 `/usr` 子目录来组织和存放你的应用程序和资源文件等数据,如 `/usr/local/bin` 和 `/usr/local/lib`。与此类似,你也可以自定义 `/usr` 的其他子目录来满足自己特定的需求。
总之,`/usr` 目录包含了系统的许多应用程序、库文件、文档和资源文件。它是一个灵活、可定制的目录结构,可以被管理员和用户用于安装和管理应用程序及其相关的资源文件、文档和数据等。
9.1、/usr/local
这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
10、/boot:
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
主要用于存放启动所需的文件。这个目录的内容很少改变,一般只有在启动系统时才需要被读取。
`/boot`目录通常包含了以下内容:
- Bootloader(引导加载程序)
- `/boot`目录包含了引导加载程序(例如GRUB或LILO)所需的文件,包括内核镜像、引导加载程序配置文件(`grub.conf`或`menu.lst`)、引导加载程序可执行文件(例如`grub`或`grub2`文件)和模块(例如文件系统模块)等。在系统启动时,引导加载程序会从此目录读取这些文件并加载内核镜像,启动Linux系统。
- 内核镜像文件
- `/boot`目录包含了操作系统内核文件。这些文件通常被命名为`vmlinuz`或`bzImage`。内核文件是Linux操作系统中最重要的组件之一,负责系统的启动、设备驱动程序、性能优化和安全控制等。
在安装Linux系统时,`/boot`目录通常会被创建并分配一定的空间。如果你使用引导加载程序来引导系统,你就需要了解并管理`/boot`目录,确保其中的文件完好和充足,以便系统啊可正常启动。
总之,`/boot`目录包含了启动加载程序和内核镜像文件,是操作系统启动的关键所在。
11、/proc: process [不能动]
这是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
`/proc` 目录是 Linux 系统中的一个特殊目录,用于存储运行中的进程信息和系统信息,它并不是一个真实的文件系统,而是一个虚拟文件系统。
在 `/proc` 目录下,你可以看到以数字命名的很多子目录,这些数字实际上是系统中每个进程的唯一标识符(PID)。每个 PID 目录下都有一个 `status` 文件,该文件包含了该进程的状态信息,如进程 ID、进程状态、内存占用情况等。
此外,在 `/proc` 目录下还有许多其他有用的文件和目录,比如:
- - `cpuinfo`:记录了系统当前 CPU 信息;
- - `meminfo`:记录了系统当前内存使用情况;
- - `loadavg`:记录了系统的负载情况;
- - `filesystems`:记录了系统当前支持的文件系统;
- - `uptime`:记录了系统的运行时间等。
对于管理员和开发者来说,`/proc` 目录是非常有用的一个调试和分析工具。你可以通过检查 `status` 文件和其他一些信息,了解每个进程正在做的事情,查看系统资源的使用情况,以及了解其他系统工作和状态的相关信息。
总之,`/proc` 目录用于存储运行中的进程信息和系统信息。它是一个虚拟文件系统,提供了许多有用的调试和分析工具,帮助你更好地理解系统运行的情况。
12、/srv:service [不能动]
service的缩写,该目录存放一些服务启动之后需要提取的数据
13、/sys:system [不能动]
这是Linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统 sysfs
14、/tmp:temporary
`/tmp` 目录用于存放临时文件和临时目录。这些文件和目录通常只在特定的任务或者会话期间使用,不需要保存到系统中,因此经常需要清空 `/tmp` 目录以释放磁盘空间。
在 `/tmp` 目录中,你可以存储各种临时文件,包括日志文件、缓存文件、临时副本等等。有些应用程序可能也会将它们的一些临时文件存储在 `/tmp` 目录中。因此,`/tmp` 目录是一个非常活跃且需要定期清理的目录。
需要注意的是,`/tmp` 目录是一个公共目录,任何用户都可以在其中存储临时文件。这也意味着,`/tmp` 目录的权限通常设置为 777,任何人都可以读取、写入和执行其中的文件。出于安全考虑,一些 Linux 系统管理员会根据自己的需求和策略对 `/tmp` 目录进行限制和保护。
总之,`/tmp` 目录用于存放临时文件和临时目录。这些文件和目录通常只在特定的任务或者会话期间使用,不需要保存到系统中,因此需要定期清理。由于它是公共目录,因此需要特别注意它的权限和相关安全策略。
15、/dev:device
类似于Windows的设备管理器,把所有的硬件用文件的形式存储
包含了系统中所有的设备文件,包括硬件设备、输入输出设备、网络设备、虚拟设备等。在Linux中,所有的设备文件都被认为是文件,你可以像读/写普通文件一样读/写设备文件。设备文件通常是Linux下应用程序与硬件之间的桥梁,应用程序通过读写设备文件,实现与硬件的交互。
`/dev` 目录中的设备文件可以分为以下两类:
1. 块设备文件:
块设备是指能够按照固定长度的块进行读写的设备,如硬盘、U盘、SSD等。块设备通常可以通过文件系统进行格式化和挂载。
在 `/dev` 目录下,块设备文件名通常以 `sd`(如 `sda`、`sdb`)、`hd`(如 `hda`、`hdb`)等前缀为标识,而后面的数字表示不同的设备序号。
2. 字符设备文件
字符设备是指以字符为单位进行读写的设备,如鼠标、键盘、串口等。字符设备通常不能被格式化和挂载,也没有文件系统。
在 `/dev` 目录下,字符设备文件名通常以 `tty`(如 `tty1`、`tty2`)、`sda`(如 `sda1`、`sda2`)等前缀为标识,而后面的数字表示不同的设备序号。
需要注意的是,`/dev` 目录中的设备文件并不是真正的硬件设备文件,而是 Linux 内核通过驱动程序模拟出来的虚拟文件。实际上这些设备文件只是一些接口,实现了将硬件设备暴露给用户空间程序的目的。
总之,`/dev` 目录包含了所有的设备文件,为 Linux 系统的设备管理提供了基础。
16、/media:
Linux系统会自动识别一些设备,例如U盘,光驱等,当识别后,Linux会把识别的设备挂载到这个目录下
`/media` 目录是 Linux 系统中的一个特殊目录,主要用于挂载可移动设备,如 USB 闪存、一般的 U 盘、SD 卡、DVD-ROM 和其他可移动设备。
当你插入一个可移动设备时,通常会自动在`/media`目录下创建一个与设备名称相对应的子目录,并将设备挂载到该目录下,以便用户可以访问设备中的内容。当设备被拔出时,该目录会被卸载并删除。
举个例子,假如你将一个 USB 闪存插入 Linux 系统中,现在该设备名为 `/dev/sdb`,Linux 会自动将该设备挂载到`/media/usb0`(或其他以设备名称为名的目录中),你就可以通过浏览 `/media/usb0` 目录来访问该设备中的文件。
需要注意的是,当你使用 `mount` 命令手动挂载设备时,如果设备挂载在 `/media` 目录下,你需要手动创建一个子目录,并将设备挂载在该目录下。否则,你可能会覆盖系统自动在 `/media` 目录下创建的设备目录,导致数据不可访问。
总之,`/media` 目录是 Linux 系统中一个特殊目录,用于挂载可移动设备。当你插入一个可移动设备时,系统会自动在该目录下创建一个与设备名称相对应的子目录,并将设备挂载到该目录下,以便用户可以访问设备中的内容。
17、/mnt:
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。D:/myshare
18、/opt:
一般将软件的安装文件放到该目录下
这是给主机额外安装软件所摆放的目录,例如安装oracle数据库就可以放到该目录下,默认为空
`/opt` 目录是 Linux 系统中的一个特殊目录,用于安装和存储第三方应用程序、组件和依赖库,它是一些大型的独立软件包的默认安装位置。
在 `/opt` 目录下,通常会存在一个或多个带有软件包名称的子目录,这些子目录用于组织安装的第三方软件包及其相关文件
需要注意的是,`/opt` 目录通常只用于存储独立软件包的主要二进制和库文件,而配置文件和其他资源文件则存储到 `/etc`、`/usr/share` 和 `/var` 等目录下。
总之,`/opt` 目录是 Linux 系统中的一个特殊目录,主要用于存储第三方应用程序和依赖库的安装组件。由于第三方应用程序和软件包通常是独立于系统的,因此将它们放在 `/opt` 目录下是有很多好处的。
19、/var:
这个目录中存放着不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
`/var` 目录用于存储变化的文件数据,包括日志文件、邮件、打印机队列、缓存、临时文件、数据库文件等等。该目录下的文件通常是不断变化和写入的,因此它的大小和内容是随着时间而变化的。
`/var` 目录下包含了一些常见的目录:
- - `/var/log`:存放日志文件,包括系统日志、安全日志、应用程序日志等;
- - `/var/spool`:存放打印机队列、邮件队列等;
- - `/var/cache`:存放缓存文件,包括软件包缓存文件和其他应用程序的缓存文件等;
- - `/var/run`:存放运行时数据,如 PID 文件(记录运行中进程的 ID 号)等;
- - `/var/tmp`:存放临时文件,与 `/tmp` 目录相似,但该目录下的文件较为持久。
需要注意的是,`/var` 目录下的文件通常是对系统的正常运行非常重要的,因此需要定期进行备份和清理,以避免出现磁盘空间不足、系统运行缓慢等问题。同时,一些应用程序或服务也可能需要对 `/var` 目录下的子目录进行特定的权限设置,以确保系统的安全性和可用性。
总之,`/var` 目录用于存储变化的文件数据,包括日志文件、邮件、打印机队列、缓存、临时文件、数据库文件等。它的内容不断变化,并且对系统正常运行非常重要。因此需要定期备份和清理,并且对其中的文件应该进行特定的权限设置和安全策略。
20、/selinux:security-enhanced linux
SELinux是一种安全子系统,他能控制程序只能访问特定文件,有三种工作模式,可以字形设置
21、/run:
在 Linux 文件系统中,/run
目录是一个临时文件系统(tmpfs),用于存储系统运行时需要在启动过程中创建的临时运行时数据。这个目录通常在系统引导时创建,并在系统关机时清空。/run
目录用于存储各种运行时信息,如 PID 文件、socket 文件以及其他临时文件。它可以在不同的 Linux 发行版中承担不同的作用,具体作用如下:
-
运行时文件存储:
/run
目录用于存储运行时需要在启动过程中创建的临时文件,这些文件可能包括进程 ID 文件、锁文件、套接字文件等。 -
替代 /var/run 目录:在较早的 Linux 发行版中,
/var/run
目录用于存储运行时信息。然而,为了提高性能并减少对持久存储设备的写入,现代 Linux 系统使用tmpfs
文件系统将临时运行时数据存储在/run
目录中。 -
系统服务文件:一些系统服务在运行时需要在
/run
目录中创建运行时文件或套接字文件,以便其他进程可以与这些服务进行通信。
总体而言,/run
目录是一个临时文件系统,用于存储系统运行时所需的临时数据,提供了一种高效且可靠的方式来处理系统运行时的临时信息和数据。
第四章、远程登录Linux服务器
一、概述
Linux服务器是开发小组共享
正式上线的项目是运行在公网
因为程序员需要远程登录到Linux进行项目管理或者开发
远程登录客户端有xshell和xftp,我们学习使用xshell和xftp,其他的远程工具大同小异
二、远程登录Linux:Xshell
1、介绍
Xshell是目前最好的远程登录到Linu操作的软件,流畅的速度并且完美解决了中文乱码的问题,是目前程序员首选的软件
Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的
2、下载,安装,配置和使用
二、远程上传下载文件:Xftp
1、介绍
是一个基于Windows平台的功能强大的SFTP,FTP文件传输软件,使用了Xftp以后,Windows用户能安全地在Unix/Linux和Windows PC之间传输文件
2、下载,安装,配置和使用
3、中文乱码问题解决
第五章、vi和vim编辑器
一、概述
Linux系统会内置vi文本编辑器
vim具有程序编辑的能力,可以看作是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补充,编译及错误跳转等方面编程的功能特别丰富,在程序员中被广泛使用。
1、vi和vim的区别和联系
vi
和 vim
都是在 Linux 系统中常用的文本编辑器,它们之间有着密切的联系,但也有一些区别。具体来说:
-
联系:
vim
实际上是vi
(Vi IMproved)的升级版本,它保留了vi
的大多数特性,并在此基础上增加了许多新功能和改进。- 从外部使用角度看,
vim
可以被视为vi
的扩展版本,它具有与vi
类似的编辑模式,命令和快捷键。
-
区别:
vim
拥有比vi
更多的特性和功能,包括语法高亮、自动补全、插件支持等,使得它成为一个更加功能丰富的文本编辑器。- 与
vi
相比,vim
提供了更多的定制选项和配置能力,使得用户可以根据自己的喜好和需求来调整编辑器的行为。
因此,尽管 vi
和 vim
有着密切的联系,但 vim
作为 vi
的改进版本,提供了更多的功能和定制选项,使得它成为了 Linux 系统中首选的文本编辑器之一。在大多数情况下,如果系统中安装了 vim
,则可以通过 vi
命令来启动 vim
编辑器。
2、安装vim文本编辑器
二、vi和vim常用的三种模式
1、普通模式(Normal mode)
又称一般模式
这是 Vim 的默认模式。在普通模式下,按键会被解释为命令,用于移动光标、复制粘贴文本、删除文本、搜索替换等操作。在这种模式下,用户可以执行大多数编辑器的操作,如复制、粘贴、删除、移动光标等。要进入普通模式,可以通过按下 Esc
键来切换到普通模式。
2、插入模式(Insert mode)
又称编辑模式
在插入模式下,用户可以像普通文本编辑器一样输入文本。要进入插入模式,可以按下 i
键(在光标前插入文本)、a
键(在光标后插入文本)等键。在插入模式下,按下 Esc
键可以退出插入模式并返回到普通模式。
3、命令行模式(Command mode)
在命令行模式下,用户可以输入各种命令来保存文件、退出编辑器、执行搜索替换操作等。要进入命令行模式,可以按下 :
键。在命令行模式下,用户可以输入不同的命令来执行特定的编辑器操作。要返回普通模式,可以按下 Esc
键。
三、三种模式关系图
四、普通模式
除特别说明外,以下命令均在普通模式中输入
1、进入编辑器(以下命令在终端输入)
vim filename
: 打开或新建文件,并将光标置于第一行首vim +n filename
:打开文件,并将光标置于第n行
首vim + filename
:打开文件,并将光标置于最后一行首vim +/pattern filename
:打开文件,并将光标置于第一个与pattern匹配的串处
2、普通模式操作
1、移动光标
j
:向下nj
: 向下移动 n 行k
:向上h
:向左l
:向右0
:数字0
,到行首^
:到行首第一个字符,如果前面有空格的话$
:到行尾n$
:光标移至当前光标处第n-1行尾gg
:快速到文件头G
:快速到文件尾50G
或者 50 shift + g:跳转到第 50 行n+
:光标下移n行n-
:光标上移n行w
:光标跳到下个字符的开头e
:光标跳到当前字符的字尾b
:光标回到当前字符的开头#l
:光标移到该行的第#个位置,如:5l,56l。H
:光标移至屏幕顶行M
:光标移至屏幕中间行L
:光标移至屏幕最后行
注意:
请不要在插入模式
进行光标移动,效率很低下
2、复制
yy
:复制一行#yy
:例如,6yy
表示拷贝从光标所在的该行往下数6行文字
8yy
:向下复制8行
3、剪切
x
:向后剪切一个一个字符,如果是在行尾,则为向前剪切4x
:剪切4个- dd:剪切一行
4、删除
dd
:删除一行#dd
:从光标所在行开始删除#行
100dd
:删除100行dw
:删除一个单词
注意:
删除的内容会放到剪贴板,按p
即可粘贴到其他地方。
5、粘贴
p(小写)
:粘贴复制或剪切的内容,将缓冲区内的字符贴到光标所在位置。
在光标下一行粘贴
注意:所有与y
有关的复制命令都必须与p
配合才能完成复制与粘贴功能5p
:将复制或剪切的内容粘贴5次P(大写)
:在光标上一行粘贴(插入)
6、撤销
u或者u{n}
:撤销一次或n次操作
7、查找字符串
/ 关键字
:从光标开始处向文件尾
搜索,先按/
键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n
会往后寻找到要的关键字为止。? 关键字
:从光标开始处向文件首
搜索,先按?
键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n
会往前寻找到要的关键字为止在普通模式下,按下
/
直接进入查找,输入相应的字符串按确定即可
n
:查找下一个匹配N
:查找上一个匹配2n
:查找下面第二个匹配
3、从普通模式进入插入模式
i, I
进入插入模式Insert mode
:i
为从目前光标所在处输入
,I
为在目前所在行的第一个非空格符处开始输入
;a, A
进入插入模式Insert mode
:a
为从目前光标所在的下一个字符处开始输入
,A
为从光标所在行的最后一个字符处开始输入
;o, O
进入插入模式Insert mode
:o
为在目前光标所在的下一行处输入新的一行
;O
为在目前光标所在处的上一行输入新的一行
4、从普通模式进入命令模式
在普通模式下,输入
:
即可进入
五、插入模式
以下命令请在插入模式使用
1、从插入模式进入普通模式
按ESC键进入普通模式
六、命令模式
以下命令请在命令模式使用
1、替换字符串
全文替换
# 语法
:%s/旧字符串/新字符串/g
2、显示隐藏行号
:set number
或者:set nu
显示行号:set nonumber
或者:set nonu
隐藏行号#
:#
号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15
,再回车,就会跳到文章的第15行
2、退出编辑器
wq
:保存当前文件并退出或者x
wqa
:保存所有文件并退出q!
: 不保存,强制退出qa!
: 有多个文件被打开,同时退出
第六章、开机,重启和用户登录注销
一、关机,重启命令
1、shutdown -h now
-h:halt,终止
立刻进行关机
2、shutdown -h number(单位:minute)
在n分钟后关机
只输入shutdown,默认会在1分钟后关机,并给所有的登录到此服务器的用户发送消息
3、shutdown -r now
立刻重启计算机
4、halt
立刻关机
等同于:shutdown -h now
5、reboot
立刻重启计算机
6、sync
把内存数据同步到磁盘
7、注意事项
不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
目前的shutdown/reboot/halt 等命令均已经在关机前自动进行了sync
二、用户登录和注销
1、su - 用户名:切换用户,同时切换当前用户的家目录中
命令全称:switch user
登录时尽量少用root账户登录,因为它是系统管理员,最大的权限,避免操作失误,可以使用普通用户登录,登录后再使用“su - root”命令来切换成系统管理员身份
root --》 普通用户:不需要密码
普通用户 --》root:需要密码
从权限高的用户切换到权限低的用户,不需要输入密码,反之需要
2、su 用户名:切换用户,但是不会切换当前所处的位置
3、logout / exit:注销当前用户
在提示符下输入logout或者exit即可注销用户
4、注意事项
logout注销指令在图形运行级别下是无效的,在运行级别3下有效
必须在xshell等远程连接软件终端输入,不能在Linux本地终端中使用
第七章、用户管理
一、概述
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
二、添加用户
1、useradd 用户名
当创建用户成功后,会自动的创建和用户同名的家目录 /home/xxx
2、useradd -d 指定目录 用户名
给新创建的用户指定家目录
3、useradd -g 指定用户主组的名称或id 用户名
三、指定/修改密码
1、passwd 用户名
不加用户名则默认给当前登录的账户修改密码,也可以给root账户修改密码
四、删除用户
1、userdel 用户名
只删除用户,但保留家目录,一般情况下保留家目录
2、userdel -r 用户名
删除用户以及用户主目录
五、查询用户信息
1、id 用户名
用户不存在时返回无此用户
六、查看当前用户/ 登录用户
1、whoami / who am i
七、用户组
1、介绍
类似于角色, 系统可以对有共性/ 权限 的多个用户进行统一的管理
在 Linux 系统中,用户组是一种用于管理和组织用户的机制。用户组允许管理员将一组用户归类到一个共同的组中,从而简化用户权限管理和文件共享。以下是关于 Linux 系统中用户组的一些关键信息:
-
权限管理:通过将用户放置在不同的用户组中,系统管理员可以更有效地管理用户的权限。文件和目录可以设置为特定的用户组访问权限,从而允许或限制特定组中的用户对这些文件和目录的访问。
-
资源共享:用户组使得共享资源变得更加容易。管理员可以通过将文件或目录的所有权分配给特定的用户组,来实现多个用户对文件和目录的共享访问和管理。
-
权限继承:当用户创建新文件或目录时,文件或目录会继承创建者的用户组。这样,其他属于相同用户组的用户可以共享这些文件或目录,并具有相应的访问权限。
-
访问控制:通过对用户组分配适当的权限,可以限制对敏感文件和目录的访问。只有属于特定用户组的用户才能访问特定的资源。
在 Linux 系统中,用户组通常由管理员创建和管理,用于组织和管理用户,并确保文件和资源的安全性和可访问性。
2、新增组
1、groupadd 组名
用户创建的组 id 是从1000(包括1000)开始的
创建群组时不指定群组的id,系统会自动从最大的id上面+1分配
2、groupadd -g Gid 组名
参数:-g GID 创建群组时指定群组的id号码,1000以后未被系统使用过的id号码
3、删除组
1、groupdel 组名
如果群组中还有用户,不能删除这个群组
4、修改用户的组
1、usermod -g GID/组名 用户名
修改用户所在的群组的id号码,必须是系统中已存在的GID或组名
切换组后用户就不在原来的组中了,而是切换到新组中了
2、usermod -d 目录名 用户名
改变该用户登录的初始目录
注意:用户需要有进入到新目录的权限
八、用户和组相关文件
1、/etc/passwd文件
用户(user)的配置文件,记录用户的各种信息
2、/etc/shadow文件
口令(密码)的配置文件
3、/etc/group文件
九、shell解释器
在计算机科学中,"shell" 是指一种提供用户与操作系统内核交互的命令行界面(CLI)。它是用户与操作系统之间的接口,允许用户执行各种操作,如运行程序、管理文件系统、处理数据等。shell 也可以理解为用户与操作系统之间的命令解释器,它解释用户输入的命令并将其传递给操作系统执行。
在类 Unix 操作系统(如 Linux、macOS 等)中,常见的 shell 包括以下几种:
-
Bash(Bourne Again Shell):Bash 是 Linux 系统中最常见的 shell,也是大多数 Linux 系统默认的 shell。它是对 Bourne Shell 的扩展,提供了更多的功能和特性。
-
Sh(Bourne Shell):Bourne Shell 是 Unix 系统中最早的一种 shell,它是许多后续 shell 的基础。
-
Csh(C Shell):C Shell 提供了一些与 C 语言类似的语法特性,如 C 风格的控制结构和命令别名。
-
Ksh(Korn Shell):Korn Shell 是 Bourne Shell 的改进版本,它引入了许多新特性和功能,如命令历史、命令补全等。
-
Zsh(Z Shell):Zsh 是 Bash 和 Ksh 的扩展版本,提供了更多的特性和功能,如自动补全、语法高亮等。
这些不同类型的 shell 允许用户以不同的方式与操作系统进行交互和管理。用户可以根据自己的偏好选择适合自己的 shell 来进行操作系统管理和任务处理。
第八章、运行级别
一、概述
常用的运行级别是3和5,也可以指定默认运行级别
在 Linux 系统中,运行级别(runlevel)代表系统所处的工作状态或操作模式。它定义了系统启动时运行的服务和进程,以及用户可以访问的功能。不同的运行级别对应着不同的系统配置,例如单用户模式、多用户模式、图形界面模式等。在传统的 SysVinit 系统中,常见的运行级别包括以下几种:
1、运行级别 0
系统关闭。在运行级别 0 下,系统会关闭所有服务并停止运行。
2、运行级别 1
单用户模式。在运行级别 1 下,系统只允许一个用户登录,所有服务都会被停止,用于系统维护和故障排除。找回丢失密码
3、运行级别 2
多用户模式,没有网络连接。在运行级别 2 下,系统允许多个用户登录,但没有提供网络连接服务。
4、运行级别 3
多用户模式,有网络连接。在运行级别 3 下,系统允许多个用户登录,并提供网络连接服务。
5、运行级别 4
保留未使用,用户可以根据需要自定义其功能。
6、运行级别 5
图形界面模式。在运行级别 5 下,系统提供了图形界面环境,允许用户通过图形界面进行操作。
7、运行级别 6
系统重启。在运行级别 6 下,系统会重新启动。
在现代 Linux 系统中,通常会使用 Systemd 或其他类似的初始化系统来管理系统的启动和运行级别。这些系统可能有不同的运行级别定义和配置方式,但概念上与传统的 SysVinit 运行级别类似。
二、init 运行级别
1、init 3
切换到运行级别3
2、init 5
切换到运行级别5
三、设置默认运行级别
设置后需要重启,重启则显示为默认运行级别
1、CentOS7后运行级别说明
在centos以前,/etc/inittab文件中
现在进行了简化
- multi-user.target:analogous to runlevel 3
- graphical.target:analogous to runlevel 5
2、查看当前默认运行级别
systemctl get-default
3、设置默认运行级别
systemctl set-default 运行级别.target
四、找回/重置 root密码
首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。如图
进入编辑界面,使用键盘上的上下键把光标往下移动,找到以““Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh。如图
接着,输入完成后,直接按快捷键:Ctrl+x 进入单用户模式。
接着,在光标闪烁的位置中输入:mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键(Enter)。如图
在新的一行最后面输入:passwd, 完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可(韩顺平提示: 密码长度最好8位以上,但不是必须的), 密码修改成功后,会显示passwd.....的样式,说明密码修改成功
接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel(注意:touch与 /后面有一个空格),完成后按键盘的回车键(Enter)
继续在光标闪烁的位置中,输入:exec /sbin/init(注意:exec与 /后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(韩顺平提示:这个过程时间可能有点长,耐心等待),完成后,系统会自动重启, 新的密码生效了
第九章、文件目录类
一、帮助指令
在 Linux 系统中,有几种常用的命令可以用来获取帮助信息。这些命令可以帮助您了解如何使用特定命令、程序或工具的详细信息。以下是几个常用的获取帮助信息的命令:
1、man
基本语法:man[命令或配置文件] (功能描述:获取帮助信息)
用于查看命令的手册页。例如,要查看
ls
命令的手册页,可以执行:在Linux中,隐藏文件是以 . 开头的,选项可以组合使用比如:ls -al /root
man ls
2、help
基本语法:help命令(功能描述:获得shell内置命令的帮助信息)
用于查看内置命令的帮助信息。例如,要查看
bash
的内置命令的帮助信息,可以执行:
help command_name
3、--help
许多命令都支持
--help
选项,用于显示命令的简要帮助信息。例如,要查看ls
命令的简要帮助信息,可以执行:
ls --help
4、info
类似于
man
命令,用于查看命令的信息。某些程序的信息可能在info
中提供更详细的帮助信息。例如,要查看info
命令的信息,可以执行
info info
这些命令可以帮助您获取有关命令、程序或工具的详细信息和使用说明。根据您需要获取的帮助内容的具体情况,您可以选择使用适当的命令来获取所需的帮助信息。
二、pwd
语法:pwd(print working directory)
描述:显示当前工作目录的绝对路径
三、ls
1、语法
语法:ls [选项] [目录或文件] (list)
作用:显示指定工作目录下的内容(列出工作目录所含之文件及子目录)
2、参数
-l:用于文件 / 目录的完整信息
-a:用于显示目录中的所有文件,包括隐藏文件
-h:文件大小采用便于阅读的方式显示
3、文件详细信息
- 第一部分:
- 第一小部分:第一列:表示文件的属性,d表示是目录,-表示是文件,l表示软链接
-
ls -l
命令在 Linux 中用于显示文件和目录的详细信息。在输出结果的第一列中,第一个字符表示文件的类型和权限。这个字符通常会是以下几种: -
(短横线): 表示这是一个普通文件。d
: 表示这是一个目录。l
: 表示这是一个符号链接(软链接)。c
: 表示这是一个字符设备文件。b
: 表示这是一个块设备文件。-
让我解释一下这些标识:
- 普通文件(-): 这是最常见的文件类型,用于存储文本、二进制数据或程序等。
- 目录(d): 表示这是一个目录,用于存储文件和其他目录。
- 符号链接(l): 这是一个指向另一个文件或目录的链接,类似于 Windows 中的快捷方式。
- 字符设备文件(c): 用于访问设备,比如键盘、鼠标等。
- 块设备文件(b): 用于访问设备,比如硬盘、固态硬盘等。
-
通过这个标识符,你可以快速了解每个文件或目录的类型。在
ls -l
输出的第一列中,这个标识符是指明文件类型的。例如,如果这个字符是-
,表示这是一个普通文件;如果是d
,表示这是一个目录;如果是l
,表示这是一个符号链接,以此类推。
-
- 第二小部分:二三四列,表示文件的拥有者/所有者对应的权限信息,r表示可读,w表示可写,x表示可执行,-表示没有权限
- 第三小部分:五六七列,表示所在的群组中其他用户对应的权限信息,r表示可读,w表示可写,x表示可执行,-表示没有权限
- 第四小部分:八九十列,表示剩下的其他组的其他用户对应的权限信息,r表示可读,w表示可写,x表示可执行,-表示没有权限
- 第一小部分:第一列:表示文件的属性,d表示是目录,-表示是文件,l表示软链接
- 第二部分:表示硬链接数,创建一个硬链接+1,删除一个硬链接 -1
- 对于文件来说,就是1
- 对于目录来说,就是目录下的子目录数量(只是子目录,和子文件无关)
- 第三部分:所有者
- 第四部分:所在的群组
- 第五部分:文件大小,单位是字节(B)
- 8bit=1Byte(字节)
- 1024B=1KB
- 1024KB=1M
- 1024M=1G
- 1024G=1T
- 第六部分:文件最近的修改日期,如果没有修改日期就是创建日期
- 第七部分:文件或者目录的名称
三、cd
1、语法
语法:cd [参数] (change directory)
作用:切换指定目录
. :表示当前目录
.. :表示上一级目录
cd ~ 或者 cd :回到自己的家目录
cd .. :回到当前目录的上一级目录
在 Linux 系统中,文件路径可以分为绝对路径和相对路径,这两种路径形式都用于定位文件或目录在文件系统中的位置。下面对它们进行简要解释:cd ../../root
2、绝对路径
绝对路径:绝对路径是从文件系统根目录(/)开始的完整路径,用于准确定位文件或目录的位置。它包括从根目录到目标文件或目录的完整路径信息。例如,/home/user/Documents/file.txt
是一个绝对路径,它指定了从根目录开始到 file.txt
的完整路径。
3、相对路径
相对路径:相对路径是相对于当前工作目录的路径,它不包括文件系统的根目录,而是从当前位置开始计算路径。相对路径不是以根目录开头,而是基于当前工作目录进行解释。例如,如果当前工作目录是 /home/user/Documents/
,则相对路径 file.txt
表示 Documents
目录下的 file.txt
文件。
相对路径和绝对路径的区别在于其基准点不同,一个是文件系统的根目录,另一个是当前工作目录。选择使用绝对路径还是相对路径取决于您需要的具体文件或目录的位置和您的工作环境。
四、mkdir
1、语法
语法:mkdir [选项] 目录名(make directories)
作用:用于创建目录
2、参数
-p:创建多级目录
-v:显示创建信息
-m:创建是添加权限
使用掩码法设置权限,例如777 表示rwx
3、特殊用法
mkdir a{1..10}
mkdir -pv a/{b,c}
五、rmdir
1、语法
语法:rmdir 目录名称(remove empty directories)
作用:删除空目录
删除非空目录时使用 rm -rf 删除
2、只能用于删除空目录,非空目录不能删除
六、touch
1、语法
语法:touch [OPTION]... FILE...
作用:创建空文件
七、cp
1、语法
语法:cp [选项] source dest
作用:拷贝文件到指定目录
2、参数
-r:recursion 递归复制整个文件夹
3、强制覆盖不提示
\cp 源文件 目标地址
八、rm
1、语法
语法:rm [选项] 要删除的文件或目录
作用:删除文件或目录
2、参数
-r:递归删除整个文件夹
rm默认删除文件,加上 -r 参数后才会删除目录
-f:强制删除不提示
九、mv
1、语法
作用:移动文件与目录或重命名
语法:
重命名: mv oldNameFile newNameFile
移动文件:mv /temp/movefile /targetFolder
案例一:将/home/cat.txt 文件 重新命名为 pig.txt
案例二:将/home/zwj/hello.txt 文件移动到/home/jzq/ 目录下
案例三:将/home/jzq/hello.txt文件移动到/home/zwj/目录下,并改名helloworld.txt
案例四:移动整个目录,比如将/home/animal 移动到 /home/jzq中
十、cat
1、语法
作用:查看文件内容
语法:cat [选项] 要查看的文件
2、参数
-n:显示行号
案例一:查看/etc/profile 文件内容,并显示行号
3、使用细节
cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more
管道命令 | 相当于将前面的结果交给后面的 指令来执行
进行交互:
- 回车:一行一行看
- 空格:翻页看
十一、more
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明:
1、语法
more 要查看的文件
2、操作说明
空格键 --》 代表向下翻一页
回车(enter)--》代表向下翻一行
q --》代表立刻离开more,不再显示该文件内容
ctrl + F --》 向下滚动一屏
ctrl + B --》 返回上一屏
= --》 输出当前行的行号
:f --》 输出文件名和当前行的行号
十二、less
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在现实文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要动态加载内容,对于显示大型文件具有较高的效率
1、语法
less 要查看的文件
2、操作说明
空格键 --》向下滚动一行
pagedown --》 向下翻动一页
pageup --》 向上翻动一页
/字符串 --》 向下搜寻字串功能;n:向下查找;N:向上查找
?字符串 --》 向上搜寻字串功能;n:向上查找;N:向下查找
q --》 退出less程序
十三、echo
1、语法
echo:输出内容到控制台
语法:echo [选项] [输出内容]
案例一:使用echo 指令输出环境变量
案例二:使用echo 指令输出helloworld
十四、head
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
1、语法
head 文件 (查看文件头10行内容)
2、参数
-n 数字:显示内容的行数
案例一:查看/etc/profile 的前面5行代码
十五、tail
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
1、语法
tail [选项] 文件 (查看文件尾10行内容)
tail -f 文件 实时追踪该文档的所有更新,会占用一个终端进程
2、参数
-n 数字 :显示内容的行数
-f:实时动态追踪文件的所有更新
案例一:查看/etc/profile最后5行代码
十六、> 指令和 >>指令
需要写入的文件不存在则会自动创建
1、>指令:输出重定向,覆盖写入
ls -l > 文件 将列表的内容写入到文件中(覆盖写)
cat 文件1 > 文件2 将文件1的内容覆盖到文件2
2、>>指令:输出重定向,追加写入
ls -al >> 文件 将列表的内容追加到文件的末尾
echo “内容” >> 文件 将所写的内容追加到文件中
案例一:将/home 目录下的文件列表 写入到/home/info.txt中
案例二:将当前日历信息追加到 /home/mycal.txt文件中
十七、ln
link 软链接也称为符号链接,类似于Windows里的框架方式,主要存放了链接其他文件的路径
1、软链接
ln -s [原文件或目录] [软链接名] 给原文件创建一个软链接
案例一:在/home目录下创建一个软链接 myroot,连接到/root目录
案例二:删除软链接 myroot
rm -rf /home/myroot myroot后面不能加/,因为加上/表示为一个文件夹,不加/表示为一个文件
2、硬链接
在 Linux 中,硬链接是文件系统中的一种链接类型,允许一个文件拥有多个文件名,这些文件名指向同一个索引节点(inode)。索引节点是文件系统中存储文件或目录元数据的结构,包含了文件的属性信息和数据块的位置等。
硬链接是通过文件系统中的索引节点来实现的,不同于符号链接(符号链接是一个指向文件的路径),硬链接直接指向索引节点,因此无法跨越不同的文件系统(不同的分区或挂载点)。在同一个文件系统内,硬链接可以让多个文件名指向同一个文件的数据块,这样就可以通过不同的文件名访问相同的内容,而且这些文件名之间没有主次之分。
在使用硬链接时,需要注意以下几点:
- 硬链接只能针对文件,不能针对目录。
- 硬链接不能跨越文件系统。
- 删除原文件不影响其他硬链接文件的内容。
- 硬链接不会增加文件的磁盘使用量,因为它们共享相同的数据块。
- 硬链接无法区分哪个是原始文件,所有的文件都是平等的。
在终端中,你可以使用 ln
命令创建硬链接。例如:
ln source_file link_file
这会在当前目录下创建一个名为 link_file
的硬链接,指向名为 source_file
的原始文件。如果你修改了 source_file
,link_file
中的内容也会发生相应变化,因为它们实际上指向同一个数据块。
要注意,硬链接不能跨越不同的文件系统。创建硬链接时,源文件和链接文件必须在同一个文件系统内才能成功创建硬链接。
2.1、查看硬链接数
要查看一个文件的硬链接数,你可以使用 ls
命令的 -l
选项,或者使用 stat
命令。
使用 ls 命令:
ls -l filename
这个命令会显示文件的详细信息,包括文件的硬链接数。在 ls -l
输出的第二列就是文件的硬链接数。
使用 stat 命令:
stat filename
stat
命令会显示文件的详细统计信息,其中包括文件的硬链接数。输出中的 Links:
字段表示文件的硬链接数。
例如,假设你有一个名为 myfile.txt
的文件,可以通过以下方式查看它的硬链接数:
ls -l myfile.txt
# 或者
stat myfile.txt
输出中的其中一部分会显示类似这样的信息:
-rw-r--r-- 1 user group 4096 Dec 10 12:00 myfile.txt
上述示例中,1
表示这个文件有 1 个硬链接。如果这个文件有多个硬链接,ls -l
或 stat
命令会显示对应的硬链接数目。
十八、history
查看已经执行过历史命令,也可以执行历史命令
1、语法
history 功能描述:查看已经执行过的历史命令
案例一:显示所有的历史命令
案例二:显示最近使用过的10个命令
案例三:执行历史编号为1112的命令
第十章、时间日期类
一、date指令
显示当前日期
1、查询日期
date 功能描述:显示当前时间
date +%Y 功能描述:显示当前年份
date +%m 功能描述:显示当前月份
date +%d 功能描述:显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" 功能描述:显示年月日时分秒
案例一:显示当前时间信息
案例二:显示当前时间年月日
案例三:显示当前时间年月日时分秒
2、设置日期
date -s 字符串时间
案例一:设置系统当前时间,比如设置成 2021-11-11 11:22:22
date -s "2021-11-11 11:22:22"
二、cal指令
查看日历指令
1、语法
cal [选项] 功能描述:不加选项,显示本月日历
案例一:显示当前日历
案例二:显示2020年日历
第十一章、搜索查找类
一、find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
1、语法
find [搜索范围] [选项]
2、选项说明
- -name 文件名 按照指定的文件名来查找文件
- -user 用户名 查找属于指定用户名的所有文件
- -size 文件大小 按照指定的文件大小查找文件
- 单位有k,M,G
- +n:大于
- -n:小于
- n:等于
案例一:按照文件名 根据名称查找/home 目录下的hello.txt文件
find /home/ -name hello.txt
案例二:按拥有者,查找/home目录下, 用户名为zwj的文件
案例三:查找整个Linux系统中文件大小超过200M的文件
二、locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统重所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate数据库
1、语法
locate 搜索文件
- 由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
2、安装updatedb命令
在CentOS 7中,updatedb
命令通常属于 mlocate
软件包。如果你的系统上尚未安装 mlocate
,你可以通过以下步骤在CentOS 7上安装 mlocate
软件包:
更新软件包索引:
sudo yum update
安装 mlocate 软件包:
sudo yum install mlocate
运行 updatedb 命令:
安装完成后,你应该可以直接运行 updatedb
命令了:
updatedb
updatedb
命令通常用于更新 locate
命令所使用的数据库,该数据库可用于快速搜索文件。安装了 mlocate
软件包后,updatedb
命令应该就可以在系统中使用了。
案例一:使用locate指令快速定位 hello.txt 文件所在目录
三、which指令
which
命令用于查找并显示命令的绝对路径,即给出在系统中可以执行的命令的位置。如果你想找到系统中特定命令的位置,可以使用 which
命令,例如:
which ls
上面的命令将显示 ls
命令在系统中的路径,以便你知道可执行文件的确切位置。
四、whereis指令
whereis
命令用于查找指定命令的二进制文件、源代码文件以及帮助文件的位置。它提供了更详细的信息,包括程序的可执行文件、源文件和帮助文档的位置。例如:
whereis gcc
这会显示 gcc
编译器相关文件的位置,包括可执行文件、源代码文件以及帮助文件所在的目录。
总的来说,which
主要用于查找可执行文件的路径,而 whereis
则提供了更多关于命令相关文件的位置信息。使用这两个命令可以帮助你找到特定命令或文件在系统中的位置。
五、grep指令 和 管道符号 |
grep 过滤查找,管道符,“|” 表示将前一个命令的处理结果输出传递给后面的命令处理
1、语法
grep [选项] 查找内容 源文件
2、选项
-n:显示匹配行及行号
-i:忽略字母大小写
案例一:在hello.txt文件中,查找“yes”所在行,并且显示行号
写法一:cat /home/hello.txt | grep -n "yes"
写法二:grep -n "yes" /home/hello.txt
第十二章、压缩和解压类
一、gzip 和 gunzip指令
用于压缩和解压缩 *.gz 文件
gzip 用于压缩文件,gunzip用于解压的
1、语法
gzip 文件 功能描述:压缩文件,只能将文件压缩为*.gz文件
gunzip 文件.gz 功能描述:解压缩文件命令,只能将 *.gz 压缩包解压
案例一:gzip压缩,将/home下的hello.txt文件进行压缩
案例二:gunzip解压缩,将/home下的hello.txt.gz文件进行解压缩
二、zip 和 unzip指令
用于压缩和解压缩 *.zip 文件
zip用于压缩文件,unzip用于解压文件,这个在项目打包发布中很有用
1、语法
zip -r 压缩包名.zip 文件名或目录名 功能描述:压缩文件或目录
- -r:递归压缩,即压缩目录
unzip -d 目录地址 压缩包名.zip 功能描述:解压缩文件
- -d 目录:指定解压后文件的存放目录
案例一:将/home下的所有文件进行压缩成myhome.zip
zip -r myhome.zip /home/*
等同于
zip -r myhome.zip /home/
将home目录本身及其包含的文件和子文件夹都压缩
案例二:将myhome.zip解压到/opt/temp目录下
unzip -d /opt/temp myhome.zip
三、tar指令
tar既是打包压缩指令,也是解压缩指令,最后打包后的文件是 .tar.gz 文件
1、语法
tar [选项] 压缩文件名.tar.gz 打包的内容
功能描述:打包目录,压缩后的文件格式 tar.gz
2、选项
-c:产生.tar打包文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解包 .tar 文件
-C:解压到指定目录中
案例一:压缩多个文件,将/home/pig.txt 和 /home/cat.txt 压缩成pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
压缩时也会将路径包括目标文件一块压缩进去,解压后会有home目录
案例二:将/home的文件夹压缩成 myhome.tar.gz
tar -zcvf myhome.tar.gz /home/
案例三:将pc.tar.gz 解压到当前目录。切换到/opt
cd /opt
tar -zxvf /home/pc.tar.gz
案例四:将myhome.tar.gz 解压到/opt/temp2目录下
mkdir -v temp2
tar -zxvf /home/myhome.tar.gz -C /opt/temp2
第十三章、组管理和权限管理
一、文件概念
在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中的文件文件都有所有者,所在组,其他组的概念
在 Linux 文件系统中,每个文件和目录都与三种用户关联,它们是:
1、文件所有者(Owner):
- 文件所有者是创建文件或目录的用户。这个用户拥有特殊的权限,可以对文件进行读取、写入和执行等操作。文件所有者通常是创建该文件的用户,但也可以通过修改文件的所有者来更改。
- 使用
ls -l
命令可以列出文件的详细信息,其中第一个字段显示了文件所有者的用户名或用户ID。
2、所在组(Group):
- 除了文件所有者外,每个文件还属于一个特定的组。这个组通常包含其他用户,它可以拥有一定程度的文件权限。
- 文件的所在组在文件详细信息的第二个字段中显示。它代表了文件所属的组名或者组ID。
3、其他组(Others):
- 在 Linux 文件系统中,有一个概念叫做“其他用户”或“其他组”。这是指除文件所有者和所在组之外的所有其他用户或组。
- 其他组权限通常是针对除文件所有者和所在组以外的所有用户的权限。
例如,如果有一个名为 example.txt
的文件,用 ls -l
命令查看文件详细信息时,输出可能会类似于这样:
-rw-r--r-- 1 user1 group1 1024 Dec 11 10:00 example.txt
在这个例子中:
user1
是文件的所有者。group1
是文件的所在组。-rw-r--r--
是文件的权限标志,其中第一位表示文件类型,后续三组表示文件所有者、所在组和其他组的权限。
这些权限标志中,第一组(文件所有者的权限)、第二组(所在组的权限)和第三组(其他用户的权限)指定了不同用户或组对于文件的读取、写入和执行权限。
Linux 中的文件权限和组概念提供了一种灵活的方式来管理文件和目录的访问,允许对不同用户或组的权限进行细粒度的控制。
二、组概念
在 Linux 中,组(Group)是用户的集合,它可以简化权限管理和授权。这里有一些关于 Linux 组的重要概念:
1、组的概念
组是将用户组织在一起的方式。每个用户都可以属于一个或多个组。这些组可以包含用户,从而允许对文件和资源进行更精细的权限控制。
2、组的作用
组的主要作用是管理文件和目录的访问权限。在 Linux 文件系统中,每个文件和目录都有所属的用户和组。权限分为用户权限、组权限和其他用户权限。组权限允许组中的成员对文件或目录进行特定的操作。
3、组的属性
在 Linux 中,每个组都有一个唯一的组名和一个唯一的组标识符(GID)。组名是用于识别组的人类可读的名称,而 GID 是系统内部用于标识组的数字标识符。
4、组的管理
在 Linux 中,可以使用一些命令和文件来管理组。比如:
groupadd
: 创建新的组。groupdel
: 删除现有的组。groupmod
: 修改组的属性,比如组名或 GID。groups
: 显示当前用户所属的组。/etc/group
文件:包含系统中所有组的信息,如组名、GID和组成员等。
5、权限管理
Linux 中的文件和目录拥有者、所属组和其他用户的权限设置非常重要。通过更改文件或目录的所属组,并设置不同的权限,可以控制哪些用户可以访问或修改文件。
6、附加功能
有些程序和系统可以利用组来提供附加的功能。比如,通过组,可以控制用户是否有权限执行某些程序,或者可以使用组来划分不同的访问级别。
总的来说,Linux 中的组是对用户进行逻辑分组的一种方式,它们对权限管理和资源访问起到了重要的作用,允许对系统资源进行更精细的控制和管理。
三、一个用户同时只能属于一个主组
在 Linux 中,一个用户在同一时刻只能属于一个主要组,但是可以同时属于多个附加组。
1、主要组(Primary Group)
当用户被创建时,系统会分配给用户一个主要组。这是用户在
/etc/passwd
文件中定义的组,也是用户默认所属的组。一个用户只能拥有一个主要组。
2、附加组(Supplementary Groups)
除了主要组外,一个用户可以同时属于多个附加组。这些附加组允许用户访问其他组所具有的文件和资源,但用户只有一个主要组。
当用户登录时,系统会将用户放入主要组,并可以将用户添加到其他附加组中。这样,用户可以访问主要组和所有附加组的文件和资源。
这种机制使得一个用户能够在系统中同时具有不同组的权限,从而可以方便地管理和访问不同组的文件。通过这种组的管理方式,Linux 提供了更精细的权限控制和资源访问方式。
四、文件/目录 所有者
一般为文件的创建者,谁创建了该文件,就自然的成为了该文件的所有者
查看文件或目录所有者:ls -ahl
1、chown:修改文件或目录所有者
改变所有者
- chown 已创建的用户名 文件或目录名
改变所有者的所在组
- chown 已创建的用户名:已创建的组 文件或目录名
-R:如果是目录,则使其下所有子文件或目录递归生效
案例一:将/home/abc.txt 文件的所有者修改为tom
chown tom /home/abc.txt
案例二:将/home/kkk目录下的所有的文件和目录的所有者都修改成tom
chown -R tom /home/kkk
五、文件/目录 所在组
当某个用户创建了一个文件或文件夹后,这个文件或文件夹的所在组就是该用户所在的组
1、chgrp:修改文件或目录所在组
chgrp 已创建的组名或组id 文件或目录名
-R:如果是目录,则使其下所有子文件或目录递归生效
案例一:将/home/abc.txt 文件的所在组修改成少林
groupadd shaolin
chgrp shaolin /home/abc.txt
案例二:将/home/kkk目录下的所有文件和目录的所在组修改成少林
chgrp -R shaolin /home/kkk
六、文件/目录 其他组
除文件的所有者和所在组的用户外,系统的其他组 /其他用户都是文件的其他组 / 其他用户
七、权限的基本介绍
1、rwx作用到文件
- r:代表可读(read),可以读取,查看
- w:代表可写(write),可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写的权限,才能删除该文件
- x:代表可执行(execute),可以被执行
2、rwx作用到目录
- r:代表可读(read),可以读取,ls查看目录内容
- 若是没有r权限,则表示不能使用ls指令读取目录内容,但是对目录中的子内容的 r 权限依然有效
- w:代表可写(write),可以修改,对目录内创建 + 删除 + 重命名目录
- x:代表可执行(execute),可以进入该目录
3、rwx掩码计算
- 先将要修改的权限使用二进制表示,1表示有此权限,0表示无此权限 r-x ======101
- 将表示后的二进制数字每三位一分隔
- 将分隔后的二进制数字转化成十进制
二进制转十进制对照表
- 二进制 十进制
- 000 0
- 001 1
- 010 2
- 011 3
- 100 4
- 101 5
- 110 6
- 111 7
Linux 文件权限由三组三位权限(rwx)组成,分别代表文件所有者、文件所属组和其他用户对文件或目录的权限。每一组权限又分为读(r)、写(w)、执行(x)三种权限。在计算权限掩码时,每种权限对应一个数值:
- 读权限(r):数值为 4
- 写权限(w):数值为 2
- 执行权限(x):数值为 1
为了计算权限掩码,你可以为每个用户类别(文件所有者、文件所属组、其他用户)的权限分配数值,然后将这些数值相加得到权限掩码。
举个例子,假设一个文件的权限如下所示: rw-r--r--
- 文件所有者(Owner):读写权限(rwx)对应数值:4(读)+ 2(写)+ 0(没有执行) = 6
- 文件所属组(Group):读权限(r)对应数值:4(读)+ 0(没有写)+ 0(没有执行) = 4
- 其他用户(Others):读权限(r)对应数值:4(读)+ 0(没有写)+ 0(没有执行) = 4
所以,这个文件的权限掩码为 644
。在这种情况下,文件所有者有读写权限(6),文件所属组和其他用户有只读权限(4)。
要注意的是,这个权限数值对应的二进制位也可以代表相同的权限,即:
- 读权限(r):二进制 100 (对应数值 4)
- 写权限(w):二进制 010 (对应数值 2)
- 执行权限(x):二进制 001 (对应数值 1)
通过将这些二进制位组合,你可以计算出权限掩码。例如,rw-r--r--
可以表示为 110100100
,转换成八进制为 644
4、ugo和rwx的顺序及其对应的值是固定不变的
ugo和rwx的顺序及其对应的值是固定不变的
八、chmod:修改权限
通过chmod指令,可以修改文件或者目录的权限
chmod [选项] 文件名/目录名
-R:如果是目录,则使其下所有子文件或目录递归生效
1、ugo赋值法
u-----user 拥有者
g----group 所属组
o----other 其他
a----all 所有
= ------赋值
如果权限不变,不写即可,如果什么权限都没有,=后面不写即可
chmod u=,g=rx 文件名
比如:拥有者有可读可写的权限
u=rw
所属组 可读可执行权限
g=rx
例子:修改aa文件的权限,改为拥有者可读可执行,所属组可写可执行其他可读
chmod u=rx,g=wx,o=r aa
2、ugo加减法
u-----user 拥有者
g----group 所属组
o----other 其他
a----all 所有+ -----加上某个权限
- -----减去某个权限
例如:修改文件的权限,拥有者增加可写的权限,减少可执行权限
chmod u+w-x 文件名
增加拥有者可读的权限,所属组减少可写的权限
chmod u+r,g-w 文件名
案例一:给abc文件的所有者读写执行的权限,给所在组读执行的权限,给其他组读执行的权限
chmod u=rwx,g=rx,o=rx abc.txt
案例二:给abc文件的所有者除去执行的权限,增加所在组写的权限
chmod u-x,g+w abc.txt
案例三:给abc文件的所有用户添加读的权限
chmod a+r abc.txt
3、位权展开求和法
例子:
101(二进制)=1*2^0 +0*2^1 +1*2^2=1+0+4=5
110(二进制)=0*2^0+1*2^1+1*2^2=0+2+4=6
练习:修改文件权限,要求位权展开求和法,改成拥有者 可读可执行,所属组 可读,其他可读可写可执行
r-xr--rwx
101 100 111
101=1*2^0+0*2^1+1*2^2=1+0+4=5
100=4
111=7
chmod 547 文件名 等同于 chmod u=rx,g=r,o=rwx 文件名
案例:将/home/abc.txt文件的权限修改成 rwxr-xr-x
chmod 755 abc.txt
八、权限管理用于实例
1、警察和土匪游戏
有两个组:police(警察)bandit(土匪)
四个用户:jack,jerry:警察,xh,xq:土匪
1、创建组
groupadd police
mkdir -v 警察
chgrp police 警察
groupadd bandit
mkdir -v 土匪
chgrp bandit 土匪
2、创建用户
useradd -g police -d /home/警察/jack jack
//如果要对目录内的文件进行操作,需要先拥有对该目录的相关权限
chmod 750 /home/警察/jack
useradd -g police -d /home/警察/jerry jerry
chmod 750 /home/警察/jerry
useradd -g bandit -d /home/土匪/xh xh
useradd -g bandit -d /home/土匪/xq xq
3、jack创建一个文件,自己可以读写,本组人可以读,其他组没有任何权限
su - jack
echo "jack" >> jack.txt
chmod 640 jack.txt
logout
su - jerry
cd /home/警察/jack
cat jack.txt
logout
4、jack修改该文件,让其他组人可以读,本组人可以读写
su - jack
chmod 664 jack.txt
logout
5、xh投靠警察,看看是否可以读写
usermod -g police xh
su - xh
cd /home/警察/jack
cat jack.txt
logout
2、神仙和妖怪案例
1、建立两个组(神仙(sx),妖怪(yg))
mkdir -pv /home/sx-and-yg/{sx,yg}
groupadd sx
chgrp sx /home/sx-and-yg/sx
groupadd yg
chgrp yg /home/sx-and-yg/yg
2、建立四个用户(唐僧,悟空,八戒,沙僧)并设置密码,把悟空,八戒放入妖怪,把唐僧,沙僧放入神仙
useradd -g sx -d /home/sx-and-yg/sx/ts ts
passwd ts
useradd -g sx -d /home/sx-and-yg/sx/ss ss
passwd ss
useradd -g yg -d /home/sx-and-yg/yg/wk wk
passwd wk
useradd -g yg -d /home/sx-and-yg/yg/bj bj
passwd bj
3、用悟空建立一个文件(monkey.java,该文件输出 i am monkey),并给八戒一个rw权限
su - wk
vim Monkey.java
"
public class Monkey{
public static void main(String[] args){
System.out.println("I am monkey");
}
}
"
chmod -R 770 /home/sx-and-yg/yg/wk
logout
4、八戒修改Monkey.java文件,加入一句话(i am pig)
su - bj
cd /home/sx-and-yg/yg/wk
"System.out.println("I am pig");"
logout
5、唐僧,沙僧对该文件没有权限
su - ts
cd /home/sx-and-yg/yg/wk
logout
su - ss
cd /home/sx-and-yg/yg/wk
logout
6、把 沙僧 放入妖怪组,沙僧修改文件monkey,写入(“我是沙僧,我是妖怪”)
usermod -g yg ss
su - ss
cd /home/sx-and-yg/yg/wk
vim Monkey.java
"System.out.println("我是沙僧,我是妖怪");"
logout