linux教程之RHCE(红帽认证工程师)系列(一)

luoyjx · 2014-09-24 10:20 · 1817次阅读

目录

 1.课程结构  2.Linux起源  3.常见目录  4.目录操作  5.文本操作  6.查看磁盘空间  7.用户管理  8.组管理  9.权限管理  10.使用帮助

1. 课程结构

掌握在企业网络中部署Linux系统,利用Linux系统实现网络服务的搭建、维护等。

2.Linux起源

1960年代初:贝尔实验室(Bell)、麻省理工(MIT)和通用电气(GE)共同提出分时操作系统概念
1969年:Ken Thompson开发了UNIX系统的雏形,目的是为了移植“太空旅游”游戏
1973年:在Ken Thompson的系统基础上,Ritchie使用C语言开发出现在的UNIX系统
1977年:UNIX系统一个重要分支:BSD诞生。当年AT&T并未意识到UNIX系统巨大的商业价值,因而允许任何企业和学校获取UNIX的源代码并进行再开发。BSD(美国加州大学伯克利分校)也获取了UNIX的源代码并进行再开发,所有伯克利大学开发的UNIX都叫做BSD。
1979年:AT&T开发出了System V操作系统的第7版,并提出不可对学生提供UNIX源代码。并开始了一场旷日持久的版权官司。
1984年:Andrew Tanenbaum(谭邦宁)教授为了教学需要,开发了X86架构的Minix系统。同一年,Richard Mathew Stallman(理查德•史托曼)提出了GNU项目和FSF基金会(自由软件基金会)。GNU项目(GNU Is a not UNIX) 的目的是为了设立一个自由的、开放的UNIX系统。自由软件基金会提出了四大自由:自由0:不论目的为何,有使用该软件的自由
自由1:有研究该软件如何运作的自由,并且得以修改该软件来符合用户自身的需求。取得该软件的源代码为达成此目的的前提
自由2:有重新散布该软件的自由
自由3:有改善再利用该软件的自由,并且可以发布修订后的版本供公众使用。
1985年:Richard Stallman提出了GPL(General Public License通用公共许可证),目的就是为了保证GNU项目的不断发展。
1988 年:XFree86项目诞生,意味着UNIX系统有了自己的图形界面。
1991年:芬兰赫尔辛基大学的Linus Torvalds开发出了第0.0.1版的Linux系统内核。标志着Linux系统的诞生。
1994年:Linux虚拟开发团队开发出Linux系统第1版内核
1996年:Linux虚拟开发团队开发出Linux系统第2版内核
Linux系统内核版本简介:
所有的linux内核版本号如下所示:
2.6.18-164
其中:2=主版本号,至今未变;6=次版本号,自2.6.x以后,不再遵循奇数开发版,偶数稳定版之说。18末版本号,164=修订号

Linux系统是内核(kernel)和系统调用(System Call)的结合,不包含第三方应用程序。而商业化的Linux系统则包含第三方应用程序(如Open Office等)。

Linux系统内核构成:

常见的商业版Linux开发厂商
Red Hat:红帽,最大的开源厂商。2003年以前,RedHat的产品是以redhat X的形式进行命名(2003年以前redhat产品最高到redhat 9.0)。2003年以后,RedHat的产品以RedHat Enterprise X进行命名。最新的RedHat产品是RedHat Enterprise Linux 6.0。
Fedora:redhat的社区版项目,redhat不提供技术支持。只在安装时提供90天的免费电话支持。
Mandriva:成立于1998年的开源厂商。
Novell SUSE:SUSE主要用于欧洲企业。
Debian:最纯正的Linux系统,没有任何商业包装
Slackware:社区版的Linux
Ubuntu:个人版Linux最好。
CentOS:免费的redhat产品。产品线对应RedHat的产品。
RedFlag:中国开发的Linux系统
中标软件:中国开发的Linux系统

