Gabriel Cánepa 发布的文章

去年八月份,Linux 基金会发起了全新的 LFCS( Linux 基金会认证系统管理员 Linux Foundation Certified Sysadmin )认证,旨在让世界各地的人能够参与到中等水平的 Linux 系统的基本管理操作的认证考试中去,这项认证包括:维护正在运行的系统和服务的能力、全面监控和分析的能力以及何时向上游团队请求支持的决策能力。

Linux Users and Groups Management

第八讲: Linux 基金会认证系统管理员

请看以下视频,里边将描述 LFCS 认证程序。

本讲是系列教程的第八讲,在这一讲中,我们将引导你学习如何在 Linux 管理用户和用户组权限的设置,这些内容是 LFCS 认证的必备知识。

由于 Linux 是一个多用户的操作系统(允许多个用户通过不同主机或者终端访问一个独立系统),因此你需要知道如何才能有效地管理用户:如何添加、编辑、禁用和删除用户账户,并赋予他们足以完成自身任务的必要权限。

(LCTT 译注:本篇原文章节顺序有误,根据理解做了调整。)

添加用户账户

添加新用户账户,你需要以 root 运行以下两条命令中的任意一条:

# adduser [new_account]
# useradd [new_account]

当新用户账户添加到系统时,会自动执行以下操作:

  1. 自动创建用户家目录(默认是 /home/username)。
  2. 自动拷贝下列隐藏文件到新建用户的家目录,用来设置新用户会话的环境变量。
.bash_logout
.bash_profile
.bashrc
  1. 自动创建邮件缓存目录 /var/spool/mail/username。
  2. 自动创建与用户名相同的用户组。

理解 /etc/passwd 中的内容

/etc/passwd 文件中存储了所有用户账户的信息,每个用户在里边都有一条对应的记录,其格式(每个字段用冒号隔开)如下:

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
  • 字段 [username] 和 [Comment] 是不言自明的。
  • 第二个字段中 x 表明通过用户名 username 登录系统是有密码保护的, 密码保存在 /etc/shadow 文件中。
  • [UID] 和 [GID] 字段用整数表示,代表该用户的用户标识符和对应所在组的组标志符。
  • 字段 [Home directory] 为 username 用户家目录的绝对路径。
  • 字段 [Default shell] 指定用户登录系统时默认使用的 shell。

理解 /etc/group 中的内容

/etc/group 文件存储所有用户组的信息。每行记录的格式如下:

[Group name]:[Group password]:[GID]:[Group members]
  • [Group name] 为用户组名称。
  • 字段 [Group password] 为 x 的话,则说明不使用用户组密码。
  • [GID] 与 /etc/passwd 中保存的 GID 相同。
  • [Group members] 用户组中的用户使用逗号隔开。

Add User Accounts in Linux

添加用户账户

修改用户信息

添加用户账户之后,你可以使用 usermod 命令来修改用户信息中的部分字段,该命令基本语法如下:

# usermod [options] [username]

设置账户的过期时间

通过 –expiredate 标记后边接 年-月-日 格式的日期,如下:

# usermod --expiredate 2014-10-30 tecmint

将用户添加到其他组

使用 -aG 或者 –append –groups 选项,后边跟着用户组,如果有多个用户组,每个用户组之间使用逗号隔开。

# usermod --append --groups root,users tecmint

改变用户家目录的默认位置

使用 -d 或者 –home 选项,后边跟着新的家目录的绝对路径。

# usermod --home /tmp tecmint

改变用户的默认 shell

使用 –shell 选项,后边跟着新 shell 的路径。

# usermod --shell /bin/sh tecmint

下面,我们一次运行上述命令:

# usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

usermod Command Examples

usermod 命令例示

扩展阅读

锁定和解锁账户

对于已有用户账户,我们还可以:

通过锁定密码来禁用账户

使用 -L (大写 l)或者 –lock 选项来锁定用户密码。

# usermod --lock tecmint

解锁用户密码

使用 –u 或者 –unlock 选项来解锁我们之前锁定的账户。

# usermod --unlock tecmint

Lock User in Linux

锁定用户账户

删除用户账户

你可以通过 userdel --remove 命令来删除用户账户。这样会删除用户拥有的家目录和家目录下的所有文件,以及邮件缓存目录。

# userdel --remove [username]

用户组管理

每次添加新用户,系统会为该用户创建同名的用户组,此时用户组里边只有新建的用户,其他用户可以随后添加进去。建立用户组的目的之一,就是为了通过对指定资源设置权限来完成对这些资源和文件进行访问控制。

比如,你有下列用户:

  • user1 (主组 user1)
  • user2 (主组 user2)
  • user3 (主组 user3)

他们都需要对你系统里边某个位置的 common.txt 文件,或者 user1 用户刚刚创建的共享进行读写。你可能会运行下列命令:

# chmod 660 common.txt
或
# chmod u=rw,g=rw,o= common.txt [注意最后那个 = 号和文件名之间的空格]

然而,这样仅仅给文件所属的用户和用户组(本例为 user1)成员的提供了读写权限。你还需要将 user2 和 user3 添加到 user1 组,打这样做也将 user1 用户和用户组的其他文件的权限开放给了 user2 和 user3。

这时候,用户组就派上用场了,下面将演示怎么做。

显示用户所属的用户组

# groups tecmint
# id tecmint

为需要对指定文件进行读写的多个用户建立用户组

运行下列几条命令来完成:

# groupadd common_group # 添加新用户组
# chown :common_group common.txt # 将 common.txt 的用户组修改为 common_group
# usermod -aG common_group user1 # 添加用户 user1 到 common_group 用户组
# usermod -aG common_group user2 # 添加用户 user2 到 common_group 用户组
# usermod -aG common_group user3 # 添加用户 user3 到 common_group 用户组

删除用户组

通过以下命令删除用户组:

# groupdel [group_name]

属于这个 group\_name 用户组的文件是不会被删除的,而仅仅是删除了用户组。

Linux 文件权限

除了我们在 LFCS 系列第三讲:归档/压缩文件及目录、设置文件属性和搜索文件 中说到的基本的读取、写入和执行权限外,文件还有一些不常用却很重要的的权限设置,有时候把它当做“特殊权限”。

就像之前我们讨论的基本权限,这里同样使用八进制数字或者一个字母(象征性符号)表示该权限类型。

理解 Setuid 位

当为可执行文件设置 setuid 位之后,用户运行程序时会继承该程序属主的有效特权。由于这样做会引起安全风险,因此设置 setuid 权限的文件及程序必须尽量少。你会发现,当系统中有用户需要访问属于 root 用户的文件是所运行的程序就带有了 setuid 权限。

也就是说,用户不仅仅可以运行这个可执行文件,而且能以 root 权限来运行。比如,让我们来看看 /bin/passwd 的权限,这个可执行文件用于改变账户的密码,修改 /etc/shadow 文件。超级用户可以改变任意账户的密码,但是其他用户只能改变自己账户的密码。

passwd Command Examples

passwd 命令例示

因此,所有用户都有权限运行 /bin/passwd,但只有 root 用户可以指定改变指定用户账户的密码。其他用户只能改变其自身的密码。

Change User Password in Linux

修改用户密码

# chmod o+u [filename]

以八进制形式来设置 setuid 位,在当前基本权限(或者想要设置的权限)前加上数字 4 就行了。

# chmod 4755 [filename]

理解 Setgid 位

设置 setgid 位之后,真实用户的有效 GID 变为属组的 GID。因此,任何用户都能以属组用户的权限来访问文件。另外,当目录置了 setgid 位之后,新建的文件将继承其所属目录的 GID,并且新建的子目录会继承父目录的 setgid 位。通过这个方法,你能够以一个指定的用户组身份来访问该目录里边的文件,而不必管文件属主的主属组。

# chmod g+s [filename]

以八进制形式来设置 setgid 位,在当前基本权限(或者想要设置的权限)前加上数字 2 就行了。

# chmod 2755 [filename]

给目录设置 Setgid 位

Add Setgid in Linux

给命令设置 setgid 位

理解 黏连 Sticky

文件设置了黏连位是没有意义,Linux 会忽略该位。如果设置到目录上,会防止其内的文件被删除或改名,除非你是该目录或文件的属主、或者是 root 用户。

# chmod o+t [directory]

以八进制形式来设置黏连位,在当前基本权限(或者想要设置的权限)前加上数字 1 就行了。

