服务器用户登录信息、进程管理、磁盘管理
一. 用户登录信息命令
whoami --类似$USER
who --当前系统的登录信息
w --比who的信息更多
users --显示who的第一列
uptime --登录的时间和负载
tty --查看当前终端
who am i --查看当前终端的信息
- who
root tty1 2014-07-21 15:02 (:0)
root pts/0 2014-07-21 15:02 (:0.0)
root pts/1 2014-07-21 15:02 (:0.0)
root pts/2 2014-07-21 16:09 (:0.0)
last --登录成功的信息,读取/var/log/wtmp日志文件
lastb --登录失败的信息,读取/var/log/btmp日志文件
lastlog --不同用户最后一次登录的信息,读取/var/log/lastlog日志文件
- file /var/log/wtmp --查看一个文件的类型,一般来说只ascii或text类型的文件可以直接cat,这种数据类型看不了,只能用专门的程序去读取,此文件就是用last命令来看
/var/log/wtmp: data
二. 进程管理
- 1. ps命令
ps - report a snapshot of the current processes.
# ps
PID TTY TIME CMD
6125 pts/5 00:00:00 bash
6134 pts/5 00:00:00 ps
pstree --显示系统当前所有进程及其关系
# cat /proc/3429/status |head -5
Name: ibus-daemon
State: S (sleeping)
Tgid: 3429
Pid: 3429
PPid: 3244
# cat /proc/3244/status |head -5
Name: im-settings-dae
State: S (sleeping)
Tgid: 3244
Pid: 3244
PPid: 1
# cat /proc/1/status |head -5
Name: init
State: S (sleeping)
Tgid: 1
Pid: 1
PPid: 0
ps -ef 或 ps aux等
# ps -ef |grep firefox |grep -v grep
root 6395 6125 2 16:38 pts/5 00:00:00 /usr/lib64/firefox/firefox
PID 进程号
PPID 父进程
特殊的进程:
0号:负责系统启动和启动1号2号进程,启动之后变成空闲进程
1号:负责启动其他进程,/sbin/init,负责启动终端(tty)
2号:负责启动其他系统需要的资源和进程
(idle) |--->1号进程(init)---> ......
0号进程--|
|--->2号进程(kthreadd)---> ......
- 2. kill命令
kill - terminate a process
kill命令是用来给一个特定的pid发送信号的
# kill -l --查看所有的信号
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
常见的信号
1 SIGHUP 挂断
2 SIGINT 中断,ctrl+c
3 SIGQUIT 退出,ctrl+ 或 ctrl+shift+|
9 SIGKILL 终止
10 SIGUSR1 用户自定义
15 SIGTERM kill命令默认信号
kill -9 等于 kill -SIGKILL
kill -15 等于 kill -SIGTERM
kill -1 等于 kill -SIGHUP
kill -10 等于 kill -SIGUSR1
实验验证:
# yum install httpd*
# /etc/init.d/httpd restart
# ps -ef |grep httpd |grep -v grep
root 2681 1 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2688 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2689 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2690 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2691 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2692 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2693 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
apache 2694 2681 0 15:02 ? 00:00:05 /usr/sbin/httpd
apache 2695 2681 0 15:02 ? 00:00:00 /usr/sbin/httpd
或者使用
# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 2681 root 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2688 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2689 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2690 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2691 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2692 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2693 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2694 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
httpd 2695 apache 4u IPv6 15655 0t0 TCP *:http (LISTEN)
实验1:
# kill -9 2681
# ps -ef |grep httpd |grep -v grep --再去看,发现8个子进程还在,网站也还可以正常访问
# /etc/init.d/httpd restart --重启服务报错,解决方法,全kill掉重启
父进程终止之后,1号进程会收养孤儿进程
批量杀进程的方法
1,kill -9 2688 2689 ......
2,ps -ef |grep httpd |grep -v grep |awk '{print $2}' |xargs kill -9
3,pgrep httpd |xargs kill -9
4,killall httpd
5,pkill httpd
6,skill httpd
7,kill -9 pidof httpd
实验2:
# kill -15 pid --相比于kill -9来说,它会把所有子进程一起杀掉
实验3:
# kill -HUP pid --进程没有被杀,只是子进程pid变了,相当/etc/init.d/httpd reload
- 3. trap命令
Trap signals and other events.
捕获信号,在接收到信号后将要采取动作。
格式:
trap command signal
它有三种形式分别对应三种不同的信号回应方式。
第一种:
trap "commands" signal-list
当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令。
第二种:
trap signal-list
trap不指定任何命令,或者是 "-" ,接受信号的默认操作,默认操作是结束进程的运行。
第三种:
trap "" signal-list
trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种。
如果要重置某个信号的处理条件到其默认值,只需简单的将command设置为-或者留空。如果要忽略某个信号,就把command设置为空字符串 ""。一个不带参数的trap命令将列出当前设置的信号及其行动的清单。
※ 脚本程序通常是以从上到下的顺序解释执行的,所以必须在你想保护的那部分代码以前指定trap命令。
例:trap "echo no way" 1 2 3 9 --指定了命令,如果遇到 HUP INT QUIT KILL 信号,则执行 echo no way 命令
trap -l --列出所有的信号
trap -p --列出信号的处理办法
trap "" INT QUIT --遇到 INT 和 QUIT 信号,则忽略,什么也不做
trap 1 2 3 9 --没有指定命令部分,恢复 HUP INT QUIT KILL 这些信号设置;
- 4. job管理
linux下有前台和后台的概念,每个bash终端都可以运行自己的job,注意不能跨bash终端管理
& --后台运行符号,运行的程序不会占用你的终端
# firefox &
[1] 6003 --1代表job号,6003代表的就是pid(process identification)
# vim /etc/passwd --在这里按下ctrl+z键,作用是把job暂停到后台,SIGSTOP
[2]+ Stopped vim /etc/passwd
# vim /etc/shadow --再按ctrl+z放到后台,与ctrl+c(中断)不同
[3]+ Stopped vim /etc/shadow
# jobs --列出后台job列表,别的终端看不到的
[1] Running firefox &
[2]- Stopped vim /etc/passwd
[3]+ Stopped vim /etc/shadow
jobs -l --还要列出pid号
jobs -s --只列出暂停的jobs
jobs -r --只列出运行的jobs
# fg %1 --把一号job的firefox 调到前台
firefox
fg = foreground --前台
# jobs -l
[1]+ 6003 Stopped firefox
[2] 6036 Stopped vim /etc/passwd
[3]- 6074 Stopped vim /etc/shadow
# kill %1
%number 引用后台作业
%% 当前作业
%+ 当前作业
%- 前一个作业
# jobs -l
[1]+ 9815 Stopped firefox
- bg %1 --把1号job的firefox由stop状态放到后台执行,就是变为running状态
# jobs -l
[1] 6003 Running firefox &
[2]- 6036 Stopped vim /etc/passwd
[3]+ 6074 Stopped vim /etc/shadow
bg = background --后台
# cp /soft/* /test/ -rf --如果你要做一个大文件的拷贝,
不加后台符号这个终端就只能等它拷完才能用
# cp /soft/* /test/ -rf & --所以可以加一个后台符号让它在后台拷就行
但这里还考虑一个问题,如果它还没有拷完,而我不小心把这个终端关了,那么这个程序也会停止,造成没拷完的情况
所以把要做的事锁定到后台,在前面加一个nohup命令就可以了
# nohup cp /soft/* /test/ -rf &
--你可以测试一下,把再次把终端关闭,再开一个终端查看,用jobs -l也是看不到这个job(因为换了终端),但是拷贝仍在继续)
5. 查看系统有关信息的相关命令
top free nice renice (vmstat,iostat,mpstat,sar等)
top - 17:44:59 up 43 min, 3 users, load average: 0.00, 0.08, 0.23
Tasks: 212 total, 3 running, 209 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.2%us, 3.0%sy, 0.0%ni, 90.2%id, 1.0%wa, 0.2%hi, 0.3%si, 0
Mem: 3798572k total, 3643268k used, 155304k free, 52644k buffers
Swap: 524280k total, 0k used, 524280k free, 3055808k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3596 root 20 0 90576 39m 1808 S 10.3 1.1 4:10.20 x0vncserver 2957 root 20 0 134m 16m 8580 R 7.6 0.4 2:59.39 Xorg
3562 root 20 0 306m 14m 9860 S 1.3 0.4 0:04.03 gnome-termin
11 root 20 0 0 0 0 R 0.7 0.0 0:04.99 events/0
1 root 20 0 19348 1456 1148 S 0.0 0.0 0:00.78 init
..............
top第一行的数据也可以用uptime或w来查看
load average: 0.08, 0.12, 0.08--分别代表cpu一分钟内,五分钟内,十五分钟内的平均负载
进程状态
s sleeping --睡眠状态,有可能会被其它信号或者程序唤醒
R running --运行状态
Z zombie --僵死进程
D --不可中断的睡眠,一般是等待硬件的唤醒
T --进程暂停
top -b -n 2 > /root/Desktop/top.txt --把top的输出内容重定向到一个文件
top的信息从哪来?
/proc
--查看内存使用情况
# free
total used free shared buffers cached
Mem: 2065980 2012420 53560 0 73192 1569380
-/+ buffers/cache: 369848 1696132
Swap: 4096564 136 4096428
第一行:total 总的物理内存
used 已经使用的物理内存
free 空闲的物理内存
shared 共享内存,它是用于unix与不同进程之间的一个数据共享,很少程序会用到,但是 oracle 会用到共享内存 --ipcs查看共享内存段的使用情况
buffers 缓冲区,用于存储速度不同步的设备或者优先级不同的设备之间的传输数据的区域。通过缓冲区,可以使进程之间的相互等待减少,从而使从速度慢的设备读入数据时,速度快的设备的操作不发生间断。
cached 因为cpu的速度比内存快,会设立一级缓存,二级缓存的cache。但linux下free命令这里的cached指的是page cache的内存,文件系统的cache
2012420-73192-1569380 = 369848 --指的实实在在的程序用掉的内存
53560+73192+1569380 = 1696132 --指的就是实际可挪用的内存
2065980 =369848+1696132
--关于linux的内存释放
linux使用的内存不会象windows那样关掉一个进程或者程序,马上释放内存,而是都缓存起来(buffer+cache)
/proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches --linux下内存释放在这里指的就是丢掉cache,把这个值改为3就可以,但实际没有必要,实际生产环境不要乱用
linux的内存工作原理?
cpu--> 内存 --> 磁盘 (异步过程)
内存会把使用过的数据缓存起来(buffer+cache),以页为单位(page size为4096byte)
内存处理的数据,满足一定的条件(由一些内核参数来控制,比如默认30秒,或者内存脏数据达到一定比率等)才会写到磁盘
# /usr/bin/time -v mysql
Major (requiring I/O) page faults: 36 --主要页面故障,相当于是内存没命中的次数
Minor (reclaiming a frame) page faults: 646 --次要页面故障,相当于是内存命中
# /usr/bin/time -v mysql --再执行一次,主要页面故障为0,表示被内存缓存了,命中了
小测试:
# /usr/bin/time -v firefox &
# /usr/bin/time -v firefox & --做两次,对比打开时间和主要页面故障等参数
# echo 3 > /proc/sys/vm/drop_caches
# /usr/bin/time -v firefox & --扔过缓存后,再执行对比
什么时候才会用到swap?
一般来说是内存不够。但有些时候内存里不常用的一些页(page,为内存的最小单位)linux也会把它暂时放到swap.(此过程没必要去控制它,只知道有这回事就行了)
6. 进程优先级(priority) nice renice
优先级有一个数字范围为-19到20,数字越小优先级越高
优先级高的进程占用的资源(CPU,内存等)较多
单核CPU,在同一个时间点内也只能做一件事,那么它如何去跑多任务。它其实把时间分片,然后通过中断(硬件中断和软件中断)在不同的任务间切换(上下文切换)。这种在不同任务间的间的调度叫进程调度。
# vim /tmp/1.sh
#!/bin/bash
a=0
while [ $a -le 1000000 ]
do
let a++
done
实验1:
两个终端同时执行下面两条,服务器越卡,效果越明显。还可以开第三个终端打开top来比较两者占用的资源
第一终端
# time sh /tmp/1.sh
real 0m13.745s
user 0m11.502s
sys 0m0.479s
第二终端
# time nice --19 sh /tmp/1.sh --这是表示指定优先级为-19
real 0m11.835s
user 0m11.467s
sys 0m0.359s
实验2:
还是做上面的实验,但用top查看到优先级高的PID,然后用第四个终端速度使用renice 19 pid,把它优先级改低
结果是改低后第二终端执行时间变成比第一终端执行时间长了
总结:普通用户只能改自己管理的进程的优先级,并且只能改低,不能改高。只有管理员才能把进程优先级改高
三. 磁盘管理
- 1.fdisk和parted
raid(可选)-->远程存储访问(iscsi,gnbd)(可选)-->分区-->LVM(可选)-->格式化-->挂载-->分布式文件系统(可选)
今天我这里只讨论
分区-->格式化-->挂载
MSDOS/GPT
相关的基本管理命令有fdisk,parted(如果是用的GPT分区,则不能使用fdisk)
fdisk - Partition table manipulator for Linux (不能用于GPT分区)
# fdisk -l
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003f808
Device Boot Start End Blocks Id System
/dev/sda1 * 1 33 262144 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 33 7682 61440000 8e Linux LVM
/dev/sda3 7682 7747 524288 82 Linux swap / Solaris
# fdisk /dev/sda
Command (m for help): m
Command action
a toggle a bootable flag --表示一个分区作为引导分区
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition --删除一个分区
l list known partition types --列出已知的分区类型
m print this menu
n add a new partition --增加一个分区
o create a new empty DOS partition table
p print the partition table --打印当前的分区表
q quit without saving changes --不保存退出
s create a new empty Sun disklabel
t change a partition's system id --改变分区类型ID值
u change display/entry units
v verify the partition table
w write table to disk and exit --保存退出
x extra functionality (experts only)
分区:如果你要分四个以上分区,请把第四个分为extended扩展分区
而且扩展分区把多余的所有空间都划分进去,否则会造成空间的浪费
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e --第四个分区选e
Selected partition 4
First cylinder (7747-60801, default 7747): --直接回车
Using default value 7747
Last cylinder, +cylinders or +size{K,M,G} (7747-60801, default 60801): --直接回车,全划分进去
Using default value 60801
Command (m for help): n --第五个之后的分区就不会再问你是分e还是p类型
First cylinder (7747-60801, default 7747):
Using default value 7747
Last cylinder, +cylinders or +size{K,M,G} (7747-60801, default 60801): +1G --我这里划分1G,用于测试
Command (m for help): w --保存
The partition table has been altered!
# partx -a /dev/sda
--这样去刷新一下,在rhel5里是用partprobe命令。如果刷新多次都不成功,就重启你的系统
# ls /dev/sda* --用此命令看到你新分区的设备名有了,就表示OK了
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5
格式化
# mkfs -t ext4 /dev/sda5
# mkfs.ext4 /dev/sda5 --这两个命令任选其一去执行
挂载
# mkdir /test
# mount /dev/sda5 /test
===========================================================
使用parted(可用于msdos分区和GPT分区)分一个分区
# parted
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help --查看帮助
(parted) print
Model: ATA WDC WD5000AAKX-0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 boot
2 211MB 420MB 210MB ext4
3 420MB 105GB 105GB ext4
4 105GB 210GB 105GB ext4
5 210GB 273GB 62.9GB ext4
6 273GB 277GB 4194MB linux-swap(v1)
(parted)
(parted) mkpart --分区,删除分区就是rm
Partition name? []?
File system type? [ext2]? ext4
Start? 277GB
End? 278GB
(parted) print
Model: ATA WDC WD5000AAKX-0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 211MB 210MB fat16 boot
2 211MB 420MB 210MB ext4
3 420MB 105GB 105GB ext4
4 105GB 210GB 105GB ext4
5 210GB 273GB 62.9GB ext4
6 273GB 277GB 4194MB linux-swap(v1)
7 277GB 278GB 755MB --刚分的新分区
(parted) quit
# partx -a /dev/sda
# mkfs -t ext4 /dev/sda7
# mkdir /notes
# mount /dev/sda7 /notes
- mount命令
# mount --查看现在的挂载信息
# df -h --查看当前哪些分区挂载哪些目录的对应信息
# umount /fdisk/
--umount 时报busy的错误,一般是因为有程序占用,最常见的就是bash占用,要先cd出来,再umount
umount: /fdisk: device is busy
umount: /fdisk: device is busy
--如果cd出来了,umount时还是报busy错误,尝试一下下面两条命令
# lsof /fdisk/
# fuser -k /fdisk/
--同一个目录,可以被多个分区mount,但是只显示最后一次mount的分区的内容,umount的话,就要一级一级的umount
--一个分区也可以挂载到多个目录
mount的用法
挂载远程的NFS共享目录
mount 10.0.0.2:/share/soft/ /mnt/
在虚拟机里,挂载光盘
mount /dev/cdrom /yum
mount /dev/sr0 /yum
挂载光盘 要加-o loop
mount /soft/rhel-server-6.3-x86_64-dvd.iso /mnt/ -o loop
mount -o loop /soft/rhel-server-6.3-x86_64-dvd.iso /mnt/
针对分区类型挂载
mount -t vfat /dev/sda10 /mnt
mount -t cifs /dev/sda10 /mnt
--cifs common internet file system windows网络邻居共享使用的就是此协议
mount 的特殊用法:
--当你装了两个linux系统在同一台机器上,进入其中一个系统,看不到另一个系统的文件信息,但是可以看到它的分区 ,可以在当前系统建立一个目录,把另一个系统的分区mount过来,就可以使用另一个系统的文件了
--直接把windows的共享目录给mount过来
mount -t cifs -o username=administrator //10.0.0.100/windowsshare /mnt
这样使用的要注意的是 用户名别打错了 共享名尽量简单 windows防火墙要关闭
双系统;一个windows和一个linux
如果你在linux上想拷windows里的东西,直接挂载过来
上面的nfs的挂载和用cifs挂载windows共享的都可能出现一个问题:
当你挂载了远端服务器的共享,但你没有umount它,而服务器先关闭了,那么你这时这个挂载目录会被卡死,象df -h这种命令也会卡住。
- 建立一个swap分区
# free -m
total used free shared buffers cached
Mem: 2017 964 1052 0 123 529
-/+ buffers/cache: 312 1705
Swap: 4000 0 4000 --这里
- 使用一个新建的分区作为swap分区
新建出一个分区 我这里是1G大小
# mkswap /dev/sda12 --格式为swap分区类型
Setting up swapspace version 1, size = 1011671 kB
# swapon /dev/sda12 --使之生效
# free
total used free shared buffers cached
Mem: 2065980 989096 1076884 0 126236 542432
-/+ buffers/cache: 320428 1745552
Swap: 5084520 0 5084520
# swapoff /dev/sda12 --使之失效
# free
total used free shared buffers cached
Mem: 2065980 2010728 55252 0 9596 1710824
-/+ buffers/cache: 290308 1775672
Swap: 4096564 136 4096428
- 使用一个文件作为swap分区
# dd if=/dev/zero of=/swapfile bs=1M count=1000
--用dd命令创建出一个1000M大小的文件,此文件为二进制文件,不能cat或者vi去看
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 4.40506 seconds, 238 MB/s
# mkswap /swapfile
Setting up swapspace version 1, size = 1048571 kB
# swapon /swapfile
# free
total used free shared buffers cached
Mem: 2065980 1998744 67236 0 9940 1683508
-/+ buffers/cache: 305296 1760684
Swap: 5120556 136 5120420
- 设置开机后自动挂载目录
# cat /etc/fstab
/dev/mapper/vol0-root / ext4 defaults 1 1
UUID=b61eb070-abf5-4fc9-9794-e3ebf2b520ed /boot ext4 defaults 1 2
/dev/mapper/vol0-home /home ext4 defaults 1 2
UUID=10678818-0206-4a5c-ab0a-ef7baa93664c swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0--在内存上挂载
devpts /dev/pts devpts gid=5,mode=620 0 0--虚拟终端
sysfs /sys sysfs defaults 0 0--内存信息的反应
proc /proc proc defaults 0 0--虚拟目录,都是系统正在运行的信息
LABEL=SWAP-sda2 swap swap defaults 0 0
分区号或者标签号或者uuid 挂载点 挂载类型 挂载参数 是否扫描 扫描级别
# e2label /dev/sda5 /vm --把/dev/sda5的标签改为叫/vm
# e2label /dev/sda5 --查看
/vm
# blkid --用此命令查看所有分区设备的uuid
/dev/mapper/vol0-root: UUID="04836f7a-2657-4139-b043-75360f557dcc" TYPE="ext4"
/dev/loop0: LABEL="RHEL_6.3 x86_64 Disc 1" TYPE="iso9660"
/dev/sda1: UUID="b61eb070-abf5-4fc9-9794-e3ebf2b520ed" TYPE="ext4"
/dev/sda2: UUID="CWWVF2-HkGf-iU4R-DWcK-capi-WgkY-qDyeBO" TYPE="LVM2_member"
/dev/sda3: UUID="10678818-0206-4a5c-ab0a-ef7baa93664c" TYPE="swap"
/dev/sda5: LABEL="/vm" UUID="f59e830a-3c52-4c25-be46-098dbf6371b1" TYPE="ext4"
/dev/sda6: UUID="ae66457d-7765-482e-b1d6-5ab3d0406874" TYPE="ext4"
/dev/sda7: UUID="05615c87-1732-4f6a-ad73-98efd509dbcc" TYPE="swap"
/dev/mapper/vol0-home: UUID="7f266ffe-f05e-4eca-8e32-d14a8066f921" TYPE="ext4"
第一列我要写sda5这个设备就可以有如下写法:
/dev/sda5 /vm ext4 defaults 0 0
LABEL=/vm /vm ext4 defaults 0 0
UUID=f59e830a-3c52-4c25-be46-098dbf6371b1 /vm ext4 defauts 0 0
defaults 代表mount的一个默认参数组,man mount查看
rw 读写 对应ro只读
suid 代表特权位s能够生效 对应nosuid
dev 支持block和character设备 对应nodev
exec 表示有执行权限的文件可以执行 对应noexec
auto 表示可以使用mount -a,使用这个命令可以自动把你fstab文件里的全挂载一遍(如果已经挂载了则不报任何信息,没有挂载就帮你挂载,如果你写的有错误,它就会报错)
nouser 禁止非root用户挂载文件系统
async 异步 对应sync同步
relatime 文件的atime属性在rhel5是访问一次变一次,现在rhel6里只有当atime早于或等于mtime或ctime之一时,访问它才会变(就是因为rhel6里多了relatime这个参数);你可以换成norelatime再加一个strictatime参数去掉这个功能,或者换成noatime那么这个文件系统的文件被访问都不变atime属性
# cat /proc/devices
# mknod block b 2 1
# mknod char c 3 1
mount -o defaults,norelatime,strictatime /dev/sda5 --这样就是去掉了relatime功能,可以让文件cat一次,atime就会变一次
如果你希望优化你的sda5的atime属性(在defaults后加逗号再加个noatime)
/dev/sda5 /vm ext4 defaults,noatime 0 0
如果我想不重启系统就改成根分区的挂载参数,怎么做?
mount -o remount,noatime,st /
比如下面这条会怎么样?
mount -o remount,noexec / --会造成系统命令除了内部命令都执行不了,只能重启系统解决
------------------------------
fstab错误示例
1,rm -rf /etc/fstab,没有了fstab文件,重启系统会怎么样?
可以启动成功,但所有的分区都没有挂载,你可以重启挂载,写好fstab
2,故意到/etc/fstab里倒数第二列为0的行去改错uuid或者设备名,重启会怎么样?
可以启动成功,只有你改错的那个分区没有挂载而已
3,故意到/etc/fstab里倒数第二列不为0的行去改错uuid或者设备名,重启会怎么样?
在启动过程不久,就会卡住,启动不成功
解决方法:
输入root密码,进入一个shell,但发现里面的文件都是只读的
所以mount -o remount,rw /把根重挂载成读写模式,然后查看正确的设备名或label名或uuid再来修改fstab,保存重启
转自https://www.toutiao.com/i6556368628109804046/