3.常见目录: 1994年2月14日,Linux文件系统的标准FSSTND(Linux FileSystem Standard)发布。1995年初,业界制定了覆盖大多数UNIX系统且范围广泛的标准Linux文件系统层次标准(Filesystem Hierarchy Standard,FHS)。下表所示的就是FHS制定的Linux文件系统层次标准规定的目录信息。

目录名 说明 备注
etc 配置文件 根文件系统,必须存在于 / 系统上,不可单独分区
bin 用户可执行文件 ( 基本应用程序 )
sbin 系统可执行文件 ( 基本应用程序 )
lib 共享库文件
dev 设备
boot 启动文件 单独分区
tmp 临时文件 tmp 目录中的数据默认每 10 天自动清除
mnt/media 外设挂载点 早期 Linux 系统使用 mnt 目录
usr 发型版厂商自定义应用程序 可以考虑单独分区
var 服务器数据:日志、打印池等 可以考虑为不同的服务目录单独分区
home 普通用户家目录 如果作为认证服务器,则考虑单独分区
root root 用户家目录  
opt 存放第三方大型应用程序,如 Oracle 可以考虑单独分区
selinux selinux 信息  
misc/net 自动挂载点  
proc linux 系统信息,可在运行时进行调整 没有独立挂载点 ( 内核映像,无法挂载 )
sys 硬件相关信息
lost+found ext3 文件系统收集文件碎片用 自动存在于每个 ext3 文件系统上

4.目录操作类 /etc:绝对路径表示

./aa:相对路径表示"当前目录下的aa"
…/:相对路径表示"上级目录"
ls:列出目录信息
     #ls -l 长格式显示
     #ls -a 显示所有信息
     #ls -d 显示目录本身信息
     #ls -h 人性化显示目录信息
     #ls -i 显示文件、目录的inode表
     #ls -Z 显示SELinux信息
     #ls -R 递归显示目录信息

- 普通文件
d 目录
b 块设备
c 字符设备或流设备
l 链接文件
s 套接字文件(进程间通讯的程序化机制)
p 命名管道(在进程间传递数据的文件)

mkdir:创建新目录
    #mkdir dir1
    #mkdir -p a/b/c
rmdir:删除空目录
    #rmdir dir1
    #rmdir -p a/b/c
cd:改变工作目录
    #cd - 进入最后一次的工作目录
    #cd ~ 回用户家目录
pwd:显示当前工作目录名

5.文件操作类 {} :集合操作符,依次匹配{}内的所有信息

*:任意字符
?:任意单个字符
[]:集合操作符,任意匹配[]内的所有信息
touch:创建空文件或修改文件的时间戳
    #touch install.log
    #touch file{1,2,3}
stat:显示文件时间戳
    #stat install.log
访问时间(access time):文件被访问的时间,文本访问类命令会修改此时间
修改时间(modify time):文件内容被修改的时间,使用echo命令会修改此时间
元数据改变时间(chage time):文件属性的变化(名称、大小、权限、链接等),mv、echo命令会修改此时间
vim命令会同时修改3个时间
cat:显示文件内容
    #cat install.log
less:支持滚屏显示,可以使用/或?进行查找,需要按q键退出
    #less install.log
more:支持滚屏显示,显示到文件末尾则退出
#more install.log
head:显示文件首部(默认10行)
    #head install.log
    #head -5 install.log
tail:显示文件尾部(默认10行)
    #tail install.log
    #tail -3 install.log
    #tail -f install.log (动态显示文件尾部)
file:显示文件类型
    #file install.log
    #file /dev/sda1

6.目录、文件通用类 cp:复制命令

    #cp install.log install.log.bak
    #cp /dev/scd0 /iso/redhat5.1.iso
    #cp -r ~/Desktop /tmp //复制目录
    #cp -pr /media/cdrom/Server /tmp //保留文件权限复制
    #cp -a /media/cdrom/Server /tmp //保留文件权限复制
mv:移动、改名命令
    #mv install.log /tmp/install.bak
    #mv install.log.bak install.log
    #mv /mnt/* /tmp
