first commit
|
@ -0,0 +1,24 @@
|
|||
# 1、什么是Linux
|
||||
|
||||
> Linux,全称GNU/Linux,是一种免费使用和自由传播的[类UNIX](https://baike.baidu.com/item/类UNIX/9032872)操作系统,其内核由[林纳斯·本纳第克特·托瓦兹](https://baike.baidu.com/item/林纳斯·本纳第克特·托瓦兹/1034429)于1991年10月5日首次发布,它主要受到[Minix](https://baike.baidu.com/item/Minix/7106045)和Unix思想的启发,是一个基于[POSIX](https://baike.baidu.com/item/POSIX)的多用户、[多任务](https://baike.baidu.com/item/多任务/1011764)、支持[多线程](https://baike.baidu.com/item/多线程/1190404)和多[CPU](https://baike.baidu.com/item/CPU)的操作系统。它能运行主要的[Unix](https://baike.baidu.com/item/Unix/219943)工具软件、应用程序和网络协议。它支持[32位](https://baike.baidu.com/item/32位/5812218)和[64位](https://baike.baidu.com/item/64位)硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的[debian](https://baike.baidu.com/item/debian/748667)、[archlinux](https://baike.baidu.com/item/archlinux/10857530),和基于商业开发的[Red Hat Enterprise Linux](https://baike.baidu.com/item/Red Hat Enterprise Linux/10770503)、[SUSE](https://baike.baidu.com/item/SUSE/60409)、[Oracle Linux](https://baike.baidu.com/item/Oracle Linux/6876458)等。
|
||||
|
||||
|
||||
|
||||
## 1.1、为什么要使用Linux
|
||||
|
||||
* 开源
|
||||
* 多用户、多任务
|
||||
*
|
||||
|
||||
|
||||
|
||||
## 推荐阅读
|
||||
|
||||
《只是为了好玩》
|
||||
|
||||
《大教堂与集市》
|
||||
|
||||
《自由软件,自由社会》
|
||||
|
||||
《黑客与画家》
|
||||
|
|
@ -0,0 +1,196 @@
|
|||
# Linux的安装
|
||||
|
||||
# 一、相关工具、版本简介
|
||||
|
||||
1. 虚拟机:Oracle VM VirtualBox
|
||||
2. Ubuntu版本:20.04
|
||||
3. Hadoop版本:
|
||||
|
||||
|
||||
|
||||
# 二、创建虚拟机
|
||||
|
||||
成功安装Oracle VM VirtualBox后,打开的页面如下:
|
||||
|
||||

|
||||
|
||||
在开始之前,我们首先要准备好Ubuntu ISO镜像文件,以便在虚拟机上安装Ubuntu操作系统。在这里我们选取的是`ubuntu-20.04.2.0-desktop-amd64.ios`。那么,具体的安装步骤,可以按照如下指引进行:
|
||||
|
||||
1. 新建一个虚拟机
|
||||
|
||||

|
||||
|
||||
2. 虚拟机名称和系统类型
|
||||
|
||||

|
||||
|
||||
3. 为虚拟机分配内存大小
|
||||
|
||||

|
||||
|
||||
4. 虚拟硬盘的选择
|
||||
|
||||

|
||||
|
||||
5. 虚拟硬盘文件的选择
|
||||
|
||||

|
||||
|
||||
6. 存储物理硬盘的选择
|
||||
|
||||

|
||||
|
||||
7. 虚拟机存放的位置以及虚拟硬盘的大小
|
||||
|
||||

|
||||
|
||||
8. 设置完成后的界面
|
||||
|
||||

|
||||
|
||||
# 三、Ubuntu系统的安装
|
||||
|
||||
1. 点击设置
|
||||
|
||||

|
||||
|
||||
2. 设置我们准备好的镜像文件
|
||||
|
||||

|
||||
|
||||
3. 上面步骤设置完成后,返回第一步的在刚刚的【设置】旁边有个【启动】。单击【启动】按钮,启动虚拟机。启动后就如下图所示,我们可以在左边看到语言选择,可以根据喜好选择系统的语言,然后单击如图所示的【安装Ubuntu】
|
||||
|
||||

|
||||
|
||||
4. Ubuntu的安装和更新,我们不建议选择如图所示的选项,这会为你自动更新系统
|
||||
|
||||

|
||||
|
||||
5. 安装类型
|
||||
|
||||

|
||||
|
||||
6. 系统分区
|
||||
|
||||

|
||||
|
||||
7. 时区选择
|
||||
|
||||

|
||||
|
||||
8. 用户名和密码的设置
|
||||
|
||||

|
||||
|
||||
9. 设置完成后,就会进入自动安装的界面
|
||||
|
||||

|
||||
|
||||
安装完成之后,会提示要重启虚拟机,以及需要输入一个`ENTER`进入。等以上步骤都顺利的完成之后,就会显示一个登录界面,那Ubuntu的安装就大功告成啦!
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 开源软件
|
||||
|
||||
# 软件安装
|
||||
|
||||
## deb格式
|
||||
|
||||
## 二进制格式
|
||||
|
||||
## 源码编译
|
||||
|
||||
# 生产效率
|
||||
|
||||
## 1.搜狗输入法
|
||||
|
||||
**1.首先安装fcitx**
|
||||
|
||||
在终端输入
|
||||
|
||||
```shell
|
||||
sudo apt-get install fcitx
|
||||
```
|
||||
|
||||
|
||||
|
||||
**2.进入搜狗输入法官网,选择linux版下载deb文件(ubuntu系统)**
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**3.打开设置,选择区域与语言,选择管理已安装的语言,在“键盘输入法系统”选择fcitx**
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**4.可能需要重启,再屏幕右上角选择搜狗输入法即可**
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
## 2.Terminator
|
||||
|
||||
terminator可以在同一个窗口分割出多个终端,每个终端都是独立的,适合大屏使用
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
# 开发工具
|
||||
|
||||
## 1.git
|
||||
|
||||
```shell
|
||||
sudo apt-get install git
|
||||
```
|
||||
|
||||
## 2.vim
|
||||
|
||||
**1.首先将vim的源码克隆下来,这里因为github可能很慢,使用码云的镜像**
|
||||
|
||||
```shell
|
||||
git clone https://gitee.com/mirrors/vim.git
|
||||
```
|
||||
|
||||
**2.安装gcc(有则不必安装)和各依赖库**
|
||||
|
||||
```shell
|
||||
sudo apt-get install gcc
|
||||
```
|
||||
|
||||
```powershell
|
||||
sudo apt-get install libncurses5-dev python-dev python3-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev
|
||||
```
|
||||
|
||||
**3.配置与安装**
|
||||
|
||||
```shell
|
||||
sudo ./configure --with-features=huge --enable-multibyte --enable-rubyinterp --enable-pythoninterp --enable-python3interp --enable-luainterp --enable-cscope --enable-gui=gtk3 --enable-perlinterp --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/ --with-python3-config-dir=/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/ --prefix=/usr/local/vim8
|
||||
```
|
||||
|
||||
--with-features=huge:支持最大特性
|
||||
--enable-rubyinterp:打开对 ruby 编写的插件的支持
|
||||
--enable-pythoninterp:打开对 python 编写的插件的支持
|
||||
--enable-python3interp:打开对 python3 编写的插件的支持
|
||||
--enable-luainterp:打开对 lua 编写的插件的支持
|
||||
--enable-perlinterp:打开对 perl 编写的插件的支持
|
||||
--enable-multibyte:打开多字节支持,可以在 Vim 中输入中文
|
||||
--enable-cscope:打开对cscope的支持
|
||||
--enable-gui=gtk3 表示生成采用 GNOME3 风格的 gvim
|
||||
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/ 指定 python 路径
|
||||
--with-python3-config-dir=/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/ 指定 python3路径(这里可以根据自己的版本做更改)
|
||||
--prefix=/usr/local/vim8:指定将要安装到的路径
|
|
@ -0,0 +1,490 @@
|
|||
# 4. Linux用户和组管理
|
||||
|
||||
## 4.1、用户与用户组
|
||||
|
||||
Linux是多用户多任务的操作系统,需要使用系统资源则需向系统管理员申请账户进入系统。
|
||||
|
||||
用户又分*超级用户*和*普通用户*,超级用户即系统管理员root.
|
||||
|
||||
每个用户都会属于一个用户组,例如某几个用户需要同样的权限的时候,我们可以把这几个用户归属于同一个用户组,对用户组进行集中管理。
|
||||
|
||||
用户与用户组之间的关系又可以分为以下四种:
|
||||
|
||||
1. 一对一:一个用户可以存在一个组中,是组中的唯一成员;
|
||||
2. 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
|
||||
3. 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
|
||||
4. 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展。
|
||||
|
||||
第一种较常见,因为Linux添加用户的时候会自动创建同名的用户组。
|
||||
|
||||
#### 4.1.1、一个用户一个用户组?
|
||||
|
||||
Linux 系统中多数用户账户被设为用户名与用户组名相同。用户 jdoe 会被赋予一个名为jdoe 的用户组,且成为该新建用户组的唯一成员。如本例所示,该用户的登录名,用户 id(UID) 和用户组id(GID) 在新建账户时会被添加到` /etc/passwd` 和 `/etc/group` 文件中:
|
||||
|
||||
```
|
||||
$ sudo useradd jdoe
|
||||
$ grep jdoe /etc/passwd
|
||||
jdoe:x:1066:1066:Jane Doe:/home/jdoe:/bin/sh
|
||||
$ grep jdoe /etc/group
|
||||
jdoe:x:1066:
|
||||
```
|
||||
|
||||
这些文件中的配置使系统得以在文本(jdoe)和数字(1066)这两种用户id 形式之间互相转换—— jdoe 就是 1006,且 1006 就是jdoe 。
|
||||
分配给每个用户的 UID(用户 id)和 GID(用户组 id)通常是一样的,并且顺序递增。若上例中 Jane Doe 是最近添加的用户,分配给下一个新用户的用户 id 和用户组 id 很可能都是 1067。
|
||||
|
||||
|
||||
|
||||
#### 4.1.2、GID = UID?
|
||||
|
||||
UID 和 GID 可能不一致。例如,如果你用 `groupadd` [命令](https://www.linuxcool.com/)添加一个用户组而不指定用户组 id,系统会分配下一个可用的用户组 id(在本例中为 1067)。下一个添加到系统中的用户其 UID 会是 1067 而 GID 则为 1068。
|
||||
|
||||
你可以避免这个问题,方法是添加用户组的时候指定一个较小的用户组 id 而不是接受默认值。在下面的[命令](https://www.linuxcool.com/)中我们添加一个用户组并提供一个 GID,这个 GID 小于用于用户账户的 GID 取值范围。
|
||||
|
||||
```
|
||||
$ sudo groupadd -g 500 devops
|
||||
```
|
||||
|
||||
创建账户时你可以指定一个共享用户组,如果这样对你更合适的话。例如你可能想把新来的开发人员加入同一个 DevOps 用户组而不是一人一个用户组。
|
||||
|
||||
```
|
||||
$ sudo useradd -g staff bennyg
|
||||
$ grep bennyg /etc/passwd
|
||||
bennyg:x:1064:50::/home/bennyg:/bin/sh
|
||||
```
|
||||
|
||||
在Linux中,操作系统**根据UID来判断用!根据UID来判断用户!** 而不是用户名!**只要id为0就是管理员,哪怕有多个id为0 的账号**。
|
||||
|
||||
系统在新建账号时,会根据账号类型,自动分配递增账号的UID与GID (用户身份编号,组编号),也可自行分配。**通常情况下,应当保证UID与GID唯一且不重复。**
|
||||
|
||||
|
||||
|
||||
#### 4.1.3、用户组
|
||||
|
||||
用户组实际上有两种:主要用户组*primary group*和次要用户组*secondary group*。
|
||||
|
||||
主要用户组是保存在 `/etc/passwd` 文件中的用户组,该用户组在账户创建时配置。当用户创建一个文件时,用户的主要用户组与此文件关联。
|
||||
|
||||
```
|
||||
$ whoami
|
||||
jdoe
|
||||
$ grep jdoe /etc/passwd
|
||||
jdoe:x:1066:1066:John Doe:/home/jdoe:/bin/bash
|
||||
^
|
||||
|
|
||||
+-------- 主要用户组
|
||||
$ touch newfile
|
||||
$ ls -l newfile
|
||||
-rw-rw-r-- 1 jdoe jdoe 0 Jul 16 15:22 newfile
|
||||
^
|
||||
|
|
||||
+-------- 主要用户组
|
||||
```
|
||||
|
||||
用户一旦拥有账户之后被加入的那些用户组是次要用户组。次要用户组成员关系在 `/etc/group` 文件中显示。
|
||||
|
||||
```
|
||||
$ grep devops /etc/group
|
||||
devops:x:500:shs,jadep
|
||||
^
|
||||
|
|
||||
+-------- shs 和 jadep 的次要用户组
|
||||
```
|
||||
|
||||
`/etc/group` 文件给用户组分配组名称(例如 500 = devops)并记录次要用户组成员。
|
||||
|
||||
****
|
||||
|
||||
## 4.2 用户与组的配置文件
|
||||
|
||||
在Linux中,**万物皆文件**,所以用户与组也以配置文件的形式保存在系统中,以下为用户和组的主要配置文件:
|
||||
|
||||
> - `/etc/passwd`:用户及其属性信息(名称、UID、主组ID等)
|
||||
> - `/etc/group`:组及其属性信息
|
||||
> - `/etc/shadow`:用户密码及其相关属性
|
||||
> - `/etc/gshadow`:组密码及其相关属性
|
||||
|
||||
|
||||
|
||||
1. passwd文件格式:
|
||||
|
||||
```
|
||||
Father:x:887:887:Father:/data/Father:/sbin/bash
|
||||
```
|
||||
|
||||
含义:登录用户名:密码:UID:GID:全名或注释:用户主目录:用户默认使用shell
|
||||
|
||||
|
||||
|
||||
2. group文件格式:
|
||||
|
||||
```
|
||||
Father:x:887:
|
||||
```
|
||||
|
||||
含义:群组名称:群组密码(通常不需要设定,密码被记录在`/etc/gshadow`):GID:附加组(以逗号","分割,该用户没有附加组,因此为空)
|
||||
|
||||
|
||||
|
||||
3. shadow文件格式:
|
||||
|
||||
```
|
||||
Father:$6$ZwGNKTt0$i31E8.EpmX6nIMR6R9k8kx3i/Zt8HpiUiiiuzx1.S1DJPHvrbiRV5DFI1APyU0WaGA4yfPiYi.d/M7eGQRAJ81:17902:0:99999:7:::
|
||||
```
|
||||
|
||||
含义:登录用户名:密码(通常使用shad512加密):从1970年1月1日起计算到现在为止密码最近一次被更改的时间:密码再过几天就可以被修改(0表示随时可以修改):密码几天后必须变更(99999表示永不过期):密码过期前多久提示用户:密码过期多久后账户将被锁定:多少天后账户将失效(从1970-1-1算起)
|
||||
|
||||
|
||||
|
||||
4. gshadow文件格式:
|
||||
|
||||
```
|
||||
Father:!::
|
||||
```
|
||||
|
||||
含义:群组名称:群组密码:组管理员列表:当前用户的附加组
|
||||
|
||||
|
||||
|
||||
#### 4.2.1、用户管理
|
||||
|
||||
想要知道, 系统中有哪些用户, 可以查看这个文件: `/etc/passwd`
|
||||
|
||||
```
|
||||
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh
|
||||
```
|
||||
|
||||
文件格式:
|
||||
|
||||
```
|
||||
Name:password:ID:group ID:comment:home directory:login shell 用户名:密码:ID:用户组ID:注释:家目录:登录使用的shell
|
||||
```
|
||||
|
||||
你会发现密码已经用'x'替换掉了, 基于安全考虑, 密码的密文是存储在文件`/etc/shadow`中, 而且一般只有超级用户可以访问。
|
||||
|
||||
|
||||
|
||||
##### 1. 查询账号
|
||||
|
||||
```
|
||||
id [opentions] [User]
|
||||
```
|
||||
|
||||
相关参数:
|
||||
|
||||
- `-u`:显示UID
|
||||
- `-g`:显示GID
|
||||
- `-G`:显示用户所属的组ID
|
||||
- `-n`:显示名称
|
||||
|
||||
##### 2. 用户口令的管理
|
||||
|
||||
用户管理中一项重要内容是**用户口令的管理**。用户账号刚创建时没有口令,但被系统锁定,无法使用(在passwd文件中,密码显示为`!!`或`!`表示用户被锁定,是无法登陆的),必须为其指定口令后才能使用,即使是指定空口令。
|
||||
|
||||
指定和修改用户口令的Shell命令是`passwd`。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
|
||||
|
||||
命令格式:
|
||||
|
||||
```
|
||||
passwd 选项 用户名
|
||||
```
|
||||
|
||||
可使用的选项:
|
||||
|
||||
- `-l`:锁定口令,即禁用账号
|
||||
- `-u`:口令解锁
|
||||
- `-d`:使账号无口令
|
||||
- `-f`:强迫用户下次登录时修改口令
|
||||
|
||||
|
||||
|
||||
为账户指定空口令时,执行下列实行的命令:
|
||||
|
||||
```
|
||||
# passwd -d sam
|
||||
```
|
||||
|
||||
此命令将用户sam的口令删除,这样用户sam下次登录时,系统就不再询问口令。
|
||||
|
||||
|
||||
|
||||
`passwd`口令还可以用`-l`(lock)锁定某一用户,使其不能登录:
|
||||
|
||||
```
|
||||
# passwd -l sam
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 4.2.2 用户组管理
|
||||
|
||||
想要知道, 系统有哪些用户组, 可以查看`/etc/group`
|
||||
|
||||
```
|
||||
root:x:0: daemon:x:1: fax:x:21: voice:x:22: cdrom:x:24:anthony floppy:x:25:anthony tape:x:26: dip:x:30:anthony www-data:x:33: sasl:x:45: plugdev:x:46:anthony staff:x:50: sambashare:x:107: anthony:x:1000: smmta:x:108: smmsp:x:109: dkim-filter:x:110:
|
||||
```
|
||||
|
||||
文件格式:
|
||||
|
||||
```
|
||||
Group name:password:group ID:user list 用户组名:密码:用户组ID:用户列表
|
||||
```
|
||||
|
||||
用户组密码现在基本已经不用了, 'x'就是表示没有密码。
|
||||
|
||||
|
||||
|
||||
##### 1. 更改查看组成员
|
||||
|
||||
```
|
||||
# groupmems [opentions] [action]
|
||||
```
|
||||
|
||||
参数:
|
||||
|
||||
- `-g`:更改为指定组(只有root可以使用)
|
||||
- `-a`:指定用户加入组
|
||||
- `-d`:从组中删除该用户
|
||||
- `-p`:从组中清楚所有成员
|
||||
- `-l`:显示组成员列表
|
||||
|
||||
****
|
||||
|
||||
## 4.3、创建用户和用户组
|
||||
|
||||
### 4.3.1、用户
|
||||
##### 1. 添加新用户账号
|
||||
我们可以通过'useradd'命令添加新用户:
|
||||
|
||||
```
|
||||
# useradd 选项 用户名
|
||||
```
|
||||
|
||||
参数说明:
|
||||
|
||||
- 选项
|
||||
|
||||
- `-c comment` 指定一段注释性描述。
|
||||
|
||||
- `-d 目录` 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
|
||||
|
||||
- `-g 用户组` 指定用户所属的用户组。
|
||||
|
||||
- `-G 用户组`,用户组 指定用户所属的附加组。
|
||||
|
||||
- `-s Shell文件` 指定用户的登录Shell。
|
||||
|
||||
- `-u 用户号` 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
|
||||
|
||||
- 用户名:
|
||||
|
||||
指定新账号的登录名,上方命名为username。
|
||||
|
||||
```
|
||||
# useradd username
|
||||
```
|
||||
|
||||
默认情况, 这个命令会为新用户在`/home`目录下创建一个与新用户同名(username)的目录, 作为新用户的根目录; 而且这个用户没有过期时间限制, 隶属于默认的用户组, 使用Bash作为登录shell。
|
||||
|
||||
**实例**:
|
||||
|
||||
```
|
||||
# useradd -d /home/sam -m -sam
|
||||
```
|
||||
|
||||
此命令创建了一个用户sam,其中`-d`和`-m`选项用来为登录名sam产生一个主目录`/home/sam`
|
||||
|
||||
|
||||
|
||||
> **哪里也不如自己的家目录**
|
||||
>
|
||||
> 添加新账户时一个重要的细节是 useradd 命令并不一定为新用户添加一个家目录`/home`家目录。若你只有某些时候想为用户添加家目录,你可以在 useradd 命令中加入 -m 选项(可以把它想象成“安家”选项)。
|
||||
>
|
||||
> ```
|
||||
> $ sudo useradd -m -g devops -c "John Doe" jdoe2
|
||||
> ```
|
||||
>
|
||||
> 此命令中的选项如下:
|
||||
> -m 创建家目录并在其中生成初始文件
|
||||
> -g 指定用户归属的用户组
|
||||
> -c 添加账户描述信息(通常是用户的姓名)
|
||||
> 若你希望总是创建家目录,你可以编辑`/etc/login.defs` 文件来更改默认工作方式。更改或添加 CREATE_HOME 变量并将其设置为 yes:
|
||||
>
|
||||
> ```
|
||||
> $ grep CREATE_HOME /etc/login.defs
|
||||
> CREATE_HOME yes
|
||||
> ```
|
||||
>
|
||||
> 另一种方法是用自己的账户设置别名从而让 useradd 一直带有 -m 选项。
|
||||
>
|
||||
> ```
|
||||
> $ alias useradd=’useradd -m’
|
||||
> ```
|
||||
>
|
||||
> 确保将该别名添加到你的`~/.bashrc` 文件或类似的启动文件中以使其永久生效。
|
||||
|
||||
|
||||
|
||||
##### 2. 修改用户账号
|
||||
|
||||
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
|
||||
|
||||
修改已有用户的信息使用`usermod`命令:
|
||||
|
||||
```
|
||||
usermod 选项 用户名
|
||||
```
|
||||
|
||||
常用的选项包括`-c, -d, -m, -g, -G, -s, -u`以及`-o`等,这些选项的意义与`useradd`命令中的选项一样,可以为用户指定新的资源值。
|
||||
|
||||
另外,有些系统可以使用选项:`-l` 新用户名。
|
||||
|
||||
```
|
||||
# usermod --login old_login_name new_login_name
|
||||
```
|
||||
|
||||
简单地说, usermod命令通过修改系统中, 与用户相关的配置文件`(/etc/password, /etc/shadow/ …)`, 改变用户信息, 如登陆名, 用户组, 登陆密码...
|
||||
|
||||
具体情况请查看`”man usermod”`
|
||||
|
||||
**实例**:
|
||||
|
||||
```
|
||||
# usermod -s /bin/ksh -d /home/z -g developer sam
|
||||
```
|
||||
|
||||
此命令将用户sam的登录Shell修改为ksh,主目录改为`/home/z`,用户组改为developer。
|
||||
|
||||
|
||||
|
||||
##### 3. 添加用户至用户组
|
||||
|
||||
如果你想添加一个已有用户至别的用户组,你可以仿照下面的命令操作:
|
||||
|
||||
```
|
||||
$ sudo usermod -a -G devops jdoe
|
||||
```
|
||||
|
||||
你也可以指定逗号分隔的用户组列表来添加一个用户至多个用户组:
|
||||
|
||||
```
|
||||
$ sudo usermod -a -G devops,mgrs jdoe
|
||||
```
|
||||
|
||||
参数 `-a` 意思是“添加”,`-G` 指定用户组列表。
|
||||
|
||||
你可以编辑`/etc/group` 文件将用户名从用户组成员名单中删除,从而将用户从用户组中移除。`usermod` 命令或许也有个选项用于从用户组中删除某个成员。
|
||||
|
||||
```
|
||||
fish:x:16:nemo,dory,shark
|
||||
|
|
||||
V
|
||||
fish:x:16:nemo,dory
|
||||
```
|
||||
|
||||
|
||||
|
||||
##### 3. 删除用户账号
|
||||
|
||||
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将`/etc/passwd`等系统文件中的该用户记录删除,必要时还删除用户的主目录。
|
||||
|
||||
删除一个已有的用户账号使用`userdel`命令,其格式如下:
|
||||
|
||||
```
|
||||
userdel 选项 用户名
|
||||
```
|
||||
|
||||
常用的选项是 `-r`,它的作用是把用户的主目录一起删除。
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
# userdel -r sam
|
||||
```
|
||||
|
||||
此命令删除用户sam在系统文件中(主要是`/etc/passwd, /etc/shadow, /etc/group`等)的记录,同时删除用户的主目录。
|
||||
|
||||
### 4.3.2、用户组
|
||||
##### 1. 添加新用户组
|
||||
|
||||
```
|
||||
# groupadd 选项 用户组
|
||||
```
|
||||
|
||||
可以使用的选项有:
|
||||
|
||||
- `-g GID` 指定新用户组的组标识号(GID)。
|
||||
- `-o` 一般与`-g`选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
|
||||
|
||||
**实例**:
|
||||
|
||||
```
|
||||
# groupadd groupname
|
||||
```
|
||||
|
||||
此命令向系统中增加了一个新组groupname,新组的组标识号是在当前已有的最大组织标识号的基础上加1。通过命令`"groupadd"`添加用户组, 相当于在`/etc/group`文件中新增一条记录. `“groupadd groupname”` 是添加用户组最简单的方法, 该命令其他参数, 可以查看`"man groupadd"`
|
||||
|
||||
|
||||
|
||||
##### 2. 修改用户组
|
||||
|
||||
```
|
||||
# groupmod 选项 用户组
|
||||
```
|
||||
|
||||
常用的选项有:
|
||||
|
||||
- `-g GID` 为用户组指定新的组标识号。
|
||||
- `-o` 与`-g`选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
|
||||
- `-n 新用户组` 将用户组的名字改为新名字
|
||||
|
||||
**实例1**:
|
||||
|
||||
```
|
||||
# groupmod --new-name old_groupname new_groupname
|
||||
```
|
||||
|
||||
与`”usermod”`类似, 但操作对象是用户组(group). 具体使用方法可以查看`"man groupmod"`
|
||||
|
||||
**实例2**:
|
||||
|
||||
```
|
||||
# groupmod -g 102 group2
|
||||
```
|
||||
|
||||
此命令将组group2的组标识号修改为102。
|
||||
|
||||
|
||||
|
||||
##### 3. 删除用户组
|
||||
|
||||
```
|
||||
# groupdel groupname
|
||||
```
|
||||
|
||||
此命令从系统中删除groupname,删除用户组及相关文件。
|
||||
|
||||
|
||||
|
||||
##### 4. 用户在用户组间切换
|
||||
|
||||
用户可以在登录后,使用命令`newgrp`切换到其他用户组,这个命令的参数就是目的用户组。例如:
|
||||
|
||||
```
|
||||
$ newgrp root
|
||||
```
|
||||
|
||||
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
|
||||
|
||||
****
|
||||
|
||||
## 参考资料
|
||||
|
||||
[1] https://www.linuxprobe.com/linux-group.html
|
||||
|
||||
[2] https://www.linuxprobe.com/common-user-group.html
|
||||
|
||||
[3] https://www.runoob.com/linux/linux-user-manage.html
|
||||
|
||||
[4] https://www.cnblogs.com/ddz-linux/p/10467106.html
|
||||
|
||||
[5] http://c.biancheng.net/linux_tutorial/60/
|
|
@ -0,0 +1,505 @@
|
|||
# 文件和目录管理
|
||||
|
||||
了解并掌握Linux文件和目录,是学好Linux重要的一部分。
|
||||
|
||||
对于Linux初学者,常常会对众多的目录感到困惑,如home、usr、etc、bin ...... 这些目录下又会包含许多文件。
|
||||
|
||||
本章将带大家深入了解Linux的文件和目录。
|
||||
|
||||
|
||||
|
||||
## 4.1、Linux目录
|
||||
|
||||
在Linux中,目录为树状结构。树状目录以 / 为起始,也称为根目录,是Linux文件系统的入口,每一个文件和目录都从这里开始。
|
||||
|
||||
因为目录繁多,各类软件安装,配置都可能存在混乱的情况。所以产生了FHS(Filesystem Hierarchy Standard)组织。FHS制定了目录规范,什么文件应该放在什么目录。根据FHS标准,Linux目录一般可分为以下四种交互状态:
|
||||
|
||||

|
||||
|
||||
static:不可变的
|
||||
|
||||
variable:可变的
|
||||
|
||||
shareable:可分享的
|
||||
|
||||
unshareable:不可分享的
|
||||
|
||||
|
||||
|
||||
“可共享”文件是指可以存储在一台主机上并在其他主机上使用的文件。“不可共享”文件是指那些不可共享的文件。例如,用户主目录中的文件是可共享的,而设备锁文件不是。
|
||||
|
||||
“静态”文件包括二进制文件、库、文档文件和其他未经系统管理员干预不会更改的文件。不可变“文件是非静态的文件。
|
||||
|
||||
|
||||
|
||||
### 4.1.1 目录详解
|
||||
|
||||
在Linux中,常使用 ls 命令来查看目录结构。在当前命令窗口输入
|
||||
|
||||
```
|
||||
ls /
|
||||
```
|
||||
|
||||
则可查看根目录下的目录结构
|
||||
|
||||

|
||||
|
||||
以下是对这些目录的理解:
|
||||
|
||||
* / - 根目录
|
||||
|
||||
Linux文件系统的入口,每一个文件和目录都从这里开始。
|
||||
|
||||
* /bin - 基本用户命令二进制文件目录
|
||||
|
||||
包含系统管理员和用户都可以使用的命令
|
||||
|
||||
* /etc - 配置文件目录
|
||||
|
||||
本目录包含所有程序所需的配置文件。“配置文件”是用于控制程序操作的本地文件;它必须是静态的,不能是可执行的二进制文件。
|
||||
|
||||
* /boot - 引导文件
|
||||
|
||||
目录包含系统启动过程所需的所有内容,但不包括启动时不需要的配置文件和映射安装程序。
|
||||
|
||||
* /dev - 设备文件
|
||||
|
||||
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,包括终端设备、USB或连接到系统的任何设备。在 Linux 中访问设备的方式和访问文件的方式是相同的。
|
||||
|
||||
* /lib - 库文件
|
||||
|
||||
此目录包含引导系统和运行根文件系统中的命令所需的共享库映像,即位于/bin和/sbin中的二进制文件。这些文件可以被很多程序共享。
|
||||
|
||||
* /sbin - 系统二进制文件
|
||||
|
||||
/sbin包含由系统管理员使用的二进制可执行文件。
|
||||
|
||||
* /proc - 进程信息文件
|
||||
|
||||
包含系统进程的相关信息。是系统内存的映射
|
||||
|
||||
* /opt - 可选择文件
|
||||
|
||||
opitional的意思。用于安装附加应用程序软件包。
|
||||
|
||||
* /lost+found
|
||||
|
||||
此目录通常为空,当系统非法关机后,这里就存放了一些文件。
|
||||
|
||||
* /srv - 服务器数据文件
|
||||
|
||||
srv代表服务。包含服务器特定服务相关的数据。
|
||||
|
||||
* /var - 变量文件
|
||||
|
||||
这个目录下可以找到内容可能增长的文件。
|
||||
|
||||
这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);
|
||||
|
||||
* /tmp - 临时文件
|
||||
|
||||
包含系统和用户创建的临时文件。当系统重新启动时,这个目录下的文件都将被删除。
|
||||
|
||||
* /home - 用户目录
|
||||
|
||||
所有用户都用home来存储个人文件
|
||||
|
||||
* /usr - 用户程序目录
|
||||
|
||||
包含二进制文件、库文件、文档和二级程序的源代码。
|
||||
|
||||
* /mnt - 挂载目录
|
||||
|
||||
此目录主要是作为挂载点使用。通常包括系统引导后被挂载的文件系统的挂载点
|
||||
|
||||
* /media - 可移动媒体设备
|
||||
|
||||
用于挂载可移动设备的临时目录。
|
||||
|
||||
|
||||
|
||||
## 4.2、Linux文件
|
||||
|
||||
### 4.2.1、Linux文件类型
|
||||
|
||||
Linux文件类型:
|
||||
1)普通文件(regular file):就是一般类型的文件,当用 ls -l 查看某个目录时,第一个属性为 ‘-‘ 的文件就是正规文件,或者叫普通文件。正规文件又可分成纯文字文件(ascii)和二进制文件(binary)。纯文本文件是可以通过cat, more, less等工具直接查看内容的,而二进制文件并不能。例如我们用的命令/bin/ls 这就是一个二进制文件。
|
||||
|
||||
2)目录(directory): Linux 中的目录也是文件,目录文件中保存着该目录下其他文件的 inode 号 和文件名等信息,目录文件中的每个数据项都是指向某个文件 inode 号的链接,删除文件名就等于删除与之对应的链接。目录文件的字体颜色是蓝色,使用 ls -l 命令查看,第一个字符为"d"(directory)。
|
||||
|
||||
这个很容易理解,就是目录,跟windows下的文件夹一个意思,只不过在linux中我们不叫文件夹,而是叫做目录。ls -l 查看第一个属性为 ‘d’.
|
||||
|
||||
3)链接文件(link):链接文件一般指的是一个文件的软连接(或符号链接),使用 ls -l 命令查看,第一个符号为 "l",文件名为浅蓝色,如下:
|
||||
|
||||
ls -l 查看第一个属性为 ‘l’, 类似windows下的快捷方式。
|
||||
|
||||
4)设备(device): Linux 中的硬件设备如硬盘、鼠标等也都被表示为文件,即为设备文件。设备文件一般存放在 /dev/ 目录下
|
||||
|
||||
块设备文件:块设备文件支持以块(block)为单位的访问方式。在 EXT4 文件系统中,一个 block 通常为 4KB 的大小,也就是说每次可以存取 4096(或其整数倍) 个字节的数据。应用程序可以随机访问块设备文件的数据,程序可以自行确定数据的位置,硬盘、软盘等都是块设备。使用 ls -l 命令查看,块设备文件的第一个字符是 "b"(block)。
|
||||
|
||||
字符设备文件:字符设备文件以字节流的方式进行访问,由字符设备驱动程序来实现这种特性,这通常要用到 open、close、read、write 等系统调用。字符终端、串口和键盘等就是字符设备。另外,由于字符设备文件是以文件流的方式进行访问的,因此可以顺序读取,但通常不支持随机存取。使用 ls -l 命令查看,字符设备文件的第一个字符是 "c"(char)
|
||||
|
||||
|
||||
|
||||
### 4.2.2、文件权限
|
||||
|
||||
**文件的权限:**
|
||||
|
||||
以普通文件为例,使用 ls -l 命令,可以看到结果的第一列是 **-rwxrwxrwx** 的形式,其中第一个字符 "-" 表示这个文件为普通文件,它也可以是其他的字符,不同的字符代表不同类型的文件。其后的一串字符表明了该文件的权限,其中:
|
||||
|
||||
1)r 表明该文件具有可读权限,若该位置为 "-" ,则表明文件不可读;
|
||||
|
||||
2)w 表明该文件具有写权限,若该位置为 "-" ,则表明文件不可写;
|
||||
|
||||
3)x 表明该文件具有可执行权限,若该位置为 "-" ,则表明文件不具有可执行权限;
|
||||
|
||||
4)第一个 rwx 表示该文件的所有者对该文件的权限;第二个 rwx 表示该文件所属组对该文件的权限;第三个 rwx 表示其他用户对该文件的权限。
|
||||
|
||||
|
||||
|
||||
**目录文件的权限**:
|
||||
|
||||
1)r 表明该目录文件具有可读权限,即可以使用 ls 命令查看该目录的存储情况;
|
||||
|
||||
2)w 表明该目录文件具有写权限,即可以往该目录下添加、修改、删除文件;
|
||||
|
||||
3)x 表明该目录文件具有可执行文件,即可以使用 cd 命令进入到该目录下。
|
||||
|
||||
可以使用 **chmod** 指令来改变文件的权限。
|
||||
|
||||
**创建一个目录:**
|
||||
|
||||
可以使用 mkdir 命令来创建一个目录文件:
|
||||
|
||||
```
|
||||
mkdir directory
|
||||
```
|
||||
|
||||
**删除一个目录:**
|
||||
|
||||
可以使用 rmdir 命令来删除一个空目录:
|
||||
|
||||
```
|
||||
rmdir directory
|
||||
```
|
||||
|
||||
如果该目录下有其他文件,则可以使用 rm -r 命令来递归删除该目录下的所有文件。需要注意的是,使用该命令将会删除该目录及目录下的所有数据,过程不可逆,需要谨慎使用:
|
||||
|
||||
```
|
||||
rm -r directory
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**1)软链接**
|
||||
|
||||
软链接(又称符号链接),使用 **ln -s file file_softlink** 命令可以创建一个文件的软链接文件:
|
||||
|
||||
```
|
||||
ln -s test.txt test_softlink
|
||||
```
|
||||
|
||||
软链接相当于给原文件创建了一个快捷方式,如果删除原文件,则对应的软链接文件也会消失。
|
||||
|
||||
**2)硬链接**
|
||||
|
||||
硬链接,相当于给原文件取了个别名,其实两者是同一个文件,删除二者中任何一个,另一个不会消失;对其中任何一个进行更改,另一个的内容也会随之改变,因为这两个本质上是同一个文件,只是名字不同。使用 ls -i 命令查看,可以发现硬链接的两个文件的 inode 号是一样的:
|
||||
|
||||

|
||||
|
||||
同样的,使用 ln 命令可以创建一个文件的硬链接:
|
||||
|
||||
```
|
||||
ln test.txt test_hardlink
|
||||
```
|
||||
|
||||
## 4.3、命令集合
|
||||
|
||||
### ls (列出目录)
|
||||
|
||||
在Linux系统当中, ls 命令可能是最常被运行的。
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
[root@www ~]# ls [-aAdfFhilnrRSt] 目录名称
|
||||
[root@www ~]# ls [--color={never,auto,always}] 目录名称
|
||||
[root@www ~]# ls [--full-time] 目录名称
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
|
||||
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
|
||||
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
|
||||
|
||||
将家目录下的所有文件列出来(含属性与隐藏档)
|
||||
|
||||
```
|
||||
[root@www ~]# ls -al ~
|
||||
```
|
||||
|
||||
### cd (切换目录)
|
||||
|
||||
cd是Change Directory的缩写,这是用来变换工作目录的命令。
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
cd [相对路径或绝对路径]
|
||||
#使用 mkdir 命令创建 runoob 目录
|
||||
[root@www ~]# mkdir runoob
|
||||
|
||||
#使用绝对路径切换到 runoob 目录
|
||||
[root@www ~]# cd /root/runoob/
|
||||
|
||||
#使用相对路径切换到 runoob 目录
|
||||
[root@www ~]# cd ./runoob/
|
||||
|
||||
# 表示回到自己的家目录,亦即是 /root 这个目录
|
||||
[root@www runoob]# cd ~
|
||||
|
||||
# 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思;
|
||||
[root@www ~]# cd ..
|
||||
```
|
||||
|
||||
接下来大家多操作几次应该就可以很好的理解 cd 命令的。
|
||||
|
||||
### pwd (显示目前所在的目录)
|
||||
|
||||
pwd 是 **Print Working Directory** 的缩写,也就是显示目前所在目录的命令。
|
||||
|
||||
```
|
||||
[root@www ~]# pwd [-P]
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- **-P** :显示出确实的路径,而非使用连结 (link) 路径。
|
||||
|
||||
实例:单纯显示出目前的工作目录:
|
||||
|
||||
```
|
||||
[root@www ~]# pwd
|
||||
/root <== 显示出目录啦~
|
||||
```
|
||||
|
||||
实例显示出实际的工作目录,而非连结档本身的目录名而已。
|
||||
|
||||
```
|
||||
[root@www ~]# cd /var/mail <==注意,/var/mail是一个连结档
|
||||
[root@www mail]# pwd
|
||||
/var/mail <==列出目前的工作目录
|
||||
[root@www mail]# pwd -P
|
||||
/var/spool/mail <==怎么回事?有没有加 -P 差很多~
|
||||
[root@www mail]# ls -ld /var/mail
|
||||
lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail
|
||||
# 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail
|
||||
# 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!
|
||||
```
|
||||
|
||||
### mkdir (创建新目录)
|
||||
|
||||
如果想要创建新的目录的话,那么就使用mkdir (make directory)吧。
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
mkdir [-mp] 目录名称
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
|
||||
- -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
|
||||
|
||||
实例:请到/tmp底下尝试创建数个新目录看看:
|
||||
|
||||
```
|
||||
[root@www ~]# cd /tmp
|
||||
[root@www tmp]# mkdir test <==创建一名为 test 的新目录
|
||||
[root@www tmp]# mkdir test1/test2/test3/test4
|
||||
mkdir: cannot create directory `test1/test2/test3/test4':
|
||||
No such file or directory <== 没办法直接创建此目录啊!
|
||||
[root@www tmp]# mkdir -p test1/test2/test3/test4
|
||||
```
|
||||
|
||||
加了这个 -p 的选项,可以自行帮你创建多层目录!
|
||||
|
||||
实例:创建权限为 **rwx--x--x** 的目录。
|
||||
|
||||
```
|
||||
[root@www tmp]# mkdir -m 711 test2
|
||||
[root@www tmp]# ls -l
|
||||
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
|
||||
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
|
||||
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
|
||||
```
|
||||
|
||||
上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。
|
||||
|
||||
如果我们使用 -m ,如上例我们给予 -m 711 来给予新的目录 drwx--x--x 的权限。
|
||||
|
||||
### rmdir (删除空的目录)
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
rmdir [-p] 目录名称
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- **-p :**连同上一级『空的』目录也一起删除
|
||||
|
||||
删除 runoob 目录
|
||||
|
||||
```
|
||||
[root@www tmp]# rmdir runoob/
|
||||
```
|
||||
|
||||
将 mkdir 实例中创建的目录(/tmp 底下)删除掉!
|
||||
|
||||
```
|
||||
[root@www tmp]# ls -l <==看看有多少目录存在?
|
||||
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
|
||||
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
|
||||
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
|
||||
[root@www tmp]# rmdir test <==可直接删除掉,没问题
|
||||
[root@www tmp]# rmdir test1 <==因为尚有内容,所以无法删除!
|
||||
rmdir: `test1': Directory not empty
|
||||
[root@www tmp]# rmdir -p test1/test2/test3/test4
|
||||
[root@www tmp]# ls -l <==您看看,底下的输出中test与test1不见了!
|
||||
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
|
||||
```
|
||||
|
||||
利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除。
|
||||
|
||||
不过要注意的是,这个 rmdir 仅能删除空的目录,你可以使用 rm 命令来删除非空目录。
|
||||
|
||||
### cp (复制文件或目录)
|
||||
|
||||
cp 即拷贝文件和目录。
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
|
||||
[root@www ~]# cp [options] source1 source2 source3 .... directory
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- **-a:**相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
|
||||
- **-d:**若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
|
||||
- **-f:**为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
|
||||
- **-i:**若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
|
||||
- **-l:**进行硬式连结(hard link)的连结档创建,而非复制文件本身;
|
||||
- **-p:**连同文件的属性一起复制过去,而非使用默认属性(备份常用);
|
||||
- **-r:**递归持续复制,用於目录的复制行为;(常用)
|
||||
- **-s:**复制成为符号连结档 (symbolic link),亦即『捷径』文件;
|
||||
- **-u:**若 destination 比 source 旧才升级 destination !
|
||||
|
||||
用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
|
||||
|
||||
```
|
||||
[root@www ~]# cp ~/.bashrc /tmp/bashrc
|
||||
[root@www ~]# cp -i ~/.bashrc /tmp/bashrc
|
||||
cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖
|
||||
```
|
||||
|
||||
### rm (移除文件或目录)
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
rm [-fir] 文件或目录
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
|
||||
- -i :互动模式,在删除前会询问使用者是否动作
|
||||
- -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
|
||||
-
|
||||
|
||||
将刚刚在 cp 的实例中创建的 bashrc 删除掉!
|
||||
|
||||
```
|
||||
[root@www tmp]# rm -i bashrc
|
||||
rm: remove regular file `bashrc'? y
|
||||
```
|
||||
|
||||
如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!
|
||||
|
||||
### mv (移动文件与目录,或修改名称)
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
[root@www ~]# mv [-fiu] source destination
|
||||
[root@www ~]# mv [options] source1 source2 source3 .... directory
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
|
||||
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
|
||||
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
|
||||
|
||||
复制一文件,创建一目录,将文件移动到目录中
|
||||
|
||||
```
|
||||
[root@www ~]# cd /tmp
|
||||
[root@www tmp]# cp ~/.bashrc bashrc
|
||||
[root@www tmp]# mkdir mvtest
|
||||
[root@www tmp]# mv bashrc mvtest
|
||||
```
|
||||
|
||||
将某个文件移动到某个目录去,就是这样做!
|
||||
|
||||
将刚刚的目录名称更名为 mvtest2
|
||||
|
||||
```
|
||||
[root@www tmp]# mv mvtest mvtest2
|
||||
```
|
||||
|
||||
|
||||
|
||||
### cat
|
||||
|
||||
由第一行开始显示文件内容
|
||||
|
||||
语法:
|
||||
|
||||
```
|
||||
cat [-AbEnTv]
|
||||
```
|
||||
|
||||
选项与参数:
|
||||
|
||||
- -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
|
||||
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
|
||||
- -E :将结尾的断行字节 $ 显示出来;
|
||||
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
|
||||
- -T :将 [tab] 按键以 ^I 显示出来;
|
||||
- -v :列出一些看不出来的特殊字符
|
||||
|
||||
检看 /etc/issue 这个文件的内容:
|
||||
|
||||
```
|
||||
[root@www ~]# cat /etc/issue
|
||||
CentOS release 6.4 (Final)
|
||||
Kernel \r on an \m
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 参考资料
|
||||
|
||||
[1] http://www.pathname.com/fhs/
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,321 @@
|
|||
# 5、Linux磁盘管理
|
||||
|
||||
## 5.1、什么是磁盘
|
||||
|
||||
> 磁盘(disk)是指利用磁记录技术存储数据的存储器。
|
||||
>
|
||||
> 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。
|
||||
>
|
||||
>
|
||||
>
|
||||
> ——百度百科
|
||||
|
||||
|
||||
|
||||
**磁盘运行原理:**
|
||||
|
||||
简单来说就是多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据
|
||||
|
||||

|
||||
|
||||
()
|
||||
|
||||
**磁盘的扇区、磁道、柱面:**
|
||||
(1)磁道:磁盘的每个盘片被划分为许多同心圆,划分园的线条叫做磁道。
|
||||
|
||||
(2)扇区:硬盘的盘片被磁道划分成多个扇区。硬盘的读写以扇区为基本单位
|
||||
|
||||

|
||||
|
||||
(3)柱面:每一个盘片同一大小的同心圆可以看成连在一起的柱面,磁盘在分区的时候最小单位是柱面,每一个盘片的上下面都可以读取数据,每一个磁头,不可以跨盘面读取数据。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 5.2、磁盘管理
|
||||
|
||||
Linux磁盘管理通常分成五个步骤,首先是添加硬盘,做RAID或逻辑卷LVM,然后进行分区,对分区进行格式化,最后挂载到文件系统中。
|
||||
|
||||
### 5.2.1、添加硬盘
|
||||
|
||||
当给计算机添加了一个新硬盘,我们可以怎么利用它呢?
|
||||
|
||||
首先简单介绍一下RAID和LVM的概念
|
||||
|
||||
|
||||
|
||||
**RAID**
|
||||
|
||||
磁盘阵列(Redundant Arrays of Independent Disks,RAID)。磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
|
||||
|
||||
以下是几种RAID模式:
|
||||
|
||||
* RAID0
|
||||
|
||||
RAID0将数据分散在n个磁盘中,以独立的方式并行读取n个磁盘的数据,理论上,一个由n块磁盘组成的RAID0是单个磁盘性能的n倍。
|
||||
|
||||
* RAID1
|
||||
|
||||
将数据分别写到两组磁盘中,分别为工作磁盘和镜像磁盘,相当于做了一次冗余,安全性高,但是成本也高。
|
||||
|
||||
* RAID10
|
||||
|
||||
RAID10兼备了RAID1和RAID0的有优点。首先基于RAID1模式将磁盘分为2份,当要写入数据的时候,将所有的数据在两份磁盘上同时写入,相当于写了双份数据,起到了数据保障的作用。且在每一份磁盘上又会基于RAID0技术讲数据分为N份并发的读写,这样也保障了数据的效率。
|
||||
|
||||
|
||||
|
||||
**LVM**
|
||||
|
||||
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。
|
||||
|
||||
LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
|
||||
|
||||
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。
|
||||
|
||||
### 5.2.2、分区
|
||||
|
||||
当硬盘添加成功后,便可以对硬盘进行分区了。
|
||||
|
||||
|
||||
|
||||
#### 5.2.2.1、为什么要分区
|
||||
|
||||
(1)方便管理,文件种类繁多的时候不易造成混乱。
|
||||
|
||||
(2)有利于数据的安全:
|
||||
通过分区可以降低数据损失的风险。出现硬盘坏道、错误操作、重装系统都有可能造成数据损失,如果分区了,那么我们就可以将损失最小化。
|
||||
|
||||
|
||||
|
||||
#### 5.2.2.2、Linux分区原理
|
||||
|
||||
**磁盘分区类型**
|
||||
|
||||
1、主分区
|
||||
|
||||
1)系统中必须要存在的分区,系统盘选择主分区安装
|
||||
|
||||
2)数字编号只能是1-4.sda1、sda2、sda3、sda4
|
||||
|
||||
3)主分区最多四个,最少一个。
|
||||
|
||||
2、扩展分区
|
||||
|
||||
1)相当于一个独立的小磁盘。独立的分区表,不能独立存在。
|
||||
|
||||
2)有独立的分区表。
|
||||
|
||||
3)不能独立存在,即不能直接存放数据
|
||||
|
||||
4)必须在扩展分区上建立逻辑分区才能存放数据
|
||||
|
||||
5)占用主分区的编号(主分区+扩展分区)之和最多4个
|
||||
|
||||
3、逻辑分区
|
||||
|
||||
1)数字编号只能是从5开始
|
||||
|
||||
2)存放于扩展分区之上
|
||||
|
||||
3)存放任意普通数据
|
||||
|
||||
**磁盘分区方式**
|
||||
|
||||
①1~4个主分区
|
||||
|
||||
②扩展分区至多能有一个,且 2 ≤ 扩展分区+主分区≤ 4
|
||||
|
||||
磁盘是按柱面分区的。(提升读写速率)
|
||||
|
||||
磁盘分区登记的地点:磁盘分区表。(存放分区结果信息,位置:0磁道0磁头1扇区)
|
||||
|
||||
1扇区的前446字节(系统引导信息),随后64字节(分区表),最后两个字节(分区结束标志)。
|
||||
|
||||
一个分区信息固定占16字节,所以只能有64/16=4个分区。
|
||||
|
||||
#### 5.2.2.3、分区常用命令
|
||||
|
||||
fdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。
|
||||
|
||||
```
|
||||
fdisk [必要参数][选择参数]
|
||||
```
|
||||
|
||||
**必要参数:**
|
||||
|
||||
- -l 列出素所有分区表
|
||||
- -u 与"-l"搭配使用,显示分区数目
|
||||
|
||||
**选择参数:**
|
||||
|
||||
- -s<分区编号> 指定分区
|
||||
- -v 版本信息
|
||||
|
||||
**菜单操作说明**
|
||||
|
||||
- m :显示菜单和帮助信息
|
||||
- a :活动分区标记/引导分区
|
||||
- d :删除分区
|
||||
- l :显示分区类型
|
||||
- n :新建分区
|
||||
- p :显示分区信息
|
||||
- q :退出不保存
|
||||
- t :设置分区号
|
||||
- v :进行分区检查
|
||||
- w :保存修改
|
||||
- x :扩展应用,高级功能
|
||||
|
||||
|
||||
|
||||
### 5.2.3、格式化
|
||||
|
||||
#### 5.2.3.1、为什么要格式化
|
||||
|
||||
1、认识格式化:
|
||||
格式化:指将分区格式化成不同的文件系统。
|
||||
那什么是文件系统呢?
|
||||
文件系统:指操作系统用于明确存储设备或分区上的文件的方法和数据结构:即在存储设备上组织文件的方法。就好比一个教室,同学们的坐的位置总是与桌子凳子排列的方式有关系。桌子,凳子怎么摆放,就导致了同学坐的位置在哪里。文件系统存放数据也是这么个道理。
|
||||
|
||||
2、Linux系统下的文件类型:
|
||||
Linux下的文件类型有ext2、ext3、ext4、xfs等等,我们可以使用命令:mkfs. 然后用按TAB、TAB来查看都有哪些文件类型。
|
||||
|
||||
|
||||
|
||||
#### 5.2.3.2、格式化常用命令
|
||||
|
||||
mkfs(make filesystem)
|
||||
|
||||
|
||||
|
||||
```
|
||||
mkfs [-t 文件系统格式] 装置文件名
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 5.2.4、挂载
|
||||
|
||||
#### 5.2.4.1、什么是挂载
|
||||
|
||||
在Linux 系统中一切皆文件,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。挂载,指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录,访问此目录就等同于访问设备文件。
|
||||
|
||||
Linux 的磁盘挂载使用 `mount` 命令,卸载使用 `umount` 命令。
|
||||
|
||||
|
||||
|
||||
#### 5.2.4.2 挂载常用命令
|
||||
|
||||
```
|
||||
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
|
||||
```
|
||||
|
||||
|
||||
|
||||
**挂接光盘镜像文件**
|
||||
|
||||
**1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。**
|
||||
|
||||
```
|
||||
#cp /dev/cdrom /home/sunky/mydisk.iso 或
|
||||
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso
|
||||
```
|
||||
|
||||
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso
|
||||
|
||||
**2、将文件和目录制作成光盘镜像文件,执行下面的命令。**
|
||||
|
||||
```
|
||||
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir
|
||||
```
|
||||
|
||||
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk
|
||||
|
||||
**3、光盘镜像文件的挂接(mount)**
|
||||
|
||||
```
|
||||
#mkdir /mnt/vcdrom
|
||||
```
|
||||
|
||||
注:建立一个目录用来作挂接点(mount point)
|
||||
|
||||
```
|
||||
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
|
||||
```
|
||||
|
||||
注:使用/mnt/vcdrom就可以访问光盘镜像文件mydisk.iso里的所有文件了。
|
||||
|
||||
**挂接移动硬盘**
|
||||
|
||||
对[linux系统](https://www.linuxprobe.com/)而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l或more /proc/partitions查看系统的硬盘和硬盘分区情况。
|
||||
|
||||
```
|
||||
[root at pldyrouter /]# fdisk -l
|
||||
```
|
||||
|
||||
接好移动硬盘后,再用fdisk –l或more。
|
||||
/proc/partitions查看系统的硬盘和硬盘分区情况,应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev
|
||||
/sdc1、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区,我们可以使用下面的命令挂接/dev/sdc1和
|
||||
/dev/sdc5。
|
||||
|
||||
```
|
||||
#mkdir -p /mnt/usbhd1
|
||||
#mkdir -p /mnt/usbhd2
|
||||
```
|
||||
|
||||
注:建立目录用来作挂接点(mount point)
|
||||
|
||||
```
|
||||
#mount -t ntfs /dev/sdc1 /mnt/usbhd1
|
||||
#mount -t vfat /dev/sdc5 /mnt/usbhd2
|
||||
```
|
||||
|
||||
注:对ntfs格式的磁盘分区应使用-t ntfs参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
|
||||
|
||||
```
|
||||
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
|
||||
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2
|
||||
```
|
||||
|
||||
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。
|
||||
|
||||
```
|
||||
#mount /dev/sdc1 /mnt/usbhd1
|
||||
```
|
||||
|
||||
**挂接U盘**
|
||||
|
||||
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或more /proc/partitions查看系统的硬盘和硬盘分区情况。
|
||||
|
||||
```
|
||||
[root at pldyrouter root]# fdisk -l
|
||||
```
|
||||
|
||||
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。
|
||||
|
||||
```
|
||||
[root at pldyrouter root]# fdisk -l
|
||||
```
|
||||
|
||||
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。
|
||||
|
||||
```
|
||||
#mkdir -p /mnt/usb
|
||||
```
|
||||
|
||||
注:建立一个目录用来作挂接点(mount point)
|
||||
|
||||
```
|
||||
#mount -t vfat /dev/sdd1 /mnt/usb
|
||||
```
|
||||
|
||||
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。
|
||||
|
||||
```
|
||||
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb
|
||||
```
|
||||
|
||||
## 参考资料
|
||||
|
||||
[1] 《大学计算机基础》编写组编写.大学计算机基础:中国铁道出版社,2015.09
|
||||
|
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 66 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 73 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 132 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 361 KiB |
After Width: | Height: | Size: 218 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 343 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 11 KiB |
|
@ -1,7 +1,64 @@
|
|||
## 简介
|
||||
- # Linux教程
|
||||
|
||||
本开源内容由陈玉林、梁家晖 组织整理。
|
||||
## 贡献者信息
|
||||
|
||||
将于2021年06月12日进行组队学习,我们还在进行最后的校对,近期会提交上来。
|
||||
| 姓名 | 介绍 | 个人主页 |
|
||||
| -------------- | ------------------------------- | ----------------------------- |
|
||||
| 梁家晖 | 广州城市理工学院,Datawhale成员 | https://github.com/leungkafai |
|
||||
| 陈玉林 | 广州城市理工学院 | |
|
||||
| 刘宇【领航员】 | 信息安全工程师,DataWhale成员 | |
|
||||
|
||||
|
||||
|
||||
## 基本信息
|
||||
|
||||
- 贡献人员:**梁家晖**,陈玉林,刘宇【领航员】
|
||||
- 学习周期:12天,每天平均花费时间2小时-5小时不等,根据个人学习接受能力强弱有所浮动。
|
||||
- 学习形式:理论与代码
|
||||
- 人群定位:Linux初学者,Linux下各类开发者
|
||||
- 先修内容:基本的计算机知识
|
||||
|
||||
## 学习目标
|
||||
|
||||
- 学习基本的linux操作系统理论和操作
|
||||
|
||||
## 任务安排
|
||||
|
||||
### Task00:熟悉规则(1天)
|
||||
|
||||
- 组队、修改群昵称
|
||||
- 熟悉打卡规则。
|
||||
|
||||
### Task01:Linux简介(1天)
|
||||
|
||||
* 了解Linux的历史
|
||||
* 了解Linux基本特性
|
||||
|
||||
### Task02:Linux系统安装(2天)
|
||||
|
||||
* 安装好Linux系统
|
||||
* 安装好Linux系统下常用开发工具
|
||||
|
||||
### Task03:Linux用户和组管理(3天)
|
||||
|
||||
* 掌握Linux用户和组管理方法
|
||||
|
||||
### Task04:Linux文件和目录管理(3天)
|
||||
|
||||
* 理解Linux文件和目录管理的原理
|
||||
* 掌握Linux文件和目录管理基本命令
|
||||
|
||||
### Task05:Linux磁盘管理(3天)
|
||||
|
||||
* 理解Linux磁盘管理的原理
|
||||
* 掌握磁盘管理基本命令
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**关于Datawhale**:
|
||||
|
||||
>Datawhale是一个专注于数据科学与AI领域的开源组织,汇集了众多领域院校和知名企业的优秀学习者,聚合了一群有开源精神和探索精神的团队成员。Datawhale以“for the learner,和学习者一起成长”为愿景,鼓励真实地展现自我、开放包容、互信互助、敢于试错和勇于担当。同时Datawhale 用开源的理念去探索开源内容、开源学习和开源方案,赋能人才培养,助力人才成长,建立起人与人,人与知识,人与企业和人与未来的联结。
|
||||
|
||||
|