# chmod 1755 [directory]

若没有黏连位,任何有权限读写目录的用户都可删除和重命名其中的文件。因此,黏连位通常出现在像 /tmp 之类的目录,这些目录是所有人都具有写权限的。

Add Stickybit in Linux

给目录设置黏连位

Linux 特殊文件属性

文件还有其他一些属性,用来做进一步的操作限制。比如,阻止对文件的重命名、移动、删除甚至是修改。可以通过使用 chattr 命令 来设置,并可以使用 lsattr 工具来查看这些属性。设置如下:

# chattr +i file1
# chattr +a file2

运行这些命令之后,file1 成为不可变状态(即不可移动、重命名、修改或删除),而 file2 进入“仅追加”模式(仅在追加内容模式中打开)。

Protect File from Deletion

通过 Chattr 命令来包含文件

访问 root 账户并启用 sudo

访问 root 账户的方法之一,就是通过输入:

$ su

然后输入 root 账户密码。

倘若授权成功,你将以 root 身份登录,工作目录则是登录前所在的位置。如果是想要一登录就自动进入 root 用户的家目录,请运行:

$ su -

然后输入 root 账户密码。

switch user by su

用户通过 su 切换

执行上个步骤需要普通用户知道 root 账户的密码,这样会引起非常严重的安全问题。于是,系统管理员通常会配置 sudo 命令来让普通用户在严格控制的环境中以其他用户身份(通常是 root)来执行命令。所以,可以在严格控制用户的情况下,又允许他运行一条或多条特权命令。

普通用户通过他自己的用户密码来完成 sudo 授权。输入命令之后会出现输入密码(并不是超级用户密码)的提示,授权成功(只要赋予了用户运行该命令的权限)的话,指定的命令就会运行。

系统管理员必须编辑 /etc/sudoers 文件,才能为 sudo 赋予相应权限。通常建议使用 visudo 命令来编辑这个文件,而不是使用文本编辑器来打开它。

# visudo

这样会使用 vim(你可以按照 LFCS 系列第二讲:如何安装和使用纯文本编辑器 vi/vim 里边说的来编辑文件)来打开 /etc/sudoers 文件。

以下是需要设置的相关的行:

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

来更加深入了解这些项:

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

这一行指定 sudo 将要使用的目录,这样可以阻止使用某些用户指定的目录,那样的话可能会危及系统。

下一行是用来指定权限的:

root        ALL=(ALL) ALL
  • 第一个 ALL 关键词表明这条规则适用于所有主机。
  • 第二个 ALL 关键词表明第一个字段中所指定的用户能以任何用户身份的权限来运行相应命令。
  • 第三个 ALL 关键词表明可以运行任何命令。
tecmint ALL=/bin/yum update

如果 = 号后边没有指定用户,sudo 则默认为 root 用户。本例中,tecmint 用户能以 root 身份运行 yum update 命令。

gacanepa    ALL=NOPASSWD:/bin/updatedb

NOPASSWD 关键词表明 gacanepa 用户不需要密码,可以直接运行 /bin/updatedb 命令。

%admin      ALL=(ALL) ALL

% 符号表示该行应用于 admin 用户组。其他部分的含义与对于用户的含义是一样的。本例表示 admin 用户组的成员可以通过任何主机连接来运行任何命令。

通过 sudo -l 命令可以查看,你的账户拥有什么样的权限。

Sudo Access Rules

Sudo 访问规则

总结

对于系统管理员来说,高效能的用户和文件管理技能是非常必要的。本文已经涵盖了这些内容,我们希望你将这些作为一个开始,然后慢慢进步。随时在下边发表评论或提问,我们会尽快回应的。


via: http://www.tecmint.com/manage-users-and-groups-in-linux/

作者:Gabriel Cánepa 译者:GHLandy 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

几个月前, Linux 基金会宣布 LFCS (Linux 基金会认证系统管理员) 认证诞生了,这个令人兴奋的新计划定位于让来自全球各地的初级到中级的 Linux 系统管理员得到认证。这其中包括维护已经在运行的系统和服务的能力、第一手的问题查找和分析能力、以及决定何时向开发团队提交问题的能力。

Linux Foundation Certified Sysadmin – Part 7

第七讲: Linux 基金会认证系统管理员

下面的视频简要介绍了 Linux 基金会认证计划。

本讲是系列教程中的第七讲,在这篇文章中,我们会介绍如何管理 Linux 系统自启动进程和服务,这是 LFCS 认证考试要求的一部分。

管理 Linux 自启动进程

Linux 系统的启动程序包括多个阶段,每个阶段由一个不同的图示块表示。下面的图示简要总结了启动过程以及所有包括的主要组件。

Linux Boot Process

Linux 启动过程

当你按下你机器上的电源键时,存储在主板 EEPROM 芯片中的固件初始化 POST(通电自检) 检查系统硬件资源的状态。POST 结束后,固件会搜索并加载位于第一块可用磁盘上的 MBR 或 EFI 分区的第一阶段引导程序,并把控制权交给引导程序。

MBR 方式

MBR 是位于 BIOS 设置中标记为可启动磁盘上的第一个扇区,大小是 512 个字节。

  • 前面 446 个字节:包括可执行代码和错误信息文本的引导程序
  • 接下来的 64 个字节:四个分区(主分区或扩展分区)中每个分区一条记录的分区表。其中,每条记录标示了每个一个分区的状态(是否活跃)、大小以及开始和结束扇区。
  • 最后 2 个字节: MBR 有效性检查的魔法数。

下面的命令对 MBR 进行备份(在本例中,/dev/sda 是第一块硬盘)。结果文件 mbr.bkp 在分区表被破坏、例如系统不可引导时能排上用场。

当然,为了后面需要的时候能使用它,我们需要把它保存到别的地方(例如一个 USB 设备)。该文件能帮助我们重新恢复 MBR,这只在我们操作过程中没有改变硬盘驱动布局时才有效。

备份 MBR

# dd if=/dev/sda of=mbr.bkp bs=512 count=1

Backup MBR in Linux

在 Linux 中备份 MBR

恢复 MBR

# dd if=mbr.bkp of=/dev/sda bs=512 count=1

Restore MBR in Linux

在 Linux 中恢复 MBR

EFI/UEFI 方式