rm:删除命令
    #rm install.log.bak
    #rm -f /tmp/install.log.bak

    #rm -fr /tmp/Server/ //删除目录

7.查看磁盘空间 df:查看当前系统磁盘使用情况

    #df -h //人性化显示
    #df -T //显示分区类型
    #df -a //显示所有分区,包括大小为0的分区
du:查看目录的使用情况
    #du -h //人性化显示目录下所有对象大小
    #du -s //只显示当前目录的大小
free:查看内存使用情况
    #free -m
              total       used      free       shared   buffers     cached
Mem:         1002        769        232          0         62        421
-/+ buffers/cache:         286        715
Swap:         1153        0       1153
第一部分Mem行:
    total 内存总数: 1002M
    used 已经使用的内存数: 769M
    free 空闲的内存数: 232M
    shared 当前已经废弃不用,总是0
    buffers Buffer 缓存内存数: 62M
    cached Page 缓存内存数:421M
    关系:total(1002M) = used(769M) + free(232M)
第二部分(-/+ buffers/cache):
    (-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)
    (+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)
    可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。(从这里我们可以看出,实际上 :可用内存=第一部分Mem行中的free + buffers + cached,并不是只有free部分)
第三部分是指交换分区, 我想不讲大家都明白.
    我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关used和free为什么这么奇怪.
    其实我们可以从二个方面来解释.
    对操作系统来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free只有232.
    对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
    所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
    记住内存是拿来用的,不是拿来看的.不象windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读.这也就是windows为什么常常提示虚拟空间不足的原因.你们想想,多无聊,在内存还有大部分的时候,拿出一部分硬盘空间来充当内存.硬盘怎么会快过内存.所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准哦.

8.用户管理 useradd:添加用户

useradd -c 用户说明 -u (指定用户uid -o 强制uid相同) -e 账号过期日期 -f 密码到期宽限期 -s 用户登录shell -g 用户主要组 -G 用户附加组 -d  (用户家目录 -m 不存在则强制创建)  -r 系统用户 用户名
    #useradd -c “test user” -u 510 -d /rhome/mandy mandy
    #useradd -s /sbin/nologin todd
    #useradd -G teacher,student kevin
    #useradd -e 2010/05/29 joshua
    #useradd -f 0 ed
usermod:修改用户信息
    #usermod -L kevin //锁定账号
    #usermod -U kevin //解锁账号
    #usermod -l mandy kevin //修改用户登录名为mandy
    #usermod -d /rhome/kevin -m kevin //修改用户家目录
userdel:删除用户
    #userdel kevin
    #userdel -r levin //将用户家目录及邮箱一起删除
passwd:修改用户口令
    #passwd kevin
    #echo ‘redhat’ | passwd --stdin kevin //设置用户口令
以下命令只能由root用户执行
    #passwd -d kevin //删除用户密码,用户可以空口令登录
    #passwd -l kevin //锁定用户
    #passwd -u kevin //解锁用户,用户必须已设置口令
    #passwd -u -f kevin //解锁用户,用户可以未设置口令,即口令字段为!!
    #passwd -n 1 kevin //口令最短使用期
    #passwd -x 30 kevin //口令最长使用期
    #passwd -w 7 kevin //口令到期前通知天数
    #passwd -i 5 kevin //口令到期后,锁定账号的宽限期限
    #passwd -S kevin //查看用户的密码信息
    kevin LK 2010-11-01 0 99999 7 -1 (Password locked.) //用户被锁定
    kevin NP 2010-11-01 0 99999 7 -1 (Empty password) //用户口令为空
    kevin PS 2010-11-01 0 99999 7 -1 (Password set,MD5 crypt.) //用户口令已设
