Linux用户环境
.内核(Kernel)--控制硬件的运行
计算机启动载入基本内存及管理基本的输入输出并管理进程初始化与进程之间的调度
.Sheel --中间环节,通信桥梁
系统的命令解释器,操作系统与用户的通信(如windows中的CMD)
.终端模拟器(Terminal Emulator)
用户SHELL运行的平台,可以交互操作系统信息得到信息反馈
.X Window系统
c/s模型
.窗口管理器(Window Manager)
改变窗口大小
.桌面环境(Desktop Environment)
本地登录(字符与图形界面的登录)
.Red Hat Linux release 9.0 (Shrike)
.Kernel 2.4.20-8 on an i686
.login:root(用户名)
.password:____(密码)
.[root@stationxx root]#
.[当前用户名@主机名 当前目录]
.提示符因用户而异,普通用户$
root超级用户,拥有最高权限
.home目录是用户登入系统后即所在的默认目录
加目录,用户登录所在目录,一般用户目录在home中 【用户颜色深蓝色】
.#useradd[用户名]
.#password[用户名] ---激活创建用户
.example:
.[root@stationxx root]#useradd student
.[root@stationxx root]#passwd student
.Changing password for user student
.New password:输入密码
.Retype new password:重复新密码
.passwd:all authentiacation tokens updated successfully
--------发出警告坏密码,普通用户创建不成功,root用户创建可以
.[root@stationxx root]#
.指令名【选项】 【参数】--选项和参数不是必须的,可选项
例如:ls -l /etc/X11 --查看文件内容,并以长模式查看
.帮助和在线帮助
指令--help
例如:mknod --help
man 指令 --相对于help更加详细
例如:man mknod
info 指令 --相对于man更加详细
例如:info mknod
基本指令(一)
.man 的使用技巧 --遇到困难就找man
man -k keyword
man -f keyword
man -a keyword
man -n keyword
----------------------------------------通过man page(说明文件) ls/usr/share/man调用这一目录的说明信息
man page有9各章节 重要的(1用户指令 5文件格式 8超级管理员使用命令章节)
man 1 passwd /Q离开 默认显示1章节
基本指令(二)
.ls - 查看文件
ls -l 长文件模式 ls -a 隐藏文件或目录
.cp - 拷贝文件
例如:ls /etc/
文件:cp /etc/php.ini .(拷贝到当前)
目录:cp -r /etc/X11/ .(拷贝目录加-r选项)
.mv - 移动或重命名文件
例如:移动同时改变名字
mv /etc/host.conf .(移动当前目录)
mv host.conf /etc
mv php.ini /etc/php.txt(移动并改名)
.rm - 删除文件
例如:rm -f php.txt (直接删除不提示是否删除)
.touch - 创建空文件或更新文件时间
例如:touch test.txt
touch install.log (更新文件时间)
.cd - 改变当前路径
例如:cd 绝对(以根目录开始的)或相对路径(不重根目录开始,根据当前路径决定)
cd /home
cd dev
cd .. 返回上层目录
.pwd - 查看当前完整路径
例如:用户当前的绝对路径
.mkdir - 创建新目录
例如:mkdir test
.rmdir - 删除空目录
例如:rmdir test
mkdir test
cd test
touch test.txt
rmdir test (不能删除非空目录)
rm -rf test (强制删除)
基础指令(四)
.cat - 查看文件内容
例如:cat /etc/services
.more - 逐屏查看文件内容
例如:more /etc/services Q退出
.less - 逐行查看文件内容
例如:less /etc/services (相对)
.date - 显示当前时间
.cal - 显示日历
基础指令(五)
.df - 显示磁盘用量
例如:df
df -h 以单位方便显示查看
.du - 计算目录下文件占用磁盘的大小
例如:du /etc/services
du -h /etc/services(以单位显示)
基础指令(六)
.head - 显示文件开头部分内容
例如:显示文件前十行内容
head 20 /etc/services
.tail - 显示文件结尾部分内容
例如:显示文件最后十行内容
tail -f 【参数】 查看日志文件及时更新message
设备文件
.设备在LINUX中以特殊文件的形式存在
.块(block)设备文件 -- (硬盘)
.字符(character)设备文件 --(键盘鼠标)
.设备文件所在位置
.查看设备类型
文件代表设备 cd /dev(存放设备文件)
.在系统中有12个虚拟控制台,前6个可供用作本地登录
.用户可以用Alt+Fn(n=1~12)来切换
------vi /etc/intittab 更改虚拟控制台登陆(禁用控制台也是)
切换图形界面Alt+F7
.用SU可以用来切换用户身份
. 如su - username
su jack 这样环境变量不能更该 --env
离开系统
.重启
reboot --只能超级管理员才能使用
shutdown -r now
init 6
.关机
halt
shutdown -h now
poweroff
init 0
文件
检查文件
.用ls -l以长模式查看文件的详细信息
包括当前目录的硬盘使用空间、文件类型、文件权限、硬连接数、文件拥有者、文件所属组、文件大小、变动时间、文件名。
例如:ls -l
.用file检查文见类型
由于Linux中的文件名中没有扩展名,所以可能需要用file来查看文件类型
例如:file install.log
文件类型
.在Linux中,所有东西都被当成文件
引用unix风格
.文件权限前的第一个字母用来标识文件类型
-:一般文件
d:目录文件
b:块设备文件
ls -l /dev | more 管道查看
c:字符设备文件
l:链接文件
相当于window中的快捷方式
p:人工管道
用于不同进程的信息传递
.对于每一个文件,Linux都提供了一套文件权限系统
.文件权限系统,将操作文件的用户都分成三类
文件的拥有者(u)
文件所属组的成员(g)
其他用户(o)
.对于每一类用户,权限系统又分别提供他们三种权限
读(r):用户是否有权力读文件的内容
写(w):用户是否有权力改变文件的内容
执行(x):用户是否有权力执行文件
例如:-(文件类型一般文件)rw-r--r-- 1 root root
改变文件权限
.使用chmod来改变文件的当前权限
例如: 421 421 421
rw- r-- r--
U G O
用户 组 其他
chmod u+x install.log 添加执行权限
chmod u-x install.log 去掉执行权限
更改所属群组权限
chmod g+w install.log 添加读取权限
或
chmod g=rwx install.log
或
chmod 6(读写)4(读)4(读) install.log
更改其他人的权限
chmod o+w install.log
.chmod [-R] 权限 文件
例如:chmod -R 【目录】 (用在更改目录的权限上)目录内的文件也会随着目录一起更改权限
.只有文件的拥有者和root才可以改变文件的权限
使用数字来改变文件权限
.chmod后可以用三个数字来表示用户权限
第一位代表文件拥有着权限
第二位代表文件所属组成员权限
第三位代表其他用户权限
第一个数字都采用加和的方式
4(读)、2(写)、1(执行)
建立链接
.ln
.硬链接
语法:ln源文件 新建链接名
特点:完全等同源文件(新建的链接文件和源文件是一摸一样的都指向相同的物理地址,不可以跨文件建立链接也不可以给目录建立链接)
例如:cd /home
touch test.txt
cd ~
ln /home/test.txt tom.txt
echo "hello" > /home/test.txt -- 向文件中添加内容
cat /home/test.txt -- 打开文件
cat tom.txt -- test.txt里的文件内容=tom.txt里的文件内容
rm -f /home/test.txt -- 删除源文件
cat tom.txt -- 能正常打开(单独的文件,防止文件误删除而建立的硬链接)
.软链接
语法:ln -s 源文件 新建链接名
特点:相当于为源文件建立的快捷方式(等同于windows中文件的快捷方式,可以跨文件也可以为目录建立链接)
例如:touch /home/test.txt
echo "hello weed" > /home/test.txt
cat /home/test.txt
ln -s /home/test.txt jack.txt
ls -l -- 查看创建的链接文件
cat jack.txt
rm -f /home/test.txt
cat jack.txt -- (不能打开文件,源文件已经损坏,相当于jack.txt只是为test.txt创建的快捷方式)
例如:给目录做链接文件
ln /home/jack/ /jack1 -- 给目录做硬链接不成功
ln -s /home/jack/ /jack1 -- 给根目录下的文件目录创建软链接
cd / -- 进入根
ls
cd jack1
touch jack.txt /home/jack/ -- 在jack下面创建文件
ls -- 可以看到jack1里有jack.txt(软链接创建成功)
ext2/3中文件的构成
.在ext2和ext3文件系统中,文件以inod+dlock(块)的方式存在
.一但用rm指令删除文件中的inode记录,文件无法被找回。
.stat指令可以用来检查文件的block与inode状况。
所属用户
.每一个文件都有一个拥有者,文件的拥有者可以改变文件的权限
.root用户可以用chown来改变文件的拥有者。
例如:chown teacher(系统用户) install.log (Linux操作系统必须有指定的用户)
所属组
.每一个文件只能属于一个指定的组
.文件的拥有者与root用户,可以用chgrp来改变文件所属组
例如:chgrp teacher install.log -- 更改所属组
ls -l
或
chown root:root install.log -- 更改所属组
文件名
.文件名最大为255个字符 -- 创建文件名的最大字符
.开头为.的文件为隐藏文件
例如:查看隐藏文件 ls -a
目 录
.目录在文件类型上用d标识
例如:查看目录信息:ls -ld test1
.用/分隔目录层 (上下层子目录) cd test1/test2
.Linux操作系统都有且仅有一个起始目录,我们用一个单独的/来表示,称其为根目录。(分布式文件系统结构)
.对每一个shell和操作环境,都有一个当前工作目录。
.文件与..文件
.在每一个目录下都有一个.文件与..文件。
..文件是对当前目录的一个硬链接
...问件是对上级目录的一个硬链接
例如:ls -a -- 查看.文件..文件 -- pwd
目录权限
.目录也是一种文件
.目录上的读写执行权限与普通文件有所不同
.读:用户可以读取目录内的文件
.写:单独使用没有作用,与执行权限连用可以在目录内添加与删除文件
.执行:用户可以进入目录,调用目录内的资料
例如:ls -ld test
chmod 777 test(在根目录下做的权限更改所以不要/) -- 更改权限
su - teacher -- 切换用户
cd /test -- 进入目录
ls
touch test.txt -- 创建文件
ls
cd ..
su - root -- 切换用户
chmod 775 /test -- 更改目录权限
su - teacher -- 切换用户
cd /
ls -ld test -- 查看权限
cd /test -- 进入目录
ls
touch test1.txt -- 没有权限创建文件
su - root
chmod 771 /test -- 在更改为771的权限
su - teacher
cd /test
ls -- 这是会提示拒绝访问此内容
su - root
chmod 776 /test
su - teacher
ls -ld /test
cd /test -- 这是不能进入此目录
echo "hello" >/test/txt.txt -- 虽然有写的权限但此时不能写入内容,要同时具备写和执行的权限才行
强制位与冒险位
--除了读写执行权限以外,ext2文件系统还支持强制位(setuid和setgid)与冒险位(sticky)的特别权限。
--针对u,g,o,分别有set uid,set gid,及sticky。
--强制位与冒险位添加在执行权限的位置上。如果该位置上原已有执行权限。则强制位与冒险位以小写字母的方式表示,否则,以大写字母表示。
--set uid与set gid在u和g的x位置上各采用一个s,sticky使用一个t。
set gid对目录的作用
.默认情况下,用户建立的文件属于用户当前所在的组。
例如:touch test1.txt
ls -l test1.txt
id root -- 默认属于默认组
.目录上设置了setgid,表示在此目录中,任何人建立的文件,都会属于目录所属的组。
例如:rm -rf test
mkdir test
ls -ld test
chgrp teacher test -- 更改所属组
cd test
touch test.txt -- 创建文件
ls -l -- 查看所属组还是属于创建人所在的组
cd ..
ls -l
chmod g+s test -- 添加set gid权限
ls -ld test -- 查看到有小写s代替执行权限位
mkdir test1
chmod 745 test1
ls -ld test1
chmod g+s test1
ls -ld test1 -- 查看到大写S代替执行权限
ls -l test
chmod g+s test -- 更改目录权限
cd test
touch test1.txt
ls -l -- 查看到test1.txt的所属组为teacher(这就是强制位set gid的作用)
冒险位对目录作用
.默认情况下,如果一个目录上有w和x权限,则任何人可以在此目录中建立与删除文件。
例如:ls -ld /tmp
chmod o-t /tmp -- 去掉冒险位权限
ls -ld /tmp
su - teacher
cd /tmp
touch test.txt -- 创建文件
ls -l
su - test -- 切换普通用户
rm -rf /tmp/test.txt -- 能删除文件因为目录权限有读写执行权限
.一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件
例如:su - root
chmod o+t /tmp -- 设定冒险位
su - teacher -- 切换用户验证
cd /tmp
touch test.txt -- 创建文件
su - test -- 切换普通用户
rm -rf /tmp/test.txt -- 删除文件发现不能删除文件因为设置了冒险位(但是本用户teacher可以删除)
强制位对文件的作用
.在可执行文件上,用户可以添加set uid可set gid。
.默认情况下,用户执行一个指令,会以该用户的身份来运行进程。
例如:which ping
ls -l /bin/ping -- 查看文件权限上设置了set uid
su - jack
ping 127.0.0.1 -- 一般用户使用指令会成功(以ROOT的身份执行此指令)
su - root
chmod u-s /bin/ping -- 去掉用户的set uid权限
ls -l /bin/ping
su - jack
ping 127.0.0.1 -- 不能使用此指令了(虽然有执行权限但是用户的强制位权限去掉了)
su - root
chmod u+s /bin/ping
su - jack
ping 127.0.0.1 (现在能ping通了,以root用户身份执行指令)
passwd 也是指令
.指令文件上的强制位,可以让用户执行的指令,以指令文件的拥有者或所属组的身份运行进程
设置强制位与冒险位
.用户可以用chmod指令来为文件这只强制位与冒险位
.set uid:chmod u+s 文件名
.set gid:chmod g+s 文件名
.sticky:chmod o+t 文件名
.强制位与冒险位也可以通过一个数字加和,放在读写执行的三位数字前来指定
.4(set uid) -- 只能对文件设置
.2(set gid)-- 目录上文件上都可设置
.1(sticky)-- 只能在目录上设置
例如:chmod 4777 word.txt
chmod 0777 word.txt -- 去掉set uid
chmod 2777 word.txt
chmod 6777 word.txt -- 同时设置uid、gid
chmod 3777 test -- 同时设置强制位和冒险位
umask
.每个用户建立文件时,此文件都会有默认权限(没有umask的情况下文件的权限是rw-rw-rw-目录权限是rwxrwxrwx)
.默认权限的值由环境中的umask值来确定
例如:查看umask值:umask //umask -s
.用户可以自主改动umask值,并在改动后建立的文件上得到体现
例如:umask 003(3代表写和执行权限)
.一般用户的默认umask值为002,系统用户(root)的默认umask值为02(代表写w)2(代表写w)
例如:umask 位 0022 第一位为强制位或冒险位
文件真实权限是rw-rw(减w)-rw(减w)-得出rw-r--r--权限
目录真是权限是rwx-rw(减w)x-rw(减w)x得出rwxr-xr-x权限
su - teacher
umask 位 0002 第一位为强制位或冒险位
文件真实权限是rw-rw-rw(减w)-得出rw-rw-r--权限
目录真是权限是rwx-rwx-rw(减w)x得出rwxrwxr-x权限
根目录下的目录(一)
/bin:存储常用用户指令
/boot:存储核心、模块映像等启动用的文件
/dev:存储设备文件
/etc:存储系统、服务的配置目录与文件
/home:存放个人主目录
/lib:存放库文件,诸如核心模块、驱动
/lost+found:存储fsck用的孤儿文件
/mnt:系统加载文件系统时用的常用挂载点
/opt:第三方工具使用的安装目录
/proc:虚拟文件系统,包含系统讯息等资料
/root:root用户的主目录
/sbin:存储系统管理用指令
/tmp:临时文件的暂存点 /回收站
/usr:存放与用户直接相关的文件与目录
/var:存储在系统运行中可能会更改的数据
过滤器、输入输出及管道
过滤器
.Linux中的应用工具分为三种
.交互工具
.过滤器---重点
.编辑器
.能够接收数据,过滤再输出的工具,称为过滤器
.对过滤器和进程,存在着输入源与输出对象
输入、输出、重定向
-输入:过滤器的数据来源
---标准输入stdin(0):默认是键盘》linux提供
-输出:过滤器的数据去向
---标准输出stdout(1):默认是终端屏幕》linux提供
-错误输出:报错讯息与标准输出走不同的I/O通道
---标准错误输出stderr(2):默认是终端屏幕》linux提供
例如:ls -l 标准的输入
所列出的详细信息就是标准的输出
ls-l之间没有空格 --标准的错误输出
标准输入输出对应定的文件
ls -l /dev/std*
执行时会从标准的输入中得到正确的输入数据然后从标准的输出中输出文件,如果有错误的信息它会把错误的输入输出文件输入到标准的错误输出里去
-重定向:标准输入、输出与错误输出,都可以用特定符号改变数据来源或去向 --用作文件的导入导出
输入重定向
.使用“<”来重定向输入源
command < file(文件) -- 原有需要用键盘来输入的数据通过文件来读取
例如:ls -a
cat .bash_profile -- 将这文件中的大写字母变成小写的文件内容
tr 'A-Z' 'a-z' < .bash_profile
.大多数工具都会以其后的文件名为输入源
.有一些过滤器一定需要添加 < 以明确输入源
从当前文档输入
.使用 << 让系统将一次键盘的全部输入,先送入虚拟的“当前文档”,然后一次性输入
.需要一对字母、符号或字符串作为起始终结标识符
.可以选择任意符号作为起始终结标识符
例如:cat > cat.file < >this is test
>!
输出重定向
.使用>改变数据输出目标
.例如:
.ls -l > listfile
.将当前目录下的文件以长模式显示,然后写入listfile文件
ls -l > lsfile
cat lsfile -- 标准的输出信息已经输出到lsfile中
.文件已有内容会被消除(原有内容覆盖掉)
ls -al > lsfile
覆盖与追加
-使用>进行输出重定向,文件的原有内容会被覆盖
-ls -l > listfile
-使用>>,可以将输出追加入文件(不会覆盖掉原文件)
-ls -al >> listfile
错误输出重定向
.系统错误与标准输出使用的I/O管道不同
.默认情况下,系统报错会显示到终端屏幕上
.使用2>将报错讯息重定向入一个文件
.find / -type s 2> /dev/null
例如:ls-l > test
ls-l 2> test
cat test
.使用2>>将错误讯息追加入一个文件
.find / -name passwd 2>> results
双重输出重定向
.使用>和2>可以将一次操作的正确、错误输入,被单独的送到不同的地方
.find / -perm -2 2> error > results
例如:su - teacher
find /etc -name passwd -- 查找名为PASSWD的文件(会同时输出正确和错误的输出)
find /etc -name passwd > stdout
cat stdout -- 标准的正确信息
find /etc -name passwd 2> stderr --将错误信息输出显示正确的信息
cat stderr
find /etc -name passwd 2> stderr > stdout -- 同时重定向正确和错误的输出
cat stderr -- 显示错误信息
cat stdout -- 显示正确信息
.使用&>将所有输入都送向同一个地方
.find / -perm +6000 > file
例如:find /etc -name passwd &> allout -- 重定向到同一个地方
cat allout
或
find /etc -name passwd > allout 2>&1(推荐使用)
管 道
.使用|将前一个过滤器的输出直接送入一个过滤器的输入
.ls -l | grep(截取) pass (第一个命令的输出作为第二个命令的输入通过管道以此)
例如:ls -l /etc | more -- 可以翻页查看效果
ls -l /etc | more | grep fstab -- 截取fstab的这个文件(屏幕输出管道最后一个命令的执行)
.允许多重管道
.注意管道前过滤器的输出与管道后过滤器的输入数据类型匹配
重定向、管道的常用范例
.ls -l | more
.分屏显示当前目录下的文件
.cat < filea > fileb
.拷贝filea到fileb
例如:echo "hello" > filea
cat filea
touch fileb
cat < filea > fileb
cat fileb
.cat file.* > file
.将数个小文件合并成一个文件
例如;cat filea;cat fileb
cat filea fileb > file
cat file
或
cat file* > file1
cat file1
文件查找与文件管理
可执行文件的搜索
.which
.显示一个可执行文件的完整路径
.按照alias(别名) -> $PATH的顺序查找 -- 查找顺序
例如:which ls
echo $PATH
.whereis(相对于which更加完整)
.搜索一个可知性工具及其相关配置、帮助
例如:whereis ls
slocate
-语法:
- slocate [关键字段]
- locate [关键字段] (符号链接,需要更新数据库)
-所有文件名及其所在路径包含关键字段的文件与目录都会显示
-slocate现将当前目录结构做成一个数据库,然后再在此数据库中搜索匹配记录
例如:ls -l /usr/bin/locate
slocate passwd
vi /etc/update
updatedb -- 更新数据库
slocate passwd
find
.语法:
.find 【路径】【参数】【表达式】(及时性,速度慢)
.从指定路径下递归向下搜索文件
.支持按照各种条件方式搜索
.支持对搜索得到的文件进一步用指令操作
find指令常用【参数】-user(文件用户),-group(文件所属组),-nouser(没有文件拥有者的文件),-nogroup(没有文件所属组的文件),-name(文件名),-perm(文件的权限),-size(文件大小),-type(文件类型f(一般文件)b(块文件)c(字符文件)d(目录文件)l(链接文件))
例如:find /root -user root -- 查找拥有者是root的用户(查找相关拥有者的文件)
find /root -group root -- 查找所属组是root用户的文件
find /etc -name services -- 按照名称查找
find /etc -size +(大于)-(小于)1000k -- 查找文件大小大于1000k的文件
find /root -type f (一般文件)
find /dev -type b (块设备文件)
find /etc -nouser (没有用户)
find /etc -nogroup (没有群组)
cd /
cd /home
touch test1
ls -l
find /home -perm 0644(查找权限是0644)
---------------------------------查找set uid,set gid的操作方法
mkdir test
cd test
touch 6000(110000000000000)
touch 2000(110110000000000)
touch 6600(010000000000000)
touch 4000(100000000000000)
chmod 2000 2000 set gid
chmod 4000 4000 set uid
chmod 6000 6000 set gid-set uid
chmod 6600 6600 用户拥有读写执行及set gid和set uid
find /root/test -perm 6000(十六进制转二进制)
find /root/test -perm -(缺一不可)6000
find /root/test -perm +(有1的位置有1就可)6000
操作找到的文件
-语法:
-find 【路径】【参数】【表达式】
-exec 指令 {} \ ;
-{}代表find找到的文件
-\禁止转意
-;表示本行指令结束
例如:find /root/test -perm 6000
find /root/test -perm chown jack.jack {} \;
常用的文件操作指令
-wc -- 统计文件的行、词、字数
例如:wc abc
wc -l abc 只统计行数
wc -w abc 只统计字数
wc -c abc 只统计字符数
-grep -- 显示文件中匹配关键字的行
例如:grep "a" abc
grep -n "a" abc 同时输出行号
grep -v "a" abc 反向查找除去a外的查找
-sort -- 按序重排文本并送出显示
例如:sort -r 反向排列
sort -t 设定两位间的间隔符号
sort -k 设定将哪一栏做排列
cat /etc/passwd
sort -t ; -k3 /etc/passwd
常用的文件操作指令(二)
- diff --- 报告文本差异内容
例如:diff ABC abc(文本内容的差异)
- comp --- 报告文本差异位置
- uniq --- 去除文件中重复的行
例如:uniq a
sort file | uniq file
- cut --- 显示文件中的某一列
例如:cut -f3 cut(file) 对第三栏进行显示
cut -f2 -d, cut1 (file)截取第二栏
cut -c4-8 cut1 截取第四道第八的字符
- paste --- 将文本按列拼接(不同文件拼接)
例如:paste abc ABC > merge (水平拼接)
cat abc ABC > merge1(垂直拼接)
压缩
gzip,gunnzip -- 只对文件不能对目录配合tar可以压缩目录
.Linux标准压缩工具
.对文本文件可以达到75%的压缩率
例如:gzip services -- 压缩services文件
gunzip services.gz
或 ===
gzip -d services.gz -- 解压
zcat services.gz -- 查看压缩文件里的内容
compress uncompress -- 少用旧的,目录和文件都可以压缩
.旧的Unix压缩工具
bzip2,bunzip2 -- 只能压缩文件配合tar可以压缩目录
.更新的Linux压缩工具
.比gzip有着更高的压缩率
例如:bzip2 services -- 压缩services文件
bunzip2 services.bz2 -- 解压
或 ====
bunzip2 -d services.bz2 -- 解压
bzcat services.bz2 -- 查看压缩文件里的内容
tar -- 标准的打包的命令
用于在磁带机、软盘、zip设备上做备份。也可以备份在一个硬盘文件上。
主要参数:
.c:将文件备份出来
.v:将过程输出
.x:从一个文件中解出备份
范例:
.备份:tar cvf backup.tar *.txt
.解压:tar xvf backup.tar -C backup/
例如:tar cv(f(打包后的文件名)) test.tar test
tar cfv(rh4版本后不要求f放在后面) install.log.tar install.log test -- 多个文件打包
tar xvf test.tar -- 解压打包文件
tar t(参数)f test.tar -- 查看包文件里的内容
tar cvf install.log.tar install.log -C /home -- 打包后的文件指定到另一个目录
配合压缩工具使用
tar zcvf test.tar.gz test -- 使用gz压缩
tar zxvf test.tar.gz -- 使用gz解压
tar jcvf test3.tar.bz2 test -- 使用bz2压缩
tar jxvf test3.tar.bz2 -- 使用bz2解压
tar zxvf /dev/floppy test -- 备份到软盘上面
dump/restore
-备份与还原ext2/3文件系统 (分区备份)
-不可以在其他文件系统上使用
-可以选择进行完全备份或增量备份
-范例:
-dump -0(完全备份)u(备份顶层目录而不是子目录) -f(指定备份到哪) /var/tmp/hda2dump /dev/hda1
备份等级(0-9)0以后更新备份
例如:dump -0u -f /tmp/dump1 /test -- 备份不成功因为是子目录
dump -0 -f /tmp/dump1 /test
ls -l /tmp -- 查看完整备份的目录
df
dump -0u -f /tmp/bootdump /boot -- 备份整个目录
ls -l /tmp -- 查看备份文件
cat /etc/dumpdates -- 查看备份记录
----------------备份文件
例如:dump -0 -f /tmp/install.log .dump install.log
ls -l /tmp -- 查看备份文件
cat /etc/dumpdates -- 没有备份记录因为没有u的参数
-restore -r(还原操作)f(指定备份文件)t(列出备份文件内容) /var/tmp/hda2dump
例如:restore -tf /tmp/install.log.dump
cd /tmp
mkdir mkdir
dump -0 -f /root/mkdirdump /mkdir
ls /root
rmdir mkdir
restore -rf /root/mkdirdump -- 还原到当前目录(在哪个目录还原就还原到当前目录)
cd /
restore -rf root/mkdirdump
BASH
shell 简介
.shell:命令行解释器,使用户与系统沟通的媒介
.在Unix系统中有各种shell,Linux采用bash为其默认shell
.系统可以使用的shell记录在/etc/shells中
bash
.bash:Bourne Again Shell的缩写
.GUN计划的一个组件
.与Unix上的Bourne Shell完全兼容
.支持命令行输入、操作历史查询、快捷键、使用变量等功能
预定义环境变量
.在bash中有很多预定义环境变量
.系统通过预定义环境变量来定义shell的环境
.用户可以用set或env查询当前环境变量
.常用的预定义环境变量:
.HOME:当前用户的主目录
.PATH:当前用户的可执行文件搜索路径
.LANG:(出现乱码使用)程序应该使用的默认语言
.PS1:行提示符[root@test ~]# 命令提示符
例如:设定变量
a=boobooke
echo $a 获取变量值
echo ${a} 获取变量值--推荐使用获取方法避免混淆
如:a=$a123 增加123在a变量后
echo $a 获取是但获取不到为空(系统认为变量是a123)
a=boobooke
a=${a}123 -使用大括号增加123
echo $a
删除变量
unset a
变量分本地变量(set用于当前shell)和环境变量(env大写的用于全部的工作环境中)
进入用户加目录
cd $HOME
echo $PATH -- 系统搜索PATH路径
LANG=en -- 设置英文语系
locale -a -- Linux支持的所有语系
echo $PS1(\d代表日期)(\H代表完整的主机名)(\h获取主机名的第一个单词)(\t获取时间24小时时分秒)(\T代表时间12小时)(\A24小时的格式时分)(\u代表当前用户账户名称)(\v版本信息)(\w代表完整的工作目录名称)(\W利用basename获取工作目录最后的目录名 basename /etc/X11街区路径最后文件名)(\#执行的第几个命令)(\$提示符)
例如:PS1='[\u@ \H \w \A \#]\$'改变PS1环境变量
例如:手动变量转换成环境变量
export a
history
.在bash中输入history指令可以查询用户的过往操作
.内存中记录的过往指令数根据环境变量中HISTSIZE而定
例如:查看可存操作指令数echo $HISTSIZE
.history表存储在内存中,在用户logout时会记录入用户主目录下的.bash_history文件中,在下次login时载入
例如:history -w 强制将过往命令写入.bash_history
..bash_history中的指令数根据环境变量中的HISTFILESIZE而定
例如:echo $HISTFILESIZE
调用过往指令
.使用!来调用过往指令
.!!:重复执行上一条指令
.!a:重复执行上一条以a为首的指令
.!number:重复执行上一条在history表中记录号码为number的指令
.!number:重复执行前第number条指令
.可以用(效率的查找使用过的命令)来在history表中查询某条过往指令
例如:!e -- 执行最近的
!31 -- 执行第31条指令
!! -- 执行上一条命令
ping 127.0.0.1
!$ -- 截取命令行的最后一行(127.0.0.1)
ping !$ -- 持续ping 执行命令
幻灯片六十一:
alias(别名)[用别名代替长串的命令]
.在shell下键入alias可以查询当前alias列表
.用户可以alias来为一条命令去一个简单别名
.用户也可以用unalias来取消一条别名记录
.alias记录在shell中总是先行
例如:ll=ls -l
alias
rm install.log = rm -i install.log (提示是否删除文件)
手工创建别名:ls -al = alias a='ls -al'
取消别名:unalias a
命令行表达式
.命令行输出-------“”
.将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,则转义
例如:echo a adsd
echo "a adsd"
echo (asd -- 不能输出
echo "(asd" -- 能输出把大括号当成一般字符对待($\`!)这四个字符不能禁掉
echo "$PWD" --
.命令行输出-------‘’(可以禁止所有字符包括上四个特殊符号)
.将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,不转义
例如:echo '$PWD' -- 可以输出内容
.执行引用符-------··(先行符号)
.引用命令的执行结果
例如:ls -al `pwd` -- 先执行PWD在执行ls -al
命令行表达式(二)
.数学运算-----$[]
.在中括号内的表达式会被数学计算
例如:echo $[1+4] -- 计算结果为5赋予临时变量
.逸脱符-----\
.用于取消命令行中字符的特殊含义
例如:mkdir a b -- 建立目录不成功建立了两个目录
mkdir a\ b -- 建立目录成功
.用于表示一行未结束
例如:用于长命令一行输入不完的情况下
ls \
> /home
命令行表达式(三)
.命令行结束符---;
.用于在一行内分隔两个独立命令,表示一行已结束,作用相当于回车键
.pwd ; ls -l
例如:ls;pwd;ls -al
.子shell激活---()
.在小括号内的命令行表示激活一个子shell后在子shell中运行
例如:用于编写脚本
echo $HOME -- 结果为/root
HOME=/usr -- 更改HOME变量值
echo $HOME -- 结果为/usr
(HOME=/usr) -- 用括号括起
echo $HOME -- 不会把式传递给当前shell而是在子shell中运行
逻辑运算符--编写简单脚本时用到
.shell命令行支持在同一行的两条命令中插入&&(逻辑与)与||(逻辑或)
.&&:当前一条指令执行成功时再执行后一条指令
.||:当前一条指令执行失败(不成功)时再执行后一条指令
例如:提供判断功能&&
ls /home && touch /home/test1
ls /home -- 执行成功
提供判断功能||
ls /root/test1 || mkdir test1
ls /root -- 执行成功创建test1
ls /root/test && echo "exist" || echo "no exist" -- 成功或不成共所返回的结果
ls /root/test || echo "exist" && echo "no exist" -- 返回exist,no exist因为命令执行成功但不能达到一个判断的功能
commmand1 && command2 || command3 -- 排放顺序
登录shell--当用户登录linux所取得的shell;图形界面的超级终端就是非登录shell,当我们登录主机在执行其他shell时
.默认情况下,再shell下改变变量、umsk、alias,只在此次登录中有效。一旦logout后再login,则设定恢复初始值(退出系统时)
.一个通过登录而得到的shell,一般用户的初始shell
.在登录shell下激活的shell采用登录shell的环境设定
.登录shell从配置文件中读取其环境设定
定制登录shell
-bash 在用户登录时从四个文件中读取环境设定:
-全局设置文件
-/etc/profile (vi /etc/profile echo "/etc/profile")
作用:针对于系统整个环境设定系统环境变量,自定义变量(将变量转换为系统环境变量,对整个用户生效)
-/etc/bashrc(vi /etc/bashrc echo "/etc/bashrc")
作用:可以确定掩码umask的功能,也可以确定提示符PS1的功能,自定义变量或别名(对于系统所有用户生效)
-用户设置文件
-~/.bashrc(vi /etc/profile echo "~/.bashrc")
作用:作用等同于上bashrc(对于系统特定用户生效)
-~/.bash_profile(vi ~/.bash_profile echo "~/.bash_profile")
作用:作用等同于上profile(对于特定用户生效)
讲解登录shell:登录shell启动执行设置文件顺序首先会执行/etc/profile的文件-/etc/profile.d/*.sh-~/bash_profile-~/.bashrc-/etc/bashrc(后执行的变量会覆盖前执行的变量)
讲解分登录shell执行的顺序:~/.bashrc-/etc/bashrc(su jack非登录shell;su - jack开启一个新的shell(vi /home/jack/.bashrc)加入echo "/home/jack/.bashrc")用于查看登录顺序)
其他shell设定文件
.~/.bash_logout:在用户logout的时候自动执行
.~/.bash_history:用户login是自动读取其内容并加载到内存history记录中,logout时将内存history记录写入
./etc/profile.d/*.sh:在/etc/profile中被执行,其中的环境设定,也会被全局引用
常用快捷键
.Ctrl + d:输入已结束。在shell下相当于一个exit
例如:cat > test1
this is test1
Ctrl + d
.Ctrl + c:键盘中断请求
例如:ping 127.0.0.1 - Ctrl + c
.Ctrl + s & Ctrl + q:暂停/恢复屏幕输出
.Ctrl + l:清屏,相当于Clear
.Tab:自动补完命令行于文件名
.Tab键双击可以列出所有可能匹配的选择
系统监视
了解系统状况
.uname:显示系统信息 (uname -a 系统详细的情况)
.hostname:显示主机名
.last:列出最近的用户登录
.lastlog:列出每一个用户的最近登录情况
.free:显示内存使用状况 = vmstat
.top:系统监视器
top(预设每5秒中更新)
显示画面分两部分
一行显示系统使用时间,当前上线人数、系统的整体负载(一分钟、5、10分钟的平均负载一般不会超过1)
二行显示运行的进程数量
三行显示CPU的总负载(id值越接近100就越好)
四行五行显示物理内存及虚拟内存使用情况
六行:top进程中输入命令显示状态部分
另一部分:
系统进程的运行状态
top讲解:更改显示更新时间top -d 3
以批处理的方式运行top top -b
需要进行几次 top -b -n 2 > top.txt(-b -n的用法)
cat top.txt
进程(动态系统资源程序)
.系统通过进程来完成工作
.每一个进程都有一个独立的进程号,系统通过调用进程号来调度操控进程
.系统的原始进程是init
.init的PID总是1
.一个进程可以产生另一个进程,除了init以外,所有的进程都有父进程
理解子父进程:
ps -l - 在bash下面运行的bash产生了ps,bash是ps的父进程.
查询进程
-查询进程的指令:
ps [option]参数【-A -e】将所有的进程都显示出来【-a】列出系统上与终端无关的所有进程【-u】现实有效用户的相关进程【-x】列出完整的信息与-a【-l】长模式方式显示进程信息【-f】完整显示进程信息(ps后加-得出的内容和不加-的区别很大ps aux一般不加-)
僵尸进程讲解:应该被父进程结束的子进程但没结束掉
ps -ef / ps -l
-pstree可以用来以树状的方式表现进程的父子关系(直观显示进程关系)
例如:pstree -a(以ASCII码字符的形式显示)
LANG=en(更改语系)
-top是一个常用的系统监视工具
gnome-system-monitor图形监视工具
控制进程
-kill:-- 终止后台的进程
语法:kill [-signal](信号:数字或名称) PID向进程传送一个特定的讯号
默认为15(终结)
kill -l:列出所有可以有kill传递的讯号(9强制终止进程)(15正常结束进程)
-killall
例如:killall -9 crond -- 强制杀死进程(一批)
Ctrl + c 终结前台进程
top &放入后台运行
例如:kill ps pstree结合使用
进程的优先级
.进程的优先级,用nice值来表示(增加减少nice,负值表示高优先级正值表示低优先级,一般用户设定nice值是0-19,root设定nice值-20-19)
.nice:以一个不同的nice值来运行指令(运行命令的同时)
.nice -n num command
.renice:改变一个运行进程的nice值(正在运行)
.renice num -n pid(进程号)
例如:nice -n -5 top & -- 即将要执行的程序
renice 10 4709 -- 更该运行的nice
top 中也可修改键盘输入r然后键入4214在输入nice值-1
前台和后台
.默认情况下,一个命令执行后,此指令将独占shell,并拒绝其他输入。我们称之为前台进程。反之,则称为后台进程。
.多每一个控制台,都允许多个后台进程。
.对前台/后台进程的控制与调度,被称为任务控制
将进程丢入后台
.command &:将一个进程直接丢入后台运行
.nohup command &:将一个进程直接丢入后台运行,而且在该控制台退出后,进程仍不挂断
.Ctrl + Z:将一个正在运行的前台进程暂停,并丢入后台
例如:top &
vi top.txt
Ctrl + Z - 执行
工作
-jobs:列出系统当前的后台进程
例如:jobs -l(列出PID)
-fg:将后台进程拉回前台
例如:fg(默认取回+的作业)或fg %跟作业号(%号可有可无)
-bg:激活后台暂停的进程
例如:bg %1 ;jobs(后台暂停进程激活)
/proc目录
-/proc目录是一个虚拟的文件系统,包含了来自正在运行着的核心的信息
-用户可以通过cat /proc/下的文件,来获得系统的信息(kcore不能用CAT读取因为他是一个系统内核镜像)
例如:cmdline加载内核执行的相关参数
cpuinfo记录cpu参数
devices设备相关信息
filesystems加载的文件系统
ioports记录输入输出设置
loadavg系统负载平均值
meminfo系统内存使用状况
modules当前已加载的驱动程序
mounts链接文件
swaps虚拟内存状况
pci总线详细情况
uptime显示系统状况
vmstat虚拟内存状况
常用目录:ide记录ide设备详细信息
net网络状态详细信息
pid以目录的形式记录在proc中读取信息进程的接口
-这些信息包括系统硬件、网络设置、内存使用,及其他一些东西
-/proc/sys目录下的文件,允许系统管理员更动,这些变动会直接影响当前核心
例如:ls /proc/sys
修改内核参数
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all(修改PING包)
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all(改回来)
------
uptime = top 第一行信息
系统日志(系统管理员每天需要检测的)
.系统日志记录着系统运行中的记录信息
.在服务或系统发生故障的时候,通过查询系统日志,可以帮助我们诊断
.系统日志可以预警安全问题
.系统日志一般都存放在/var/log目录下
常用的系统日志
/var/log/dmesg
.核心启动日志
/var/log/messages(tail -f /var/log/messages)最近发生的信息
.系统报错日志
/var/log/maillog
.邮件系统日志
./var/log/xferlog
.FTP服务用日志
./var/log/secure
.安全信息
.系统登录与网络连接的信息
./var/log/wtmp(二进制文件防止被修改)
.登录记录(通过last查看的也是wtmp下面的)
用户管理
检查用户身份(root用户和非root用户)
.用户可以使用下列指令了解用户身份
.who:查询当前在线的用户=(w)
.groups:查询用户所属的组
.id:显示当前用户信息
.finger:查询用户信息
.whoami:查询当前登录用户
添加用户
.用指令添加命令
.useradd
.passwd
.系统添加用户的标准步骤
.编辑/etc/passwd与/etc/group
.创建用户主目录
.从/etc/skel拷贝文件与目录
.让新用户获得其主目录与文件的拥有权限
.给新用户一个密码
更改/删除用户
1.更改用户的资料可以通过:
- redhat-config-users或kusers之类的图形界面工具来完成
- 在字符界面下可以使用usermod指令来更改
usermod使用参数【-c改变用户的全名Name:用法:usermod -c "this is teacher's username" teacher】【-d更改用户的主目录:用法:usermod -d /home/teach teacher,切换主目录但需要我们自己创建主目录mkdir teach并且更改所属组chown teacher.teacher teach及权限chmod 700 teach这样我们才可以以切换到新建的主目录中去cd ~teach】【-e设定用户密码的过期时间:用法:usermod -e "2009-01-01" teacher】【-G将一个用户添加到一个组里面:用法:usermod -G root teacher】【-g更改用户的gid:用法:usermod -g root或0 teacher】【-s更改用户的默认使用shell:用法:usermod -s /bin/csh teacher】【-u更改用户的uid:用法:usermod -u root或0 teacher】【-p修改用户密码:用法:usermod -p 密码 teacher】【-L锁定用户密码,不让用户登录:用法:usermod -L teacher)如何知道用户被锁passwd -S teacher】【-U将用户密码解锁:用法:usermod -U teacher】
2.系统管理者可以用userdel指令来删除已存在的用户
- 参数-r可以帮助系统将一个用户的目录等一并删除
例如:userdel teacher -- 但不能删除teacher用户的加目录
userdel -r teacher -- 连同用户主目录等信息一起删除掉
/etc/passwd文件
.passwd文件中记录的是个用户的登录信息
.每一行代表一个用户,用 :分割成七项,即用户的基础登录信息
.添加或删除一个用户,最基础的操作,即在passwd文件中添加或删除相应的个人记录(慎用!)
-- cat /etc/passwd | wc -l 计算有多少账户
Gid和Uid的讲解:
Uid:每个账号名称都有一个相对应的ID号码
Gid:每一个群组的名称都有一个相对应的ID号码/etc/group
passwd文件详细
.login name:登录用户名
.passwd:密码 密码与用户名单独存放(/etc/shadow)密码存放处
.uid:用户身份编号(0(系统管理员)1-99(保留给系统作为默认账号)100-499(系统默认服务账号)>500(一般用户账号))
.gid:登陆默认所在组编号
.full name:用户全名或注释
.home directory:用户主目录
.shell:用户默认使用shell
Home directory
.使用useradd时,系统会从etc/login.defs中的create home选项决定系统在建立用户的时候是否同时创建器主目录
.系统在建立用户主目录是,会将/etc/skel下的内容复制到新目录下
.最后,系统会使该目录与其下的文件属于新用户
.chown -R user.group 目录名
/etc/shadow
.目前,Red Hat Linux默认将用户木马存储在/etc/shadow文件中
.passwd文件默认权限为644.shadow文件默认权限为400
.shadow文件支持密码过期设定等功能
.shadow文件中每一行表示一个系统用户的密码记录,用 :号分隔
.用户可以通过authconfig来设定是否使用shadow文件及md5加密
shadow文件详细
.shadow文件的每一行中的每一项具体来说:
.登录用户名
.用户密码(一般经md5加密)(密码是*!表示账号被锁定不能被登录)
.从1970年1月1日起到密码上一次被更改的时间
.密码再过几天可以被变更(0表示随时可被变更)
.密码再过几天必须被变更(99999表示永不过期)
.密码过期前几天系统提醒用户(默认为一周)
.密码过期后几天账号会被取消
(:wq!强行保存退出)
.从1970年1月1日算起,多少天后账号失效
组管理
.系统中组的信息,记录在/etc/group中
.系统用户可以直接修改/etc/group文件达到更改组数据的目的,也可以使用以下指令:
.groupadd:添加一个组
例如:groupadd book
.groupdel:删除一个已存在组
例如:groupdel book
.groupmod:更改组的信息
.用户可用newgrp指令改变当前所再组
组文件(etc/group)(/etc/gshadow)
./etc/group中的每一行代表一个组,用 :隔开不同项
.group_name:组名
.password:组密码(一般不用)
.GID:组身份编号(0代表root群组,1-499系统群组,500上代表一般群组)
.user_list:组成员列表
例如:groupmod -n jack tom 更改群组名称
gpasswd jack 为群组设定密码
gpasswd -a jack boobooke把jack用户加入群组boobooke或vi /etc/group
有效群组:一个用户同时属于多个组(groups第一个输出的群组就是有效群组)[更改有效群组:newgrp tom]
初始群组:一开始默认所属的群组
{useradd -u 600 teacher为用户特定指定UID
useradd -g tom -G boobooke teacher为用户指定初始群组并加入一个群组
useradd teacher -s /bin/csh让用户不使用bash
useradd -M teacher不给用户创建加目录
useradd -m teacher创建用户的同时强制创建加目录
useradd teacher -d /teach1不让用户加目录放到/home下
useradd -r chen创建系统用户
groupadd -r groups创建系统群组}finger查看
硬件配置与管理
设备文件(为用户和应用程序提供操作应用的接口,用户只需要以操作普通文件的方式来控制相关硬件)
.Linux沿袭Unix的风格,将所有设备认成一个文件
.设备文件分为两种
.块设备文件(b)通过缓冲区存放数据512-32K字节的中继块(硬盘、光驱)
.字符设备文件(c)一次只一个字节,不需要缓冲区(串口、优盘)
.设备文件一般放在/dev目录下
常用的块设备文件
1./dev/hd[a-t]:IDE设备
2./dev/sd[a-z]:SCSI设备
3./dev/fd[0-7]:标准软驱
4./dev/md[0-31]:软raid设备
5.loop[0-15]:本地回访设备(支持本地回环请求)
6.ram[0-19]:内存
常用的字符设备文件
./dev/null:无限数据接收设备(黑洞功能)
./dev/zero:无限零资源
./dev/tty[0-31]:虚拟终端
./dev/ttyS[0-9]:串口
./dev/lp[0-3]:并口
./dev/console:控制台
./dev/fb[0-31]:framebuffer(显卡数据传输)
常用的符号连接设备文件
./dev/cdrom→/dev/hd[a-t],sd[a-z]
./dev/modem→/dev/ttyS[0-9]
./dev/pilot→/dev/ttyS[0-9]
设备文件的使用
.用户可以通过操作设备文件来完成对设备的操作
.echo hello > /dev/tty2
- 在第二个tty终端上显示一个'hello'
.cp /dev/fd0 /dev/fd1
- 将第一个软驱中的软盘拷入第二个软驱中的软盘
.dd if=/dev/hda of=/root/mdr bs=512 count=1
- 备份第一个硬盘上的mbr为/root目录下的mbr文件
dd
.dd指令时一个功能强大的copy命令
.支持在拷贝文件的过程中转换文件格式
.支持指令范围的复制
.常用参数
.if=文件名:指定源文件
.of=文件名:指定目标文件
.bs=xxx:指定块的大小
.count=n:指定复制块的数量
例如:dd if=/etc/passwd of=/root/passwd.backup (bs=512 count=3)可以不用加
dd < /root/install.log > /root/install.log.bp
dd < /dev/sda1 > /root/mbr bs=512 count=1 -- 备份磁盘扇区
mknod
1.系统用户可以用mknod指令来建立所需的设备文件
- 语法:mknod 文件名 文件类型 主号 从号
2.主号与从号可以在
/usr/src/linux-2.4/Documentation/devices.txt中找到
例如:mknod /dev/hda5 b 3 5
kudzu
1.kudzu:Res Hat Linux上的硬件自检工具,它维护两份文件
- /etc/sysconfig/hwconf:使用硬件列表
- /etc/modules.conf:为硬件指定驱动
2.kudzu以/usr/share/hwdata为数据库寻找硬件
3.hwbrowser十图形界面下的硬件管理器
关掉kudzu工具:chkconfig kudzu off
幻灯片一百:
硬盘结构-(由扇区组成每扇区是512字节)
1.对于每一个硬盘:(磁盘中55AA结束表示符)
- 主引导记录/Master Boot Record/MBR
讲解:告所计算机如何引导系统内核
- 硬盘分区表/Standard Partition Table/SPT
讲解:记录每分区记录
- 主分区/Primary Partition
- 扩展分区/Extended Partition
逻辑分区/Logical Partition
----------------------------------------
|MBR | | | | |
|----| | | | |
| | hda1 | hda2 | hda3 | hda4 |
|SPT | | | | |
|----| | | | Extend|
|55AA| | | | |
----------------------------------------
MBR:446 SPT:64 55AA:2字节磁盘之间以磁柱来分隔
磁盘分区
1.一块硬盘只能有四个主分区
2.用户可以也只可以将一个主分区变成扩展分区
3.在扩展分区上,用户可以以链表方式建立逻辑分区
-Red Hat Linux对一块IDE磁盘最多支持到63个分区,SCSI磁盘支持到15个
-fdisk工具最多只能辨认出16个分区
----------------------------------------
| | | | |
| | | | |
| hda1 | hda5 | hda6 | hda7 |
| | | | |
| |Extend | | |
| | | | |
----------------------------------------
hda1-4系统主分区预留分区号
为磁盘分区
.磁盘分区工具
.disk druid:方便的分区工具,只能在安装时使用
.fdisk:运用广泛的字符界面下硬盘分区工具
.分区改变后需重启系统才会生效
例如:添加删除分区
fdisk -l /dev/sda -- 查看硬盘分区的详细信息
删除分区操作:fdisk /dev/sda -- 命令行输入m -- 接下来选择p(列出磁盘分区信息)-- d(删除分区选项) -- 5(输入分区号) -- w(保存退出)或q(不保存退出)partprobe(让分区表立刻生效不需要重新启动)
新建分区操作:fdisk /dev/sda -- m(命令行输入) -- n(创建分区) -- e(选择扩展分区) -- +how anyM的值 -- partprobe(内核重新读取分区表)
创建虚拟内存:fdisk -l(查看虚拟内存) -- 需要扩大虚拟内存 -- dfisk /dev/sda -- n -- +how anyM的值 -- t(更改新分区ID号从而划分到虚拟分区内去) -- 6(新建分区) -- L -- 82(虚拟分区号) -- w(保存退出) -- partprobe(是内核重新读取分区表) -- mkswap dev/sda6 -- free查看虚拟内存没变 -- swapon /dev/sda6(打开所建立的虚拟内存) free(现在查看虚拟内存增加了) / swapoff /dev/sda6(关闭所建立的虚拟内存) ; 另一种方法创建虚拟内存:dd < /dev/zero > /tmp/swap bs=1M count=100 -- mksawp /tmo/swap(格式化) -- free(查看虚拟内存) -- swapon /tmp/swap -- free(查看虚拟内存现在增加咯)
文件系统
文件结构
.为了能在设备上存储与读取文件,我们需要在分区上创立文件系统
.文件系统记录目录与主文件我们称之为文件结构
.每一个文件系统在Linux里都被解释成由一个根目录为起点的目录树结构
.Linux将各个文件系统挂载(mount)在系统目录树中使用
文件系统(文件存在的物理空间)
1.对应不同的操作系统与设备,计算机里有许许多多中文件系统
2.不同的文件系统存放、搜索文件的方式都有不同
3.Linux支持多种文件系统的读写
4.Linux自身最主要使用的是ext2/ext3文件系统
幻灯片一百零四:
ext2/ext3文件系统
.ext2/ext3文件系统支持rwx权限及文件属性(attributes)
.ext2/ext3文件系统采用block(逻辑块存储文件内容)+inode(索引节点存储文件属性,指针功能指向文件内容放在哪个块里)的方式存放文件
.ext2/ext3文件系统上有一块空间被称为超级块(superblock)用于存放文件系统的元数据,诸如卷标名、block数、inode数等等(查看超级块dumpe2fs /dev/sda5 | more)
.inode存放文件的元数据,包含文件权限、属性、更改时间等等数据
ls -il 查看索引节点号
系统读取文件流程:
/etc /etc
------------------→
inode | block
|
Services |
←-----------------|
inode
| services
|-----------------→
block
ReiserFS文件系统
1.一个非常优秀的文件系统
2.可轻松管理上百G的文件系统
3.先进的日志机制
4.高效的磁盘空间利用
5.独特的搜寻方式
文件属性
1.在ext2/3文件系统中,对每一个文件,还提供额外的属性支持
2.用户可以用lsattr来检查文件的属性
3.系统用户可以用chattr来改变文件的属性
- +号添加、-号去除
特殊属性(A当文件被修改是文件的更改时间不会被改变、a只能想文件作内容追加,root用户用、d做备份不会备份这文件、i文件永远不会改变包括增删改、j系统会将文件本身信息记录ext上日志里、S文件被更改同步写到文件系统里面)
例如:给文件设定特殊属性
lsattr 文件名 -- 查看特殊属性
chattr +i install.log -- 添加特殊属性
rm install.log -- 现在不能删除这个文件
chattr -i install.log -- 去掉特殊属性
ext3文件系统
1.ext3文件系统即一个添加了日志功能的ext2,可与ext2文件系统无缝兼容
2.ext2文件系统可以通过增加日志的方式简单地升级成为ext3文件系统
3.ext3文件系统支持三种日志模式
- 规则(默认,仅记录元数据)
- 日志化(将数据象元数据一样记录入日志)
- 写回(只在fsck是发生)
ext2写数据的流程:写(data)--- 缓冲区(buffer)但是要等缓冲区写满后才执行下面 --- 硬盘(disk)
ext3写数据的流程:写(data)--- 缓冲区(buffer)缓冲区写满后 --- 通知日志准备写入文件 --- 硬盘(disk)并且硬盘最后面一块空间是日志存放空间 --- 通知日志文件已经写入磁盘
有无日志的差别:
ext2 --- ext3 (相对之间的性能要好些)
检查有 检查日志(时间快)
效位(时间慢)
其他常见的文件系统
.minix:古老的文件系统
.msdos/fat:microsoft早年的文件系统
.vfat:win95与win98采用的文件系统
.ntfs:win2000使用的文件系统
.iso9660:光盘使用的文件系统
.ReiserFS/JFS:仍然在完善的带日志文件系统
查看Linux支持的文件系统
ls -l /lib/modules/'uname -r(系统核心版本号)'/kernel/fs
查看当前Linux启用的文件系统:
cat /proc/filesystems
创建文件系统
.如果我们需要使用一个分区用于存储文件,则我们要在这个分区上建立文件系统
.常用的创建文件系统的工具:
.mkfs
- 可以用于创建各种文件系统,由-t参数指定
例如:mkfs -t ext2 /dev/sda5
.mke2fs
- 创建ext2/3文件系统,支持指定block大小等功能
例如:mke2fs参数:
【-b】指定块的大小 mke2fs -b 2048 /dev/sda5(ext2/ext3上块的大小最大是4096KB)
【-i】更改索引节点大小 mke2fs -i 1028 /dev/sda5(索引节点大小修改等同于修改索引节点数)
【-N】指定创建索引节点数 mke2fs -N 3000 /dev/sda5
【-m】设定系统保留空间 mke2fs -m 10 /dev/sda5 (保留10%)
【-L】创建文件系统的同时设置卷标 mke2fs -L data /dev/sda5 (查看卷标dumpe2fs /dev/sda5 方便挂载是使用卷标挂载)
【-j】让系统给分区创建ext3文件系统mke2fs -j /dev/sda5
使用文件系统
.为了使用一个文件系统,往其中存读文件,用户需要先挂载该文件系统
.挂载文件系统的指令时mount
.语法:
.mount -t 文件系统类型[其他参数] 设备 挂载点
mount参数
1.-t 文件系统类型:用于指定挂载文件系统的类型,一般这个参数是必须的
2.-o 参数:补充追加的参数
3.ext2文件系统默认采用的参数:rw(代表对文件系统有读写的权限)、suid(代表允许使用suid)、dev(允许文件系统包括设备文件)、exec(允许文件系统里二进制的运行)、auto(允许自动判断文件系统共类型)、nouser(只允许超级用户挂载文件系统)、async(进行异步管理文件的改变)、user(允许一般用户管理文件系统)、ro(只读)、loop(用于访问回环设备及镜像的挂载)、remount(重新载入)
例如:mount /dev/sda5 /opt --- (umount opt卸载用)
mount -o ro /dev/sda5 (让分区变成只读)
mount /dev/cdrom /mnt (挂载光驱)
mount /dev/floppy /mnt (挂载软驱)
mount -o loop,ro /var/boot.iso /mnt(挂载磁盘内的镜像文件)
/etc/fstab
.配置文件系统挂载信息
.mount文件系统是若给出的参数不全,系统会从/etc/fstab中读取参数补完
.系统启动会参考/etc/fstab中的配置项自动加载文件系统(vi /etc/fstab)
.也被fsck、dump、quotaon、swapon等程序使用
当前挂载系统
.用户可以通过直接键入mount后回车来检查当前挂载中的文件
.用户也可以通过查看/etc/mtab文件来查看当前挂载中的文件系统
.cat /proc/mounts文件查看
卷标
.由于设备文件名可能在硬盘结构发生变化时更动,因此Red Hat Linux对ext2文件系统使用卷标来挂载与卸载
.卷标记录在ext2/ext3文件系统的超级块中
.用户可以用e2label指令来查询与更改ext2文件系统的卷标
卷标:(dumpe2fs -h /dev/sda5)
例如:e2label /dev/sda5
创建卷标
e2label /dev/sda5 data
mount -L data /opt 挂载文件系统
卸载文件系统
1.当一个文件系统使用完毕,用户应当卸载该文件系统
2.umount指令用于卸载文件系统
3.语法:
umount [参数] 设备/挂载点
4.一个正在使用中的文件系统不能被卸载
例如:umount /dev/sda5
umount /opt(挂载目录)
文件系统维护
1.fsck/filesystem check:用于检查与修复文件系统
- e2fsck:检查与修复ext2文件系统
2.系统在启动是自动会被检查
3.tune2fs:更改ext2文件系统属性
4.resize2fs:更改ext2文件系统的大小
5.parted:更改多种文件系统大小
fsck -y /dev/sda6 检测系统分区并自动修复
tune2fs -j /dev/sda5 转化ext3文件系统并且里面原有内容不会丢失
自动挂载
1.系统通过autofs服务自动挂载文件系统
- 需要后台的automount进程
- autofs服务的开闭由/etc/init.d/autofs脚本控制
2.主要应用于软驱与光驱等场合
3.如果该设备一段时间没有被使用,autofs会自动卸载
例如:设置自动挂载
rpm -q autofs 安装套件才能使用自动挂载
配置文件auto.master(设定总的自动挂载环境) / auto.misc(设定挂载设备)
启动服务:service autofs restart
Linux安装选项/;来源
----------------------------------------
图形方式安装:Linux或直接回车
字符方式安装:linux text
检测媒体:linux mediacheck
援救模式:linux rescue
跳过硬件检测:linux noprobe
系统不支持SCSI以便安装SCSI驱动:linux dd
安装大量linux:linux askmethod
----------------
.CD-ROM / DVD-ROM
.FTP
.NFS
.HTTP
.硬盘
安装中的窗口切换
在安装过程中,我们支持用Alt + Fn键来切换显示窗口:
Alt + F1:安装对话框
Alt + F2:一个bash
Alt + F3:安装日志
Alt + F4:与系统、核心相关的讯息
Alt + F5:其他讯息,诸如mke2fs,grub的标准输出
Alt + F7:X图形化显示
关闭SELinux步骤:
>查看服务状态:sestatus | more
>更改selinux配置文件:vi /etc/sysconfi/selinux
>更改为disabled状态
计划任务
linux的计划任务
.linux系统支持一些能够自动执行任务的服务我们称其为计划任务:
.at命令:指定一个时间执行一个任务
.cron机制:根据一个时间表自动执行任务
. anacron机制:在一个指定时间间隔错过后自动执行任务
at命令
.at命令:安排一个任务在未来执行
.at命令需要系统后台有一个atd进程(开启atd进程服务:/etc/init.d/atd restart)
.指令
.at:安排延时任务
.atq:查询当前的等待任务
.atrm:删除等待任务
.batch:以一个低优先级延时执行任务
例如:chkconfig -- level 2345 atd on(自动启动进程)
让系统在一分钟之后创建字符发送给tty2的任务:at now +1 min
>echo "helo" > /dev/tty2
>Ctrl + d
让系统发送字符给root/test.txt:at 00:55
>echo "this is test" > /root/test.txt
>
cat /root/test.txt (查看系统执行的任务)
at 1:00 2011-01-10
> /sbin/shutdown -h now(关闭系统,创建计划任务时是以完整路径来执行的绝对路径)
> Ctrl + d
cd /var/spool/at(at 任务文件放置地)
atq命令讲解:查询当前正在等待被执行的at任务:atq
以邮件形式发送at信息:切换用户 -- at now +1 min
>echo "hi bbk"(没有重定向)
>Ctrl + d
以邮件形式发送创建任务信息
命令行输入:mail 然后输入 1
batch命令讲解:考虑到系统负载时用batch
batch
>echo "hello" > /dev/tty
>Ctrl + d
atq (查看任务)
atrm 工作号
at命令的使用控制
.at命令的使用控制文件
./etc/at.allow
./etc/at.deny
.基于用户的使用控制
at命令的控制流程
>.用户---有at.allow文件---用户是否在at.allow文件中---(在)允许(反之不允许)
>.用户---无at.allow文件---有at.deny文件---用户在at.deny文件中---拒绝(反之允许)来说
>.用户---无at.allow文件---无at.deny文件---只有root用户才能使用at命令