对于使用 EFI/UEFI 方式的系统, UEFI 固件读取它的设置来决定从哪里启动哪个 UEFI 应用。(例如, EFI 分区位于哪块磁盘或分区。

接下来,加载并运行第二阶段引导程序(又名引导管理器)。GRUB[GRand Unified Boot] 是 Linux 中最常使用的引导管理器。今天大部分使用的系统中都能找到它两个中的其中一个版本。

  • GRUB 有效配置文件: /boot/grub/menu.lst(旧发行版, EFI/UEFI 固件不支持)。
  • GRUB2 配置文件: 通常是 /etc/default/grub。

尽管 LFCS 考试目标没有明确要求了解 GRUB 内部知识,但如果你足够大胆并且不怕把你的系统搞乱(为了以防万一,你可以先在虚拟机上进行尝试)你可以运行:

# update-grub

为了使更改生效,你需要以 root 用户修改 GRUB 的配置。

首先, GRUB 加载默认的内核以及 initrd 或 initramfs 镜像。补充一句,initrd 或者 initramfs 帮助完成硬件检测、内核模块加载、以及发现挂载根目录文件系统需要的设备。

一旦真正的根目录文件系统启动,为了显示用户界面,内核就会执行系统和服务管理器(init 或 systemd,进程号 PID 一般为 1)开始普通用户态的引导程序。

init 和 systemd 都是管理其它守护进程的守护进程(后台进程),它们总是最先启动(系统引导时),最后结束(系统关闭时)。

Systemd and Init

Systemd 和 Init

自启动服务(SysVinit)

Linux 中运行等级通过控制运行哪些服务来以不同方式使用系统。换句话说,运行等级控制着当前执行状态下可以完成什么任务(以及什么不能完成)。

传统上,这个启动过程是基于起源于 System V Unix 的形式,通过执行脚本启动或者停止服务从而使机器进入指定的运行等级(换句话说,是一个不同的系统运行模式)。

在每个运行等级中,独立服务可以设置为运行、或者在运行时关闭。一些主流发行版的最新版本中,已经移除了标准的 System V,而用一个称为 systemd(表示系统守护进程)的新服务和系统管理器代替,但为了兼容性,通常也支持 sysv 命令。这意味着你可以在基于 systemd 的发行版中运行大部分有名的 sysv 初始化工具。

除了启动系统进程,init 还会查看 /etc/inittab 来决定进入哪个运行等级。

RunlevelDescription
0停止系统。运行等级 0 是一个用于快速关闭系统的特殊过渡状态。
1别名为 s 或 S,这个运行等级有时候也称为维护模式。在这个运行等级启动的服务由于发行版不同而不同。通常用于正常系统操作损坏时低级别的系统维护。
2多用户。在 Debian 系统及其衍生版中,这是默认的运行等级,还包括了一个图形化登录(如果有的话)。在基于红帽的系统中,这是没有网络的多用户模式。
3在基于红帽的系统中,这是默认的多用户模式,运行除了图形化环境以外的所有东西。基于 Debian 的系统中通常不会使用这个运行等级以及等级 4 和 5。
4通常默认情况下不使用,可用于自定制。
5基于红帽的系统中,支持 GUI 登录的完全多用户模式。这个运行等级和等级 3 类似,但是有可用的 GUI 登录。
6重启系统。

要在运行等级之间切换,我们只需要使用 init 命令更改运行等级:init N(其中 N 是上面列出的一个运行等级)。 请注意这并不是运行中的系统切换运行等级的推荐方式,因为它不会给已经登录的用户发送警告(因而导致他们丢失工作以及进程异常终结)。

相反,应该用 shutdown 命令重启系统(它首先发送警告信息给所有已经登录的用户,并锁住任何新的登录;然后再给 init 发送信号切换运行等级)但是,首先要在 /etc/inittab 文件中设置好默认的运行等级(系统引导到的等级)。

因为这个原因,按照下面的步骤切当地切换运行等级。以 root 用户在 /etc/inittab 中查找下面的行。

id:2:initdefault:

并用你喜欢的文本编辑器,例如 vim(本系列的 LFCS 系列第二讲:如何安装和使用纯文本编辑器 vi/vim),更改数字 2 为想要的运行等级。

然后,以 root 用户执行

# shutdown -r now

最后一个命令会重启系统,并使它在下一次引导时进入指定的运行等级,并会执行保存在 /etc/rc[runlevel].d 目录中的脚本以决定应该启动什么服务、不应该启动什么服务。例如,在下面的系统中运行等级 2。

Change Runlevels in Linux

在 Linux 中更改运行等级

使用 chkconfig 管理服务

为了在启动时启动或者停用系统服务,我们可以在 CentOS / openSUSE 中使用 chkconfig 命令,在 Debian 及其衍生版中使用 sysv-rc-conf 命令。这个工具还能告诉我们对于一个指定的运行等级预先配置的状态是什么。

列出某个服务的运行等级配置。

# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld

Listing Runlevel Configuration

列出运行等级配置

从上图中我们可以看出,当系统进入运行等级 2 到 5 的时候就会启动 postfix,而默认情况下运行等级 2 到 4 时会运行 mysqld。现在假设我们并不希望如此。

例如,我们希望运行等级为 5 时也启动 mysqld,运行等级为 4 或 5 时关闭 postfix。下面分别针对两种情况进行设置(以 root 用户执行以下命令)。

为特定运行等级启用服务

# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on

为特定运行等级停用服务

# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off

在 Linux 中启用/停用服务Enable Disable Services in Linux

启用/停用服务

我们在基于 Debian 的系统中使用 sysv-rc-conf 完成类似任务。

使用 sysv-rc-conf 管理服务

配置服务自动启动时进入指定运行等级,同时禁止启动时进入其它运行等级。

  1. 我们可以用下面的命令查看启动 mdadm 时的运行等级。
# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

查看运行中服务的运行等级Check Runlevel of Service Running

查看运行中服务的运行等级

  1. 我们使用 sysv-rc-conf 设置防止 mdadm 在运行等级2 之外的其它等级启动。只需根据需要(你可以使用上下左右按键)选中或取消选中(通过空格键)。
# sysv-rc-conf

Sysv 运行等级配置SysV Runlevel Config

Sysv 运行等级配置

然后输入 q 退出。

  1. 重启系统并从步骤 1 开始再操作一遍。
# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

验证服务运行等级Verify Service Runlevel

验证服务运行等级

从上图中我们可以看出 mdadm 配置为只在运行等级 2 上启动。

那关于 systemd 呢?

systemd 是另外一个被多种主流 Linux 发行版采用的服务和系统管理器。它的目标是允许系统启动时多个任务尽可能并行(而 sysvinit 并非如此,sysvinit 一般比较慢,因为它每次只启动一个进程,而且会检查彼此之间是否有依赖,在启动其它服务之前还要等待守护进程启动),充当运行中系统动态资源管理的角色。

因此,服务只在需要的时候启动,而不是系统启动时毫无缘由地启动(为了防止消耗系统资源)。

要查看你系统中运行的原生 systemd 服务和 Sysv 服务,可以用以下的命令。

# systemctl

在 Linux 中查看运行中的进程Check All Running Processes in Linux

查看运行中的进程

LOAD 一列显示了单元(UNIT 列,显示服务或者由 systemd 维护的其它进程)是否正确加载,ACTIVE 和 SUB 列则显示了该单元当前的状态。

显示服务当前状态的信息

当 ACTIVE 列显示某个单元状态并非活跃时,我们可以使用以下命令查看具体原因。

# systemctl status [unit]

例如,上图中 media-samba.mount 处于失败状态。我们可以运行:

# systemctl status media-samba.mount

查看 Linux 服务状态Check Linux Service Status

查看服务状态

我们可以看到 media-samba.mount 失败的原因是 host dev1 上的挂载进程无法找到 //192.168.0.10/gacanepa 上的共享网络。

启动或停止服务

一旦 //192.168.0.10/gacanepa 上的共享网络可用,我们可以再来尝试启动、停止以及重启 media-samba.mount 单元。执行每次操作之后,我们都执行 systemctl stats media-samba.mout 来查看它的状态。

# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount

启动停止服务

启动停止服务

启用或停用某服务随系统启动

使用 systemd 你可以在系统启动时启用或停用某服务

# systemctl enable [service]        # 启用服务
# systemctl disable [service]       # 阻止服务随系统启动

启用或停用某服务随系统启动包括在 /etc/systemd/system/multi-user.target.wants 目录添加或者删除符号链接。

启用或停用服务

启用或停用服务

你也可以用下面的命令查看某个服务的当前状态(启用或者停用)。

# systemctl is-enabled [service]

例如,

# systemctl is-enabled postfix.service

另外,你可以用下面的命令重启或者关闭系统。

# systemctl reboot
# systemctl shutdown

Upstart

基于事件的 Upstart 是 /sbin/init 守护进程的替代品,它仅为在需要那些服务的时候启动服务而生,(或者当它们在运行时管理它们),以及处理发生的实践,因此 Upstart 优于基于依赖的 sysvinit 系统。

一开始它是为 Ubuntu 发行版开发的,但在红帽企业版 Linux 6.0 中得到使用。尽管希望它能在所有 Linux 发行版中替代 sysvinit,但它已经被 systemd 超越。2014 年 2 月 14 日,Mark Shuttleworth(Canonical Ltd. 创建者)发布声明之后的 Ubuntu 发行版采用 systemd 作为默认初始化守护进程。

由于 Sysv 启动脚本已经流行很长时间了,很多软件包中都包括了 Sysv 启动脚本。为了兼容这些软件, Upstart 提供了兼容模式:它可以运行保存在常用位置(/etc/rc.d/rc?.d, /etc/init.d/rc?.d, /etc/rc?.d或其它类似的位置)的Sysv 启动脚本。因此,如果我们安装了一个还没有 Upstart 配置脚本的软件,仍然可以用原来的方式启动它。

另外,如果我们还安装了类似 chkconfig 的工具,你还可以和在基于 sysvinit 的系统中一样用它们管理基于 Sysv 的服务。

Upstart 脚本除了支持 Sysv 启动脚本,还支持基于多种方式启动或者停用服务;例如, Upstart 可以在一个特定硬件设备连接上的时候启动一个服务。

使用 Upstart以及它原生脚本的系统替换了 /etc/inittab 文件和 /etc/init 目录下和运行等级相关的以 .conf 作为后缀的 Sysv 启动脚本目录。

这些 *.conf 脚本(也称为任务定义)通常包括以下几部分:

  • 进程描述
  • 进程的运行等级或者应该触发它们的事件
  • 应该停止进程的运行等级或者触发停止进程的事件
  • 选项
  • 启动进程的命令

例如,

# My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email protected]>"
# Stanzas

#
# Stanzas define when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process in case of crash
respawn
# Specify working directory
chdir /home/dave/myfiles
# Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

要使更改生效,你要让 upstart 重新加载它的配置文件。

# initctl reload-configuration

然后用下面的命令启动你的任务。

$ sudo start yourjobname

其中 yourjobname 是之前 yourjobname.conf 脚本中添加的任务名称。

关于 Upstart 更完整和详细的介绍可以参考该项目网站的 “Cookbook” 栏目。

总结

了解 Linux 启动进程对于你进行错误处理、调整计算机系统以及根据需要运行服务非常有用。

在这篇文章中,我们分析了你按下电源键启动机器的一刻到你看到完整的可操作用户界面这段时间发生了什么。我希望你能像我一样把它们放在一起阅读。欢迎在下面留下你的评论或者疑问。我们总是期待听到读者的回复。


via: http://www.tecmint.com/linux-boot-process-and-manage-services/

作者:Gabriel Cánepa 译者:ictlyh 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux 基金会已经发起了一个全新的 LFCS( Linux 基金会认证系统管理员 Linux Foundation Certified Sysadmin )认证,旨在让来自世界各地的人有机会参加到 LFCS 测试,获得关于有能力在 Linux 系统中执行中级系统管理任务的认证。该认证包括:维护正在运行的系统和服务的能力、全面监控和分析的能力以及何时向上游团队请求支持的决策能力。

Linux Foundation Certified Sysadmin – Part 6

LFCS 系列第六讲

以下视频介绍了 Linux 基金会认证程序。

本讲是系列教程中的第六讲,在这一讲里,我们将会解释如何将分区组装为 RAID 设备——创建和管理系统备份。这些都是 LFCS 认证中的必备知识。

了解RAID

这种被称为独立磁盘冗余阵列(Redundant Array of Independent Disks)(RAID)的技术是将多个硬盘组合成一个单独逻辑单元的存储解决方案,它提供了数据冗余功能并且改善硬盘的读写操作性能。

然而,实际的容错和磁盘 I/O 性能硬盘取决于如何将多个硬盘组装成磁盘阵列。根据可用的设备和容错/性能的需求,RAID 被分为不同的级别,你可以参考 RAID 系列文章以获得每个 RAID 级别更详细的解释。

我们选择用于创建、组装、管理、监视软件 RAID 的工具,叫做 mdadm (multiple disk admin 的简写)。

---------------- Debian 及衍生版 ----------------
# aptitude update && aptitude install mdadm
---------------- Red Hat 和基于 CentOS 的系统 ----------------
# yum update && yum install mdadm
---------------- openSUSE 上 ----------------
# zypper refresh && zypper install mdadm #

将分区组装成 RAID 设备

组装已有分区作为 RAID 设备的过程由以下步骤组成。

1. 使用 mdadm 创建阵列

如果先前其中一个分区已经格式化,或者作为了另一个 RAID 阵列的一部分,你会被提示以确认创建一个新的阵列。假设你已经采取了必要的预防措施以避免丢失重要数据,那么可以安全地输入 Y 并且按下回车。

# mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb1 /dev/sdc1

Creating RAID Array

创建 RAID 阵列

2. 检查阵列的创建状态

在创建了 RAID 阵列之后,你可以检查使用以下命令检查阵列的状态。

# cat /proc/mdstat
or
# mdadm --detail /dev/md0    [More detailed summary]

Check RAID Array Status

检查 RAID 阵列的状态

3. 格式化 RAID 设备

如本系列第四讲所介绍的,按照你的需求/要求采用某种文件系统格式化你的设备。

4. 监控 RAID 阵列服务

让监控服务时刻监视你的 RAID 阵列。把# mdadm --detail --scan命令输出结果添加到 /etc/mdadm/mdadm.conf(Debian及其衍生版)或者/etc/mdadm.conf(Cent0S/openSUSE),如下。

# mdadm --detail --scan

Monitor RAID Array

监控 RAID 阵列

# mdadm --assemble --scan     [Assemble the array]

为了确保服务能够开机启动,需要以 root 权限运行以下命令。

Debian 及其衍生版

Debian 及其衍生版能够通过下面步骤使服务默认开机启动:

# update-rc.d mdadm defaults

/etc/default/mdadm 文件中添加下面这一行

AUTOSTART=true

CentOS 和 openSUSE(systemd-based)

# systemctl start mdmonitor
# systemctl enable mdmonitor

CentOS 和 openSUSE(SysVinit-based)

# service mdmonitor start
# chkconfig mdmonitor on

5. 检查RAID磁盘故障

在支持冗余的的 RAID 级别中,在需要时会替换故障的驱动器。当磁盘阵列中的设备出现故障时,仅当存在我们第一次创建阵列时预留的备用设备时,磁盘阵列会将自动启动重建。

Check RAID Faulty Disk

检查 RAID 故障磁盘

否则,我们需要手动将一个额外的物理驱动器插入到我们的系统,并且运行。

# mdadm /dev/md0 --add /dev/sdX1

/dev/md0 是出现了问题的阵列,而 /dev/sdx1 是新添加的设备。

6. 拆解一个工作阵列

如果你需要使用工作阵列的设备创建一个新的阵列,你可能不得不去拆解已有工作阵列——(可选步骤)

# mdadm --stop /dev/md0                 #  Stop the array
# mdadm --remove /dev/md0             # Remove the RAID device
# mdadm --zero-superblock /dev/sdX1     # Overwrite the existing md superblock with zeroes

7. 设置邮件通知

你可以配置一个用于发送通知的有效邮件地址或者系统账号(确保在 mdadm.conf 文件中有下面这一行)。——(可选步骤)

MAILADDR root

在这种情况下,来自 RAID 后台监控程序所有的通知将会发送到你的本地 root 账号的邮件箱中。其中一个类似的通知如下。

说明:此次通知事件和第5步中的例子相关。此处一个设备被标志为错误,并且一个空闲的设备自动地被 mdadm 加入到阵列。我们用完了所有“健康的”空闲设备,因此我们得到了通知。

RAID Monitoring Alerts

RAID 监控通知

了解 RAID 级别

RAID 0

阵列总大小是最小分区大小的 n 倍,n 是阵列中独立磁盘的个数(你至少需要两个驱动器/磁盘)。运行下面命令,使用 /dev/sdb1 和 /dev/sdc1 分区组装一个 RAID 0 阵列。

# mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdb1 /dev/sdc1

常见用途:用于支持性能比容错更重要的实时应用程序的设置

RAID 1 (又名镜像)

阵列总大小等于最小分区大小(你至少需要两个驱动器/磁盘)。运行下面命令,使用 /dev/sdb1 和 /dev/sdc1 分区组装一个 RAID 1 阵列。

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

常见用途:操作系统的安装或者重要的子文件夹,例如 /home

RAID 5 (又名奇偶校验码盘)

阵列总大小将是最小分区大小的 (n-1) 倍。所减少的大小用于奇偶校验(冗余)计算(你至少需要3个驱动器/磁盘)。

说明:你可以指定一个空闲设备 (/dev/sde1) 替换问题出现时的故障部分(分区)。运行下面命令,使用 /dev/sdb1, /dev/sdc1, /dev/sdd1,/dev/sde1 组装一个 RAID 5 阵列,其中 /dev/sde1 作为空闲分区。

# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 --spare-devices=1 /dev/sde1

常见用途:Web 和文件服务

RAID 6 (又名双重奇偶校验码盘)

阵列总大小为(ns)-2s,其中n为阵列中独立磁盘的个数,s为最小磁盘大小。

说明:你可以指定一个空闲分区(在这个例子为 /dev/sdf1)替换问题出现时的故障部分(分区)。

运行下面命令,使用 /dev/sdb1, /dev/sdc1, /dev/sdd1, /dev/sde1 和 /dev/sdf1 组装 RAID 6 阵列,其中 /dev/sdf1 作为空闲分区。

# mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde --spare-devices=1 /dev/sdf1

常见用途:大容量、高可用性要求的文件服务器和备份服务器。

RAID 1+0 (又名镜像条带)

因为 RAID 1+0 是 RAID 0 和 RAID 1 的组合,所以阵列总大小是基于两者的公式计算的。首先,计算每一个镜像的大小,然后再计算条带的大小。

# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]1 --spare-devices=1 /dev/sdf1

常见用途:需要快速 IO 操作的数据库和应用服务器

创建和管理系统备份

记住, RAID 其所有的价值不是在于备份的替换者!在黑板上写上1000次,如果你需要的话,但无论何时一定要记住它。在我们开始前,我们必须注意的是,没有一个放之四海皆准的针对所有系统备份的解决方案,但这里有一些东西,是你在规划一个备份策略时需要考虑的。

  • 你的系统将用于什么?(桌面或者服务器?如果系统是应用于后者,那么最重要的服务是什么?哪个配置是痛点?)
  • 你每隔多久备份你的系统?
  • 你需要备份的数据是什么(比如文件/文件夹/数据库转储)?你还可以考虑是否需要备份大型文件(比如音频和视频文件)。
  • 这些备份将会存储在哪里(物理位置和媒体)?

备份你的数据

方法1:使用 dd 命令备份整个磁盘。你可以在任意时间点通过创建一个准确的镜像来备份一整个硬盘或者是分区。注意当设备是离线时,这种方法效果最好,也就是说它没有被挂载并且没有任何进程的 I/O 操作访问它。

这种备份方法的缺点是镜像将具有和磁盘或分区一样的大小,即使实际数据占用的是一个很小的比例。比如,如果你想要为只使用了10%的20GB的分区创建镜像,那么镜像文件将仍旧是20GB。换句话来讲,它不仅包含了备份的实际数据,而且也包含了整个分区。如果你想完整备份你的设备,那么你可以考虑使用这个方法。

从现有的设备创建一个镜像文件

# dd if=/dev/sda of=/system_images/sda.img
或者
--------------------- 可选地,你可以压缩镜像文件 -------------------
# dd if=/dev/sda | gzip -c > /system_images/sda.img.gz

从镜像文件恢复备份

# dd if=/system_images/sda.img of=/dev/sda
或者
--------------------- 根据你创建镜像文件时的选择(译者注:比如压缩) ----------------
# gzip -dc /system_images/sda.img.gz | dd of=/dev/sda

方法2:使用 tar 命令备份确定的文件/文件夹——已经在本系列第三讲中讲了。如果你想要备份指定的文件/文件夹(配置文件,用户主目录等等),你可以使用这种方法。

方法3:使用 rsync 命令同步文件。rsync 是一种多功能远程(和本地)文件复制工具。如果你想要从网络设备备份或同步文件,rsync 是一种选择。

无论是你是正在同步两个本地文件夹还是本地 < — > 挂载在本地文件系统的远程文件夹,其基本语法是一样的。

# rsync -av source_directory destination_directory

在这里,-a 递归遍历子目录(如果它们存在的话),维持符号链接、时间戳、权限以及原本的属主/属组,-v 显示详细过程。

rsync Synchronizing Files

rsync 同步文件

除此之外,如果你想增加在网络上传输数据的安全性,你可以通过 ssh 协议使用 rsync。

通过 ssh 同步本地到远程文件夹

# rsync -avzhe ssh backups root@remote_host:/remote_directory/

这个示例,本地主机上的 backups 文件夹将与远程主机上的 /root/remote\_directory 的内容同步。

在这里,-h 选项以易读的格式显示文件的大小,-e 标志用于表示一个 ssh 连接。

rsync Synchronize Remote Files

rsync 同步远程文件

通过ssh同步远程到本地文件夹

在这种情况下,交换前面示例中的 source 和 destination 文件夹。

# rsync -avzhe ssh root@remote_host:/remote_directory/ backups

请注意这些只是 rsync 用法的三个示例而已(你可能遇到的最常见的情形)。对于更多有关 rsync 命令的示例和用法 ,你可以查看下面的文章。

总结

作为一个系统管理员,你需要确保你的系统表现得尽可能好。如果你做好了充分准备,并且如果你的数据完整性能被诸如 RAID 和系统日常备份的存储技术支持,那你将是安全的。

如果你有有关完善这篇文章的问题、评论或者进一步的想法,可以在下面畅所欲言。除此之外,请考虑通过你的社交网络简介分享这系列文章。


via: http://www.tecmint.com/creating-and-managing-raid-backups-in-linux/

作者:Gabriel Cánepa 译者:cpsoture 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux 基金会已经发起了一个全新的 LFCS( Linux 基金会认证系统管理员 Linux Foundation Certified Sysadmin )认证,旨在让来自世界各地的人有机会参加到 LFCS 测试,获得关于有能力在 Linux 系统中执行中间系统管理任务的认证。该认证包括:维护正在运行的系统和服务的能力、全面监控和分析的能力以及何时向上游团队请求支持的决策能力。

Linux Foundation Certified Sysadmin – Part 5

LFCS 系列第五讲

请看以下视频,这里边介绍了 Linux 基金会认证程序。

本讲是系列教程中的第五讲,在这一讲里边,我们会解释如何在 Linux 中挂载/卸载本地和网络文件系统。这些都是 LFCS 认证中的必备知识。

挂载文件系统

在个硬盘分好区之后,Linux 需要通过某些方式对硬盘分区上的数据进行访问。Linux 并不会像 DOS 或者 Windows 那样给每个硬盘分区分配一个字母来作为盘符,而是将硬盘分区挂载到统一的目录树上的挂载点。

挂载点是一个目录,挂载是一种访问分区上文件系统的方法,挂载文件系统实际上是将一个确切的文件系统(比如一个分区)和目录树中指定的目录联系起来的过程。

换句话说,管理存储设备的第一步就是把设备关联到文件系统树。要完成这一步,通常可以这样:用 mount 命令来进行临时挂载(用完的时候,使用 umount 命令来卸载),或者通过编辑 /etc/fstab 文件之后重启系统来永久性挂载,这样每次开机都会进行挂载。

不带任何选项的 mount 命令,可以显示当前已挂载的文件系统。

# mount

Check Mounted Filesystem in Linux

检查已挂载的文件系统

另外,mount 命令通常用来挂载文件系统。其基本语法如下:

# mount -t type device dir -o options

该命令会指引内核将在设备上找到的文件系统(如已格式化为指定类型的文件系统)挂载到指定目录。像这样的形式,mount 命令不会再到 /etc/fstab 文件中进行确认。

除非像下面,挂载指定的目录或者设备:

# mount /dir -o options
或
# mount device -o options

mount 命令会尝试寻找挂载点,如果找不到就会查找设备(上述两种情况下,mount 命令会在 /etc/fstab 查找相应的设备或挂载点),最后尝试完成挂载操作(这个通常可以成功执行,除非你的挂载点或者设备正在使用中,或者你调用 mount 命令的时候没有 root 权限)。

你可以看到,mount 命令的每行输出都是如下格式:

device on directory type (options)

例如:

/dev/mapper/debian-home on /home type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)