口令加密算法:

  1. DES
    早期Linux系统使用的加密算法,只能支持8位明文口令的加密。如果口令长度大于8位,则忽略8位以后的字符。安全性较差。
  2. MD5
    RedHat建议使用的加密算法,支持256位长度明文口令加密。
  3. RedHat系统在处理口令时,使用“加料”HASH算法,即建立用户口令时,随机生成2位(DES)或8位(MD5)长度明文字符串,然后用该字符串和用户口令一起进行HASH,得到的结果保存在/etc/shadow文件的第2个字段上。其中:XXKEYS是DES算法得到的结果,$1$XXXXXXXX$KEYS是MD5得到的结果。
  4. 如果需要和其它UNIX/Linux系统混合使用,可以使用system-config-authentication改变加密算法类型。
  5. 可以使用如下命令来获得MD5加密口令:echo ‘redhat’ | openssl passwd -1 -stdin
    id:显示用户信息
    $id kevin
    whoami:显示用户登录名
        #whoami
    $whoami
    who:显示用户登录信息
        #who
    $who
    w:显示当前系统的登录用户信息(按列显示用户名、用户登录终端信息、远程用户OS、用户登录时间、用户闲置时间、登录会话占用的CPU时间、运行任务占用CPU时间、用户运行命令)
        #w

chage:改变用户密码使用期等

-l 查看用户信息
-E 账号过期时间(时间表示: 2010/05/03 )
-I 密码过期锁定账号宽限期( 0 :立即、 >=1 :宽限天数、 -1 :永不)
-M 密码最长使用期
-m 密码最短使用期
-W 密码到期前通知天数

更改登录用户:
su:更改为指定用户,不切换用户环境变量
    #su kevin
    $su root
su -:更改为指定用户,切换用户环境变量
    #su - kevin
    $su - root
sudo:使用root身份暂时运行某些命令,需要root事先设置/etc/sudoers文件,规定用户的可执行权限
#visudo //编辑/etc/sudoers文件
kevin desktop1.example.com=/usr/bin/passwd //用户名 主机名=可执行权限
    #su - kevin
    $sudo passwd --stdin todd //以指定用户在指定计算机上执行
用户相关配置文件
/etc/passwd:用户名、说明、登录shell等

用户名 密码 UID GID 用户说明 家目录 登录 shell
Root X 0 0 root /root /bin/shell

/etc/shadow:用户密码、账号过期时间、密码过期宽限期等

Kevin 用户名
$1$NtH2oDq0$wOKX4yUwR)JXZehB9RagT. 加密密码
14109 自 1970.1.1 起密码使用天数
0 密码最短使用期
99999 密码最长使用期
7 密码到期前通知天数
0 密码失效宽限期( 0 :立即锁定账号, -1 :永不锁定, >=1 :宽限多少天)
14129 账号到期日期
  保留
/etc/login.defs:创建新用户的模版信息 /etc/skel/:用户家目录的登录文件(.bashrc,.bashprofile,.bash_logout)

9.组管理 groupadd:添加组

    #groupadd -g 500 teacher //创建组并指定组id
    #groupadd -f -g 501 student //强制创建组student
    #groupadd -r testgroup //创建系统组
groupmod:修改组信息
    #groupmod -n students student //修改组名为students
groupdel 组名
    #groupdel students
组相关文件
/etc/group

组名 组密码 gid 组成员
teacher X 500  

10.权限管理 主要组

每个用户只能隶属于一个主要组,主要组(私有组)是用户创建文件时默认的所有组
附加组
用户可以同时隶属于多个附加组(31个,连主要组一共32个组),附加组主要用于权限管理。
不论用户属于哪个组,用户都能拥有组的权限
例:
    #useradd mandy
    #useradd erien
    #useradd kevin
    #chmod 777 /opt
    #su - mandy
     $touch /opt/file1
     $ll /opt/file1
     -rw-rw-r-- 1 mandy mandy 0 May 29 16:39 file1
     $exit
     #usermod -G mandy erien
     #su - erien
     $echo ‘aaa’ > /opt/file1
     $cat /opt/file1
     aaa
     $exit
     #su - kevin
     $touch /opt/file2
     $ll /opt/file2
     -rw-rw-r-- 1 kevin kevin 0 May 29 16:42 file2
     $exit
     #su - erien
     $echo ‘bbb’ > /opt/file2
     $exit
     #usermod -G mandy,kevin erien
     #su - erien
     $echo ‘bbb’ > /opt/file2
     $cat /opt/file2