读作:

设备 dev/mapper/debian-home 挂载在 /home 下,它被格式化为 ext4,并且有以下挂载选项: rw,relatime,user\_xattr,barrier=1,data=ordered。

mount 命令选项

下面列出 mount 命令的常用选项

  • async:允许在将要挂载的文件系统上进行异步 I/O 操作
  • auto:标示该文件系统通过 mount -a 命令挂载,与 noauto 相反。
  • defaults:该选项相当于 async,auto,dev,exec,nouser,rw,suid 的组合。注意,多个选项必须由逗号隔开并且中间没有空格。倘若你不小心在两个选项中间输入了一个空格,mount 命令会把后边的字符解释为另一个参数。
  • loop:将镜像文件(如 .iso 文件)挂载为 loop 设备。该选项可以用来模拟显示光盘中的文件内容。
  • noexec:阻止该文件系统中可执行文件的执行。与 exec 选项相反。
  • nouser:阻止任何用户(除 root 用户外) 挂载或卸载文件系统。与 user 选项相反。
  • remount:重新挂载文件系统。
  • ro:只读模式挂载。
  • rw:读写模式挂载。
  • relatime:只要访问时间早于修改时间,就更新文件的的访问时间。
  • user\_xattr:允许用户设置和移除可扩展文件系统属性。