权限分三等级:用户、组、其它人。每个权限位分为读、写、执行三种。
#ls -l 
-rw-r–r-- 1 root root 3341 Apr 24 18:25 install.log.syslog
drwx-r-xr-x 2 root root 4096 Apr 25 10:07 dir1
umask:查看用户权限掩码
#umask
chmod:修改文件、目录权限
#chmod u=rwx[,g=rwx,][o=rwx,][a=rwx] install.log 修改文件权限
#chmod u+w install.log
#chmod g-x install.log
#chmod o-rx install.log
#chmod a=rw install.log
u 用户权限,g 组权限,o 其它人权限,a 所有人权限

权限数字表示法:

访问方式 英文表示法 数字表示法
读取 R 4
写入 W 2
执行 X 1
chown:修改文件、目录的所有者。只有root可以修改任意文件的所有者。 #chown kevin install.log #chown kevin.teacher dir1 chgrp:修改文件、目录的所有者组。文件所有者可以使用该命令修改对象的所属组,但只能是修改成自己的主要组。root用户可以不受上述限制。 #chgrp teacher install.log 权限扩展练习:(该练习以student用户登录系统,权限对root无效) cd:进入指定目录 ls:列出指定目录下的信息 touch(空文件):在指定目录内创建空文件 touch(时间戳):在指定目录内修改子对象的时间戳,用stat进行验证 rm:删除指定目录内的对象• chmod:修改指定目录内的对象权限 可以执行的在空格内填√,不可执行的填x,执行结果未知的填?
目录名 权限 cd ls touch

( 空文件 )

touch

( 时间戳 )

rm chmod
r-- 400 X ? X X X X
rw- 600 X ? X X X X
rwx 700
r-x 500 X X
-wx 300 X
-w- 200 X X X X X X
--x 100 X X X

总结:
cd:需要执行权限X
ls(ll):需要读取权限R和执行权限X
touch(空文件):需要写入权限W和执行权限X
touch(时间戳):需要执行权限X
rm:需要写入权限W和执行权限X
chmod:需要执行权限X

11.使用帮助
help命令或-h选项
help命令或-h选项针对shell内部命令,提供简短的命令使用方法,主要是命令语法结构
    #help pwd
    #pwd -h
–help选项
–help选项针对shell外部命令,和help命令提供相同的帮助信息
    #useradd --help
man
man(manual pages)俗称手册页,提供命令的详细帮助信息
    #man useradd
    #man -k 关键字 //按关键字查询man,显示那些man页包含该关键字
    #man -K 关键字 //按关键字查询,依次询问是否需要查看该man信息页
使用-k查找需要重构whatis数据库,使用makewhatis手动重构该数据库,whatis数据库在每天晚上会自动重构。可参阅/etc/crontab
man手册页号(man 9 和man 0在RHEL 6.0以后支持):
手册页号 说明 手册页号 说明

手册页号 说明 手册页号 说明
1 用户命令 2 系统调用
3 库调用 4 设备
5 文件格式 6 游戏
7 杂项 8 系统管理命令
9 内核 0 最新

使用manual pages时,可以通过编辑/etc/man.config来指定man的搜索路径,manual pages默认按如下路径进行搜索:

其中:
p:表示POSIX字符集
n:表示新特性
l:表示本地相关
o:表示老的manual pages相关
x:表示与图形相关
info
info(information)信息页,提供命令的详细帮助信息
info中所有的节点链接都有前缀*,可以使用tab转移到下一个链接,使用enter转移到选中的链接,使用n/p/u在info的下一个节点/前一个节点/上一级节点间跳转。
#info useradd

暂无评论

登录后可以进行评论。没有账号?马上注册