以 ro 和 noexec 模式挂载设备

# mount -t ext4 /dev/sdg1 /mnt -o ro,noexec

在本例中,我们可以看到,在挂载点 /mnt 中尝试写入文件或者运行可执行文件都会显示相应的错误信息。

# touch /mnt/myfile
# /mnt/bin/echo “Hi there”

Mount Device in Read Write Mode

可读写模式挂载设备

以默认模式挂载设备

以下场景,我们在重新挂载设备的挂载点中,像上例一样尝试你写入文件和运行可执行文件。

# mount -t ext4 /dev/sdg1 /mnt -o defaults

Mount Device in Linux

挂载设备

在这个例子中,我们发现写入文件和命令都完美执行了。

卸载设备

使用 umount 命令卸载设备,意味着将所有的“在使用”数据全部写入到文件系统,然后可以安全移除文件系统。请注意,倘若你移除一个没有事先正确卸载的设备,就会有造成设备损坏和数据丢失的风险。

也就是说,你必须“离开”设备的块设备描述符或者挂载点,才能卸载设备。换言之,你的当前工作目录不能是需要卸载设备的挂载点。否则,系统将返回设备繁忙的提示信息。

Unmount Device in Linux

卸载设备

离开需卸载设备的挂载点最简单的方法就是,运行不带任何选项的 cd 命令,这样会回到当前用户的家目录。

挂载常见的网络文件系统

最常用的两种网络文件系统是 SMB( 服务器消息块 Server Message Block )和 NFS( 网络文件系统 Network File System )。如果你只向类 Unix 客户端提供共享,用 NFS 就可以了,如果是向 Windows 和其他类 Unix 客户端提供共享服务,就需要用到 Samba 了。

扩展阅读

下面的例子中,假设 Samba 和 NFS 已经在地址为 192.168.0.10 的服务器上架设好了(请注意,架设 NFS 服务器也是 LFCS 考试中需要考核的能力,我们会在后边中提到)。

在 Linux 中挂载 Samba 共享

第一步:在 Red Hat 以 Debian 系发行版中安装 samba-client、samba-common 和 cifs-utils 软件包,如下:

# yum update && yum install samba-client samba-common cifs-utils
# aptitude update && aptitude install samba-client samba-common cifs-utils

然后运行下列命令,查看服务器上可用的 Samba 共享。

# smbclient -L 192.168.0.10

并输入远程机器上 root 账户的密码。

Mount Samba Share in Linux

挂载 Samba 共享

上图中,已经对可以挂载到我们本地系统上的共享进行高亮显示。你只需要与一个远程服务器上的合法用户名及密码就可以访问共享了。

第二步:当挂载有密码保护的网络文件系统时候,将你的访问凭证写入到 /etc/fstab 文件中并非明智的选择。你需要将这些信息写入到具有 600 权限的隐藏文件中,像这样:

# mkdir /media/samba
# echo “username=samba_username” > /media/samba/.smbcredentials
# echo “password=samba_password” >> /media/samba/.smbcredentials
# chmod 600 /media/samba/.smbcredentials

第三步:然后将下面的内容添加到 /etc/fstab 文件中。

# //192.168.0.10/gacanepa /media/samba cifs credentials=/media/samba/.smbcredentials,defaults 0 0

第四步:现在可以挂载你的 Samba 共享了。手动挂载(mount //192.168.0.10/gacanepa)或者重启系统并应用 /etc/fstab 中相应行来用就挂载都可以。

Mount Password Protect Samba Share

挂载有密码保护的 Samba 共享

在 Linux 系统中挂载 NFS 共享

第一步:在 Red Hat 以 Debian 系发行版中安装 nfs-common 和 portmap 软件包。如下:

# yum update && yum install nfs-utils nfs-utils-lib
# aptitude update && aptitude install nfs-common

第二步:为 NFS 共享创建挂载点。

# mkdir /media/nfs

第三步:将下面的内容添加到 /etc/fstab 文件中。

192.168.0.10:/NFS-SHARE /media/nfs nfs defaults 0 0

第四步:现在可以挂载你的 Samba 共享了。手动挂载(mount 192.168.0.10:/NFS-SHARE)或者重启系统并应用 /etc/fstab 中相应行来用就挂载都可以。

Mount NFS Share in Linux

挂载 NFS 共享

永久性挂载文件系统

像前面两个例子那样,/etc/fstab 控制着Linux如何访问硬盘分区及可移动设备。/etc/fstab 由六个字段的内容组成,各个字段之间通过一个空格符或者制表符来分开。井号(#)开始的行只是会被忽略的注释。

每一行都按照这个格式来写入:

<file system> <mount point> <type> <options> <dump> <pass>

其中:

  • : 第一个字段指定挂载的设备。大多数发行版本都通过分区的标卷(label)或者 UUID 来指定。这样做可以避免分区号改变时带来的错误。
  • : 第二个字段指定挂载点。
  • :文件系统的类型代码与 mount 命令挂载文件系统时使用的类型代码是一样的。通过 auto 类型代码可以让内核自动检测文件系统,这对于可移动设备来说非常方便。注意,该选项可能不是对所有文件系统可用。
  • : 一个(或多个)挂载选项。
  • : 你可能把这个字段设置为 0(否则设置为 1),使得系统启动时禁用 dump 工具(dump 程序曾经是一个常用的备份工具,但现在越来越少用了)对文件系统进行备份。
  • : 这个字段指定启动系统是是否通过 fsck 来检查文件系统的完整性。0 表示 fsck 不对文件系统进行检查。数字越大,优先级越低。因此,根分区(/)最可能使用数字 1,其他所有需要检查的分区则是以数字 2.

Mount 命令例示

1、在系统启动时,通过 TECMINT 标卷来挂载文件系统,并具备 rw 和 noexec 属性,你应该将以下语句添加到 /etc/fstab 文件中。

LABEL=TECMINT /mnt ext4 rw,noexec 0 0  

2、若你想在系统启动时挂载 DVD 光驱中的内容,添加以下语句。

/dev/sr0 /media/cdrom0 iso9660 ro,user,noauto 0 0

其中 /dev/sr0 为你的 DVD 光驱。

总结

不用怀疑,在命令行中挂载/卸载本地和网络文件系统将是你作为系统管理员的日常责任的一部分。同时,你需要掌握 /etc/fstab 文件的编写。希望本文对你有帮助。随时在下边发表评论(或者提问),并分享本文到你的朋友圈。

参考链接


via: http://www.tecmint.com/mount-filesystem-in-linux/

作者:Gabriel Cánepa 译者:GHLandy 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

去年八月份,Linux 基金会发起了 LFCS( Linux 基金会认证系统管理员 Linux Foundation Certified Sysadmin )认证,给所有系统管理员一个展现自己的机会。通过基础考试后,他们可以胜任在 Linux 上的整体运维工作:包括系统支持、一流水平的诊断和监控以及在必要之时向其他支持团队提交帮助请求等。

Linux Foundation Certified Sysadmin – Part 4

LFCS 系列第四讲

需要注意的是,Linux 基金会认证是非常严格的,通过与否完全要看个人能力。通过在线链接,你可以随时随地参加 Linux 基金会认证考试。所以,你再也不用到考试中心了,只需要不断提高自己的专业技能和经验就可去参加考试了。

请看一下视频,这里将讲解 Linux 基金会认证程序。

本讲是系列教程中的第四讲。在本讲中,我们将涵盖对存储设备进行分区、格式化文件系统和配置交换分区等内容,这些都是 LFCS 认证中的必备知识。

对存储设备分区

分区是一种将单独的硬盘分成一个或多个区的手段。一个分区只是硬盘的一部分,我们可以认为这部分是独立的磁盘,里边包含一个单一类型的文件系统。分区表则是将硬盘上这些分区与分区标识符联系起来的索引。

在 Linux 上,IBM PC 兼容系统里边用于管理传统 MBR(用到2009年)分区的工具是 fdisk。对于 GPT(2010年至今)分区,我们使用 gdisk。这两个工具都可以通过程序名后面加上设备名称(如 /dev/sdb)进行调用。

使用 fdisk 管理 MBR 分区

我们先来介绍 fdisk:

# fdisk /dev/sdb

然后出现提示说进行下一步操作。若不确定如何操作,按下 “m” 键显示帮助。

fdisk Help Menu

fdisk 帮助菜单

上图中,使用频率最高的选项已高亮显示。你可以随时按下 “p” 显示分区表。

Check Partition Table in Linux

显示分区表

Id 列显示由 fdisk 分配给每个分区的分区类型(分区 id)。一个分区类型代表一种文件系统的标识符,简单来说,包括该分区上数据的访问方法。

请注意,每个分区类型的全面讲解将超出了本教程的范围——本系列教材主要专注于 LFCS 测试,以考试为主。

下面列出一些 fdisk 常用选项:

按下 “l”(小写 L)选项来显示所有可以由 fdisk 管理的分区类型。

按下 “d” 可以删除现有的分区。若硬盘上有多个分区,fdisk 将询问你要删除那个分区。

键入对应的数字,并按下 “w” 保存更改(将更改写入分区表)。

在下图的命令中,我们将删除 /dev/sdb2,然后显示(p)分区表来验证更改。

fdisk Command Options

fdisk 命令选项

按下 “n” 后接着按下 “p” 会创建新一个主分区。最后,你可以使用所有的默认值(这将占用所有的可用空间),或者像下面一样自定义分区大小。

Create New Partition in Linux

创建新分区

若 fdisk 分配的分区 Id 并不是我们想用的,可以按下 “t” 来更改。

Change Partition Name in Linux

更改分区类型

全部设置好分区后,按下 “w” 将更改保存到硬盘分区表上。

Save Partition Changes

保存分区更改

使用 gdisk 管理 GPT 分区

下面的例子中,我们使用 /dev/sdb。

# gdisk /dev/sdb

必须注意的是,gdisk 可以用于创建 MBR 和 GPT 两种分区表。

Create GPT Partitions in Linux

创建 GPT 分区

使用 GPT 分区方案,我们可以在同一个硬盘上创建最多 128 个分区,单个分区最大以 PB 为单位,而 MBR 分区方案最大的只能 2TB。

注意,fdisk 与 gdisk 中大多数命令都是一样的。因此,我们不会详细介绍这些命令选项,而是给出一张使用过程中的截图。

gdisk Command Options

gdisk 命令选项

格式化文件系统

一旦创建完需要的分区,我们就必须为分区创建文件系统。查询你所用系统支持的文件系统,请运行:

# ls /sbin/mk*

Check Filesystems Type in Linux

检查文件系统类型

选择文件系统取决于你的需求。你应该考虑到每个文件系统的优缺点以及其特点。选择文件系统需要看的两个重要属性:

  • 日志支持,允许从系统崩溃事件中快速恢复数据。
  • 安全增强式 Linux(SELinux)支持,按照项目 wiki 所说,“安全增强式 Linux 允许用户和管理员更好的控制访问控制权限”。

在接下来的例子中,我们通过 mkfs 在 /dev/sdb1 上创建 ext4 文件系统(支持日志和 SELinux),标卷为 Tecmint。mkfs 基本语法如下:

# mkfs -t [filesystem] -L [label] device
或者
# mkfs.[filesystem] -L [label] device

Create ext4 Filesystems in Linux

创建 ext4 文件系统

创建并启用交换分区

要让 Linux 系统访问虚拟内存,则必须有一个交换分区,当内存(RAM)用完的时候,将硬盘中指定分区(即 Swap 分区)当做内存来使用。因此,当有足够的系统内存(RAM)来满足系统的所有的需求时,我们并不需要划分交换分区。尽管如此,是否使用交换分区取决于管理员。

下面列出选择交换分区大小的经验法则:

物理内存不高于 2GB 时,取两倍物理内存大小即可;物理内存在 2GB 以上时,取一倍物理内存大小即可;并且所取大小应该大于 32MB。

所以,如果:

M为物理内存大小,S 为交换分区大小,单位 GB,那么:

若 M < 2
    S = M *2
否则
    S = M + 2

记住,这只是基本的经验。对于作为系统管理员的你,才是决定是否使用交换分区及其大小的关键。

要配置交换分区,首先要划分一个常规分区,大小像我们之前演示的那样来选取。然后添加以下条目到 /etc/fstab 文件中(其中的 X 要更改为对应的 b 或 c)。

/dev/sdX1 swap swap sw 0 0

最后,格式化并启用交换分区:

# mkswap /dev/sdX1
# swapon -v /dev/sdX1

显示交换分区的快照:

# cat /proc/swaps

关闭交换分区:

# swapoff /dev/sdX1

下面的例子,我们会使用 fdisk 将 /dev/sdc1(512MB,系统和内存为 256MB)来设置交换分区,下面是我们之前详细提过的步骤。注意,这种情况下我们使用的是指定大小分区。

Create-Swap-Partition in Linux

创建交换分区

Add Swap Partition in Linux

启用交换分区

结论

在你的系统管理员之路上,创建分区(包括交换分区)和格式化文件系统是非常重要的一步。我希望本文中所给出的技巧指导你到达你的管理员目标。随时在本讲评论区中发表你的技巧和想法,一起为社区做贡献。

参考链接


via: http://www.tecmint.com/create-partitions-and-filesystems-in-linux/

作者:Gabriel Cánepa 译者:GHLandy 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

最近,Linux 基金会发起了一个全新的 LFCS( Linux 基金会认证系统管理员 Linux Foundation Certified Sysadmin )认证,旨在让遍布全世界的人都有机会参加该认证的考试,通过考试的人将表明他们有能力在 Linux 上执行基本的中级系统管理任务。这项认证包括了对已运行的系统和服务的支持、一流水平的问题解决和分析以及决定何时将问题反映给工程师团队的能力。

Linux Foundation Certified Sysadmin – Part 3

LFCS 系列第三讲

请看以下视频,这里边讲给出 Linux 基金会认证程序的一些想法。

本讲是系列教程中的第三讲,在这一讲中,我们会涵盖如何在文件系统中归档/压缩文件及目录、设置文件属性和搜索文件等内容,这些都是 LFCS 认证中必须掌握的知识。

归档和压缩的相关工具

文件归档工具将一堆文件整合到一个单独的归档文件之后,我们可以将归档文件备份到不同类型的介质或者通过网络传输和发送 Email 来备份。在 Linux 中使用频率最高的归档实用工具是 tar。当归档工具和压缩工具一起使用的时候,可以减少同一文件和信息在硬盘中的存储空间。

tar 使用工具

tar 将一组文件打包到一个单独的归档文件(通常叫做 tar 文件或者 tarball)。tar 这个名称最初代表 磁带存档程序 tape archiver ,但现在我们可以用它来归档任意类型的可读写介质上边的数据,而不是只能归档磁带数据。tar 通常与 gzip、bzip2 或者 xz 等压缩工具一起使用,生成一个压缩的 tarball。

基本语法:

# tar [选项] [路径名 ...]

其中 ... 代表指定哪些文件进行归档操作的表达式

tar 的常用命令

长选项简写描述
-createc创建 tar 归档文件
-concatenateA将一存档与已有的存档合并
-appendr把要存档的文件追加到归档文件的末尾
-updateu更新新文件到归档文件中去
-diff 或 -compared比较存档与当前文件的不同之处
-file archivef使用档案文件或归档设备
-listt列出 tarball 中的内容
-extract 或 -getx从归档文件中释放文件

常用的操作修饰符

长选项缩写描述
-directory dirC执行归档操作前,先转到指定目录
-same-permissionsp保持原始的文件权限
-verbosev列出所有的读取或提取的文件。但这个标识符与 -list 一起使用的时候,还会显示出文件大小、属主和时间戳的信息
-verifyW写入存档后进行校验
-exclude file 不把指定文件包含在内
-exclude=patternX以PATTERN模式排除文件
-gzip 或 -gunzipz通过gzip压缩归档
-bzip2j通过bzip2压缩归档
-xzJ通过xz压缩归档

Gzip 是最古老的压缩工具,压缩率最小,bzip2 的压缩率稍微高一点。另外,xz 是最新的压缩工具,压缩率最好。xz 具有最佳压缩率的代价是:完成压缩操作花费最多时间,压缩过程中占有较多系统资源。

通常,通过这些工具压缩的 tar 文件相应的具有 .gz、.bz2 或 .xz的扩展名。在下列的例子中,我们使用 file1、file2、file3、file4 和 file5 进行演示。

通过 gzip、bzip2 和 xz 压缩归档

归档当前工作目录的所有文件,并以 gzip、bzip2 和 xz 压缩刚刚的归档文件(请注意,用正则表达式来指定哪些文件应该归档——这是为了防止将归档工具包前一步生成的文件打包进来)。

# tar czf myfiles.tar.gz file[0-9]
# tar cjf myfiles.tar.bz2 file[0-9]
# tar cJf myfile.tar.xz file[0-9]

Compress Multiple Files Using tar

压缩多个文件

列举 tarball 中的内容和更新/追加文件到归档文件中

列举 tarball 中的内容,并显示相同信息为一个详细目录清单。注意,不能直接向压缩的归档文件更新/追加文件(若你需要向压缩的 tarball 中更新/追加文件,需要先解压 tar 文件后再进行操作,然后重新压缩)。

# tar tvf [tarball]

Check Files in tar Archive

列举归档文件中的内容

运行一下任意一条命令:

# gzip -d myfiles.tar.gz    [#1]
# bzip2 -d myfiles.tar.bz2  [#2]
# xz -d myfiles.tar.xz      [#3]

然后:

# tar --delete --file myfiles.tar file4 (删除tarball中的file4)
# tar --update --file myfiles.tar file4 (更新tarball中的file4)

# gzip myfiles.tar      [ 如果你运行 #1 命令 ]
# bzip2 myfiles.tar     [ 如果你运行 #2 命令 ]
# xz myfiles.tar        [ 如果你运行 #3 命令 ]

最后

# tar tvf [tarball] #再次

将 file4 修改后的日期和时间与之前显示的对应信息进行比较

排除文件类型

假设你现在需要备份用户的家目录。一个有经验的系统管理员会选择忽略所有视频和音频文件再备份(也可能是公司规定)。

可能你最先想到的方法是在备份的时候,忽略扩展名为 .mp3 和 .mp4(或者其他格式)的文件。但如果你有些自作聪明的用户将扩展名改为 .txt 或者 .bkp,那你的方法就不灵了。为了发现并排除音频或者视频文件,你需要先检查文件类型。以下 shell 脚本可以代你完成类型检查:

#!/bin/bash
# 把需要进行备份的目录传递给 $1 参数.
DIR=$1
# 排除文件类型中包含了 mpeg 字符串的文件,然后创建 tarball 并进行压缩。
# -若文件类型中包含 mpeg 字符串, $?(最后执行的命令的退出状态)返回 0,然后文件名被定向到排除选项。否则返回 1。
# -若 $? 等于 0,该文件从需要备份文件的列表排除。
tar X <(for i in $DIR/*; do file $i | grep -i mpeg; if [ $? -eq 0 ]; then echo $i; fi;done) -cjf backupfile.tar.bz2 $DIR/*

Exclude Files in tar Archive

排除文件进行备份

使用 tar 保持文件的原有权限进行恢复

通过以下命令,你可以保留文件的权限将备份文件恢复到原始用户的家目录(本例是 user\_restore)。

# tar xjf backupfile.tar.bz2 --directory user_restore --same-permissions

Restore Files from tar Archive

从归档文件中恢复

扩展阅读:

通过 find 命令搜索文件

find 命令用于递归搜索目录树中包含指定字符的文件和目录,然后在屏幕显示出于指定字符相匹配的文件和目录,或者在匹配项进行其他操作。

通常,我们通过文件名、文件的属主、属组、类型权限、日期及大小来搜索。

基本语法:

# find [需搜索的目录] [表达式]

通过文件大小递归搜索文件

以下命令会搜索当前目录(.)及其下两层子目录(-maxdepth 3,包含当前目录及往下两层的子目录)中大于 2 MB(-size +2M)的所有文件(-f)。

# find . -maxdepth 3 -type f -size +2M

Find Files by Size in Linux * 通过文件大小搜索文件*

搜索符合一定规则的文件并将其删除

有时候,777 权限的文件通常为外部攻击者打开便利之门。不管是以何种方式,让所有人都可以对文件进行任意操作都是不安全的。对此,我们采取一个相对激进的方法——删除这些文件('{}' + 用来“聚集”搜索的结果)。

# find /home/user -perm 777 -exec rm '{}' +

Find all 777 Permission Files

搜索 777 权限的文件

按访问时间和修改时间搜索文件

搜索 /etc 目录下访问时间(-atime)或修改时间(-mtime)大于(+180)或小于(-180) 6 个月或者刚好(180) 6 个月的配置文件。

按照下面例子对命令进行修改:

# find /etc -iname "*.conf" -mtime -180 -print

Find Files by Modification Time

按修改时间搜索文件

文件权限及基本属性

ls -l 命令输出的前 10 位字符是文件的属性,其中第一个字符用来表明文件的类型。

  • – : 普通文件
  • -d : 目录
  • -l : 符号链接
  • -c : 字符设备 (它将数据作为字节流处理,如terminal)
  • -b : 块设备 (在块设备中处理数据,如存储设备)

接下来表示文件属性的 9 位字符叫做文件的读写模式,代表文件属主、同组用户和其他用户(通常指的是“外部世界”)对应的读(r)、写(w)和执行(x)权限。

文件的写权限允许对应的用户对文件进行打开和读写,对于同时设置了执行权限的目录,对应用户可以列举出该目录的内容。另外,文件的执行权限允许将文件当做是一个可执行程序来运行,而目录的执行权限则是允许用户进入和退出该目录。

文件的权限通过 chown 命令来更改,其基本语法如下:

# chmod [new_mode] file

new\_mode 可以是 3 位八进制数值或者对应权限的表达式。

八进制数值可以从二进制数值进行等值转换,通过下列方法来计算文件属主、同组用户和其他用户权限对应的二进制数值:

一个确定权限的二进制数值表现为 2 的幂(r=2^2,w=2^1,x=2^0),当权限省缺时,二进制数值为 0。如下:

Linux File Permissions

文件权限

使用八进制数值设置上图的文件权限,请输入:

# chmod 744 myfile

通过 u、g 和 o 分别代表用户、同组用户和其他用户,然后你也可以使用权限表达式来单独对用户设置文件的权限模式。也可以通过 a 代表所有用户,然后设置文件权限。通过 + 号或者 - 号相应的赋予或移除文件权限。

为所有用户撤销一个 shell 脚本的执行权限

正如之前解释的那样,我们可以通过 - 号为需要移除权限的属主、同组用户、其他用户或者所有用户去掉指定的文件权限。下面命令中的短横线(-)可以理解为:移除(-)所有用户(a)的 backup.sh 文件执行权限(x)。

# chmod a-x backup.sh

下面演示为文件属主、同组用户赋予读、写和执行权限,并赋予其他用户读权限。

当我们使用 3 位八进制数值为文件设置权限的时候,第一位数字代表属主权限,第二位数字代表同组用户权限,第三位数字代表其他用户的权限:

  • 属主:(r=2^2 + w=2^1 + x=2^0 = 7)
  • 同组用户:(r=2^2 + w=2^1 + x=2^0 = 7)
  • 其他用户:(r=2^2 + w=0 + x=0 = 4)

命令如下:

# chmod 774 myfile

随着练习时间的推移,你会知道何种情况下使用哪种方式来更改文件的权限模式的效果最好。

使用 ls -l 详细列举目录详细同样会显示出文件的属主和属组(这个很基本,而且影响到系统文件的访问控制)。

Linux File Listing

列举 Linux 文件

通过 chown 命令可以对文件的归属权进行更改,可以同时或者分开更改属主和属组。其基本语法为:

# chown user:group file

至少要指定用户或者用户组

举几个例子:

将文件的属主更改为指定用户:

# chown gacanepa sent

同时将文件的属主和属组更改为指定的用户和组:

# chown gacanepa:gacanepa TestFile

只将文件的属组更改为指定组。注意组名前的冒号(:)。

# chown :gacanepa email_body.txt

结论

作为一个系统管理员,你需要懂得如何创建和恢复备份、如何在系统中搜索文件并更改它们的属性。通过一些技巧,你可以更好地管理系统并避免以后出问题。

我希望,本文给出的技巧可以帮助你达成管理系统的目标。你可以随时在评论中发表自己的技巧及社区给你带来的益处。

先行感谢!

参考链接


via: http://www.tecmint.com/compress-files-and-finding-files-in-linux/

作者:Gabriel Cánepa 译者:GHLandy 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出