📝 Writing docs.

This commit is contained in:
Zhang Peng 2018-09-26 20:34:47 +08:00
parent 426e34d0fb
commit d6c3e6d50c
10 changed files with 559 additions and 1768 deletions

View File

@ -16,12 +16,10 @@
- [linux 常用命令-文件权限属性设置](commands/文件目录管理/文件权限属性设置.md) - [linux 常用命令-文件权限属性设置](commands/文件目录管理/文件权限属性设置.md)
- [linux 常用命令-文件查找和比较](commands/文件目录管理/文件查找和比较.md) - [linux 常用命令-文件查找和比较](commands/文件目录管理/文件查找和比较.md)
- [linux 常用命令-目录基本操作](commands/文件目录管理/目录基本操作.md) - [linux 常用命令-目录基本操作](commands/文件目录管理/目录基本操作.md)
- [linux 常用命令-系统管理](commands/系统管理/README.md) - [Linux 用户管理命令](commands/Linux用户管理命令.md) - 关键词:`groupadd`, `groupdel`, `groupmod`, `useradd`, `userdel`, `usermod`, `passwd`, `su`, `sudo`
- [linux 常用命令-系统操作](commands/系统管理/系统操作.md) - [Linux 系统管理命令](commands/Linux系统管理命令.md) - 关键词:`reboot`, `exit`, `shutdown`, `date`, `mount`, `umount`
- [linux 常用命令-系统设置](commands/系统管理/系统设置.md) - [Linux 性能管理命令](commands/Linux性能管理命令.md) - 关键词:`df`, `du`, `top`, `free`, `iotop`
- [linux 常用命令-用户和工作组管理](commands/系统管理/用户和工作组管理.md) - [linux 常用命令-进程和作业管理](commands/进程和作业管理.md)
- [linux 常用命令-进程和作业管理](commands/系统管理/进程和作业管理.md)
- [linux 常用命令-系统性能管理](commands/系统管理/系统性能管理.md)
- [Linux 网络应用命令](commands/Linux网络应用命令.md) - 关键词:`curl`, `wget`, `telnet`, `ip`, `hostname`, `ifconfig`, `route`, `ssh`, `ssh-keygen`, `iptables` - [Linux 网络应用命令](commands/Linux网络应用命令.md) - 关键词:`curl`, `wget`, `telnet`, `ip`, `hostname`, `ifconfig`, `route`, `ssh`, `ssh-keygen`, `iptables`
- [Linux 网络测试命令](commands/Linux网络测试命令.md) - 关键词:`host`, `nslookup`, `nc`/`netcat`, `dig`, `ping`, `traceroute`, `netstat` - [Linux 网络测试命令](commands/Linux网络测试命令.md) - 关键词:`host`, `nslookup`, `nc`/`netcat`, `dig`, `ping`, `traceroute`, `netstat`
- [yum 命令](yum.md) - [yum 命令](yum.md)
@ -32,3 +30,4 @@
- [awesome-linux-software](https://github.com/LewisVo/Awesome-Linux-Software) - [awesome-linux-software](https://github.com/LewisVo/Awesome-Linux-Software)
- [linux-tutorial](https://github.com/judasn/Linux-Tutorial) - [linux-tutorial](https://github.com/judasn/Linux-Tutorial)
- [菜鸟教程-Linux](http://www.runoob.com/linux/linux-tutorial.html) - [菜鸟教程-Linux](http://www.runoob.com/linux/linux-tutorial.html)
- [Linux Tools Quick Tutorial](https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/index.html)

View File

@ -0,0 +1,165 @@
---
title: Linux 性能管理命令
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
# Linux 性能管理命令
> 关键词:`df`, `du`, `top`, `free`, `iotop`
<!-- TOC depthFrom:2 depthTo:2 -->
- [df](#df)
- [du](#du)
- [top](#top)
- [free](#free)
- [iotop](#iotop)
<!-- /TOC -->
## df
> df 命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为 KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。
>
> 参考http://man.linuxde.net/df
示例:
```sh
# 查看系统磁盘设备,默认是 KB 为单位
[root@LinServ-1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
# 使用 -h 选项以 KB 以上的单位来显示,可读性高
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1
# 查看全部文件系统
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
```
## du
> du 命令也是查看使用空间的,但是与 df 命令不同的是du 命令是对文件和目录磁盘使用的空间的查看,还是和 df 命令有一些区别的。
>
> 参考http://man.linuxde.net/du
示例:
```sh
# 显示目录或者文件所占空间
root@localhost [test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
# 显示指定文件所占空间
[root@localhost test]# du log2012.log
300 log2012.log
# 查看指定目录的所占空间
[root@localhost test]# du scf
4 scf/lib
4 scf/service/deploy/product
4 scf/service/deploy/info
12 scf/service/deploy
16 scf/service
4 scf/doc
4 scf/bin
32 scf
# 显示多个文件所占空间
[root@localhost test]# du log30.tar.gz log31.tar.gz
4 log30.tar.gz
4 log31.tar.gz
# 只显示总和的大小
[root@localhost test]# du -s
1288 .
[root@localhost test]# du -s scf
32 scf
```
## top
> top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过 top 命令所提供的互动式界面,用热键可以管理。
>
> 参考http://man.linuxde.net/top
## free
> free 命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
>
> 参考http://man.linuxde.net/free
示例:
```sh
free -t # 以总和的形式显示内存的使用信息
free -s 10 # 周期性的查询内存使用信息每10s 执行一次命令
# 显示内存使用情况
free -m
total used free shared buffers cached
Mem: 2016 1973 42 0 163 1497
-/+ buffers/cache: 312 1703
Swap: 4094 0 4094
```
## iotop
> iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI其中包括 PID、用户、I/O、进程等相关信息。Linux 下的 IO 统计工具如 iostatnmon 等大多数是只能统计到 per 设备的读写情况,如果你想知道每个进程是如何使用 IO 的就比较麻烦,使用 iotop 命令可以很方便的查看。
>
> 参考http://man.linuxde.net/iotop
示例:
```sh
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]
7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1]
8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0]
10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1]
11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper]
2572 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bluetooth]
```

View File

@ -0,0 +1,193 @@
---
title: Linux 用户管理命令
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
# Linux 用户管理命令
> 关键词:`groupadd`, `groupdel`, `groupmod`, `useradd`, `userdel`, `usermod`, `passwd`, `su`, `sudo`
<!-- TOC depthFrom:2 depthTo:2 -->
- [groupadd](#groupadd)
- [groupdel](#groupdel)
- [groupmod](#groupmod)
- [useradd](#useradd)
- [userdel](#userdel)
- [usermod](#usermod)
- [passwd](#passwd)
- [su](#su)
- [sudo](#sudo)
<!-- /TOC -->
## groupadd
> groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
>
> 参考http://man.linuxde.net/groupadd
示例:
```sh
# 建立一个新组,并设置组 ID 加入系统
groupadd -g 344 jsdigname
```
## groupdel
> groupdel 命令用于删除指定的工作组,本命令要修改的系统文件包括 `/ect/group``/ect/gshadow`。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
>
> 参考http://man.linuxde.net/groupdel
示例:
```sh
groupadd damon # 创建damon工作组
groupdel damon # 删除这个工作组
```
## groupmod
> groupmod 命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。
>
> 参考http://man.linuxde.net/groupmod
## useradd
> useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 `/etc/passwd` 文本文件中。
>
> 参考http://man.linuxde.net/useradd
示例:
```sh
# 新建用户加入组
useradd g sales jack G company,employees # -g加入主要组、-G加入次要组
# 建立一个新用户账户,并设置 ID
useradd caojh -u 544
```
## userdel
> userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
>
> 参考http://man.linuxde.net/userdel
示例:
userdel 命令很简单,比如我们现在有个用户 linuxde其家目录位于`/var`目录中,现在我们来删除这个用户:
```sh
userdel linuxde # 删除用户linuxde但不删除其家目录及文件
userdel -r linuxde # 删除用户linuxde其家目录及文件一并删除
```
## usermod
> usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。
>
> 参考http://man.linuxde.net/usermod
示例:
```sh
# 将 newuser2 添加到组 staff 中
usermod -G staff newuser2
# 修改 newuser 的用户名为 newuser1
usermod -l newuser1 newuser
# 锁定账号 newuser1
usermod -L newuser1
# 解除对 newuser1 的锁定
usermod -U newuser1
```
## passwd
> passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
>
> 参考http://man.linuxde.net/passwd
示例:
```sh
# 如果是普通用户执行 passwd 只能修改自己的密码。
# 如果新建用户后,要为新用户创建密码,则用 passwd 用户名,注意要以 root 用户的权限来创建。
[root@localhost ~]# passwd linuxde # 更改或创建linuxde用户的密码
Changing password for user linuxde.
New UNIX password: # 请输入新密码;
Retype new UNIX password: # 再输入一次;
passwd: all authentication tokens updated successfully. # 成功;
# 普通用户如果想更改自己的密码,直接运行 passwd 即可,比如当前操作的用户是 linuxde。
[linuxde@localhost ~]$ passwd
Changing password for user linuxde. # 更改linuxde用户的密码
(current) UNIX password: # 请输入当前密码;
New UNIX password: # 请输入新密码;
Retype new UNIX password: # 确认新密码;
passwd: all authentication tokens updated successfully. # 更改成功;
# 比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
[root@localhost ~]# passwd -l linuxde # 锁定用户linuxde不能更改密码
Locking password for user linuxde.
passwd: Success # 锁定成功;
[linuxde@localhost ~]# su linuxde # 通过su切换到linuxde用户
[linuxde@localhost ~]$ passwd # linuxde来更改密码
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: # 输入linuxde的当前密码
passwd: Authentication token manipulation error # 失败,不能更改密码;
[root@localhost ~]# passwd -d linuxde # 清除linuxde用户密码
Removing password for user linuxde.
passwd: Success # 清除成功;
[root@localhost ~]# passwd -S linuxde # 查询linuxde用户密码状态
Empty password. # 空密码,也就是没有密码;
```
## su
> su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
>
> 参考http://man.linuxde.net/su
示例:
```sh
# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
su -c ls root
# 变更帐号为 root 并传入`-f`选项给新执行的 shell
su root -f
# 变更帐号为 test 并改变工作目录至 test 的家目录:
su -test
```
## sudo
> sudo 命令用来以其他身份来执行命令,预设的身份为 root。在 `/etc/sudoers` 中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入密码。
>
> 参考http://man.linuxde.net/sudo
示例:
```sh
# 指定用户执行命令
sudo -u userb ls -l
# 列出目前的权限
sudo -l
# 显示sudo设置
sudo -L
```

View File

@ -0,0 +1,190 @@
---
title: Linux 系统管理命令
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
# Linux 系统管理命令
> 关键词:`reboot`, `exit`, `shutdown`, `date`, `mount`, `umount`
<!-- TOC depthFrom:2 depthTo:2 -->
- [reboot](#reboot)
- [exit](#exit)
- [shutdown](#shutdown)
- [date](#date)
- [mount](#mount)
- [umount](#umount)
<!-- /TOC -->
## reboot
> reboot 命令用来重新启动正在运行的 Linux 操作系统。
>
> 参考http://man.linuxde.net/reboot
示例:
```sh
reboot # 重开机。
reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机)。
```
## exit
> exit 命令同于退出 shell并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。
>
> 参考http://man.linuxde.net/exit
示例:
```sh
# 退出当前 shell
[root@localhost ~]# exit
logout
# 在脚本中,进入脚本所在目录,否则退出
cd $(dirname $0) || exit 1
# 在脚本中,判断参数数量,不匹配就打印使用方式,退出
if [ "$#" -ne "2" ]; then
echo "usage: $0 <area> <hours>"
exit 2
fi
# 在脚本中,退出时删除临时文件
trap "rm -f tmpfile; echo Bye." EXIT
# 检查上一命令的退出码
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
echo "O.K"
fi
```
## shutdown
> shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
>
> 参考http://man.linuxde.net/shutdown
示例:
```sh
# 指定现在立即关机
shutdown -h now
# 指定 5 分钟后关机,同时送出警告信息给登入用户
shutdown +5 "System will shutdown after 5 minutes"
```
## date
> date 命令是显示或设置系统时间与日期。
>
> 参考http://man.linuxde.net/date
示例:
```sh
# 格式化输出
date +"%Y-%m-%d"
2009-12-07
# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
# 2 秒后输出
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
# 传说中的 1234567890 秒
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
# 普通转格式
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
# apache 格式转换
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
# 格式转换后时间游走
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
# 加减操作
date +%Y%m%d # 显示前天年月日
date -d "+1 day" +%Y%m%d # 显示前一天的日期
date -d "-1 day" +%Y%m%d # 显示后一天的日期
date -d "-1 month" +%Y%m%d # 显示上一月的日期
date -d "+1 month" +%Y%m%d # 显示下一月的日期
date -d "-1 year" +%Y%m%d # 显示前一年的日期
date -d "+1 year" +%Y%m%d # 显示下一年的日期
# 设定时间
date -s # 设置当前时间只有root权限才能设置其他只能查看
date -s 20120523 # 设置成20120523这样会把具体时间设置成空00:00:00
date -s 01:01:01 # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
date -s "01:01:01 20120523" # 这样可以设置全部时间
date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
date -s "20120523 01:01:01" # 这样可以设置全部时间
# 有时需要检查一组命令花费的时间
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
```
## mount
> mount 命令用于挂载文件系统到指定的挂载点。此命令的最常用于挂载 cdrom使我们可以访问 cdrom 中的数据,因为你将光盘插入 cdrom 中Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。
>
> 参考http://man.linuxde.net/mount
示例:
```sh
# 将 /dev/hda1 挂在 /mnt 之下
mount /dev/hda1 /mnt
# 将 /dev/hda1 用唯读模式挂在 /mnt 之下
mount -o ro /dev/hda1 /mnt
# 将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom 之下
# 用这种方法可以将一般网络上可以找到的 Linux ISO 在不烧录成光碟的情况下检视其内容
mount -o loop /tmp/image.iso /mnt/cdrom
```
## umount
> umount 命令用于卸载已经挂载的文件系统。利用设备名或挂载点都能 umount 文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。
>
> 参考http://man.linuxde.net/umount
示例:
```sh
# 通过设备名卸载
umount -v /dev/sda1
/dev/sda1 umounted
# 通过挂载点卸载
umount -v /mnt/mymount/
/tmp/diskboot.img umounted
```

View File

@ -1,7 +0,0 @@
# linux 常用命令-系统管理
* [linux 常用命令-系统操作](系统操作.md)
* [linux 常用命令-系统设置](系统设置.md)
* [linux 常用命令-用户和工作组管理](用户和工作组管理.md)
* [linux 常用命令-进程和作业管理](进程和作业管理.md)
* [linux 常用命令-系统性能管理](系统性能管理.md)

View File

@ -1,677 +0,0 @@
---
title: linux 常用命令-用户和工作组管理
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-用户和工作组管理](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%94%A8%E6%88%B7%E5%92%8C%E5%B7%A5%E4%BD%9C%E7%BB%84%E7%AE%A1%E7%90%86)
- [groupadd](#groupadd)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [groupdel](#groupdel)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [groupmod](#groupmod)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [useradd](#useradd)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [userdel](#userdel)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [usermod](#usermod)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [passwd](#passwd)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [知识扩展](#%E7%9F%A5%E8%AF%86%E6%89%A9%E5%B1%95)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [su](#su)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [sudo](#sudo)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-用户和工作组管理
## groupadd
用于创建一个新的工作组
### 补充说明
**groupadd命令** 用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
### 语法
```
groupadd(选项)(参数)
```
### 选项
```
-g指定新建工作组的id
-r创建系统工作组系统工作组的组ID小于500
-K覆盖配置文件“/ect/login.defs”
-o允许添加组ID号不唯一的工作组。
```
### 参数
组名:指定新建工作组的组名。
### 实例
建立一个新组并设置组ID加入系统
```
groupadd -g 344 jsdigname
```
此时在`/etc/passwd`文件中产生一个组IDGID是344的项目。
## groupdel
用于删除指定的工作组
### 补充说明
**groupdel命令** 用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户则必须先删除这些用户后方能删除群组。
### 语法
```
groupdel(参数)
```
### 参数
组:要删除的工作组名。
### 实例
```
groupadd damon //创建damon工作组
groupdel damon //删除这个工作组
```
## groupmod
更改群组识别码或名称
### 补充说明
**groupmod命令** 更改群组识别码或名称。需要更改群组的识别码或名称时可用groupmod指令来完成这项工作。
### 语法
```
groupmod(选项)(参数)
```
### 选项
```
-g<群组识别码>:设置欲使用的群组识别码;
-o重复使用群组识别码
-n<新群组名称>:设置欲使用的群组名称。
```
### 参数
组名:指定要修改的工作的组名。
## useradd
创建的新的系统用户
### 补充说明
**useradd命令** 用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后再用passwd设定帐号的密码而可用userdel删除帐号。使用useradd指令所建立的帐号实际上是保存在`/etc/passwd`文本文件中。
在Slackware中adduser指令是个script程序利用交谈的方式取得输入的用户帐号资料然后再交由真正建立帐号的useradd命令建立新用户如此可方便管理员建立用户帐号。在Red Hat Linux中 **adduser命令** 则是useradd命令的符号连接两者实际上是同一个指令。
### 语法
```
useradd(选项)(参数)
```
### 选项
```
-c<备注>加上备注文字。备注文字会保存在passwd的备注栏位中
-d<登入目录>:指定用户登入时的启始目录;
-D变更预设值
-e<有效期限>:指定帐号的有效期限;
-f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
-g<群组>:指定用户所属的群组;
-G<群组>:指定用户所属的附加群组;
-m自动建立用户的登入目录
-M不要自动建立用户的登入目录
-n取消建立以用户名称为名的群组
-r建立系统帐号
-s<shell>指定用户登入后所使用的shell
-u<uid>指定用户id。
```
### 参数
用户名:要创建的用户名。
### 实例
新建用户加入组:
```
useradd g sales jack G company,employees //-g加入主要组、-G加入次要组
```
建立一个新用户账户并设置ID
```
useradd caojh -u 544
```
需要说明的是设定ID值时尽量要大于500以免冲突。因为Linux安装后会建立一些特殊用户一般0到499之间的值留给bin、mail这样的系统账号。
## userdel
用于删除给定的用户以及与用户相关的文件
### 补充说明
**userdel命令** 用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
### 语法
```
userdel(选项)(参数)
```
### 选项
```
-f强制删除用户即使用户当前已登录
-r删除用户的同时删除与用户相关的所有文件。
```
### 参数
用户名:要删除的用户名。
### 实例
userdel命令很简单比如我们现在有个用户linuxde其家目录位于`/var`目录中,现在我们来删除这个用户:
```
userdel linuxde //删除用户linuxde但不删除其家目录及文件
userdel -r linuxde //删除用户linuxde其家目录及文件一并删除
```
请不要轻易用`-r`选项;他会删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。
其实也有最简单的办法,但这种办法有点不安全,也就是直接在`/etc/passwd`中删除您想要删除用户的记录;但最好不要这样做,`/etc/passwd`是极为重要的文件,可能您一不小心会操作失误。
## usermod
用于修改用户的基本信息
### 补充说明
**usermod命令** 用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的crontab档。也需手动更改使用者的at工作档。采用NIS server须在server上更动相关的NIS设定。
### 语法
```
usermod(选项)(参数)
```
### 选项
```
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L锁定用户密码使密码无效
-s<shell>修改用户登入后所使用的shell
-u<uid>修改用户ID
-U:解除密码锁定。
```
### 参数
登录名:指定要修改信息的用户登录名。
### 实例
将newuser2添加到组staff中
```
usermod -G staff newuser2
```
修改newuser的用户名为newuser1
```
usermod -l newuser1 newuser
```
锁定账号newuser1
```
usermod -L newuser1
```
解除对newuser1的锁定
```
usermod -U newuser1
```
## passwd
用于让用户可以更改自己的密码
### 补充说明
**passwd命令** 用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
### 语法
```
passwd(选项)(参数)
```
### 选项
```
-d删除密码仅有系统管理者才能使用
-f强制执行
-k设置只有在密码过期失效后方能更新
-l锁住密码
-s列出密码的相关信息仅有系统管理者才能使用
-u解开已上锁的帐号。
```
### 参数
用户名:需要设置密码的用户名。
### 知识扩展
与用户、组账户信息相关的文件
存放用户信息:
```
/etc/passwd
/etc/shadow
```
存放组信息:
```
/etc/group
/etc/gshadow
```
用户信息文件分析(每项用`:`隔开)
```
例如jack:X:503:504:::/home/jack/:/bin/bash
jack  //用户名
X  //口令、密码
503  //用户id0代表root、普通新建用户从500开始
504  //所在组
:  //描述
/home/jack/  //用户主目录
/bin/bash  //用户缺省Shell
```
组信息文件分析
```
例如jack:$!$:???:13801:0:99999:7:*:*:
jack  //组名
$!$  //被加密的口令
13801  //创建日期与今天相隔的天数
0  //口令最短位数
99999  //用户口令
7  //到7天时提醒
*  //禁用天数
*  //过期天数
```
### 实例
如果是普通用户执行passwd只能修改自己的密码。如果新建用户后要为新用户创建密码则用passwd用户名注意要以root用户的权限来创建。
```
[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码
Changing password for user linuxde.
New UNIX password: //请输入新密码;
Retype new UNIX password: //再输入一次;
passwd: all authentication tokens updated successfully. //成功;
```
普通用户如果想更改自己的密码直接运行passwd即可比如当前操作的用户是linuxde。
```
[linuxde@localhost ~]$ passwd
Changing password for user linuxde. //更改linuxde用户的密码
(current) UNIX password: //请输入当前密码;
New UNIX password: //请输入新密码;
Retype new UNIX password: //确认新密码;
passwd: all authentication tokens updated successfully. //更改成功;
```
比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
```
[root@localhost ~]# passwd -l linuxde //锁定用户linuxde不能更改密码
Locking password for user linuxde.
passwd: Success //锁定成功;
[linuxde@localhost ~]# su linuxde //通过su切换到linuxde用户
[linuxde@localhost ~]$ passwd //linuxde来更改密码
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: //输入linuxde的当前密码
passwd: Authentication token manipulation error //失败,不能更改密码;
```
再来一例:
```
[root@localhost ~]# passwd -d linuxde //清除linuxde用户密码
Removing password for user linuxde.
passwd: Success //清除成功;
[root@localhost ~]# passwd -S linuxde //查询linuxde用户密码状态
Empty password. //空密码,也就是没有密码;
```
注意:当我们清除一个用户的密码时,登录时就无需密码,这一点要加以注意。
## su
用于切换当前用户身份到其他用户身份
### 补充说明
**su命令** 用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
### 语法
```
su(选项)(参数)
```
### 选项
```
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
-f或——fast适用于csh与tsch使shell不用去读取启动文件
-l或——login改变身份时也同时变更工作目录以及HOME,SHELL,USER,logname。此外也会变更PATH变量
-m,-p或--preserve-environment变更身份时不要变更环境变量
-s<shell>或--shell=<shell>指定要执行的shell
--help显示帮助
--version显示版本信息。
```
### 参数
用户:指定要切换身份的目标用户。
### 实例
变更帐号为root并在执行ls指令后退出变回原使用者
```
su -c ls root
```
变更帐号为root并传入`-f`选项给新执行的shell
```
su root -f
```
变更帐号为test并改变工作目录至test的家目录
```
su -test
```
## sudo
以其他身份来执行命令
### 补充说明
**sudo命令** 用来以其他身份来执行命令预设的身份为root。在`/etc/sudoers`中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo则会发出警告的邮件给管理员。用户使用sudo时必须先输入密码之后有5分钟的有效期限超过期限则必须重新输入密码。
### 语法
```
sudo(选项)(参数)
```
### 选项
```
-b在后台执行指令
-h显示帮助
-H将HOME环境变量设为新身份的HOME环境变量
-k结束密码的有效期限也就是下次再执行sudo时便需要输入密码
-l列出目前用户可执行与无法执行的指令
-p改变询问密码的提示符号
-s<shell>执行指定的shell
-u<用户>以指定的用户作为新的身份。若不加上此参数则预设以root作为新的身份
-v延长密码有效期限5分钟
-V :显示版本信息。
```
### 参数
指令:需要运行的指令和对应的参数。
### 实例
```
$ sudo su -
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
```
这个命令相当于使用root超级用户重新登录一次shell只不过密码是使用的当前用户的密码。而且重要是该命令会 **重新加载/etc/profile文件以及/etc/bashrc文件等系统配置文件并且还会重新加载root用户的$SHELL环境变量所对应的配置文件** 比如root超级用户的$SHELL是/bin/bash则会加载/root/.bashrc等配置。如果是/bin/zsh则会加载/root/.zshrc等配置执行后是完全的root环境。
```
$ sudo -i
# env | grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)'
```
这个命令基本与 `sudo su -` 相同执行后也是root超级用户的环境只不过是多了一些当前用户的信息。
```
$ sudo -s
# env|grep -E '(HOME|SHELL|USER|LOGNAME|^PATH|PWD|TEST_ETC|TEST_ZSH|TEST_PRO|TEST_BASH|TEST_HOME|SUDO)' --color
```
这个命令相当于 **以当前用户的$SHELL开启了一个root超级用户的no-login的shell不会加载/etc/profile等系统配置** 。所以/etc/profile文件中定义的TEST_ETC环境变量就看不到了但是会**加载root用户对应的配置文件**比如root用户的$SHELL是/bin/zsh那么会加载/root/.zshrc配置文件执行完后不会切换当前用户的目录。
配置sudo必须通过编辑`/etc/sudoers`文件而且只有超级用户才可以修改它还必须使用visudo编辑。之所以使用visudo有两个原因一是它能够防止两个用户同时修改它二是它也能进行有限的语法检查。所以即使只有你一个超级用户你也最好用visudo来检查一下语法。
visudo默认的是在vi里打开配置文件用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件它会提示你出现的问题并询问该如何处理就像
```
>>> sudoers file: syntax error, line 22 <<
```
此时我们有三种选择键入“e”是重新编辑键入“x”是不保存退出键入“Q”是退出并保存。如果真选择Q那么sudo将不会再运行直到错误被纠正。
现在我们一起来看一下神秘的配置文件学一下如何编写它。让我们从一个简单的例子开始让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件可以看到类似下面几行
```
# Runas alias specification
# User privilege specificationroot ALL=(ALL)ALL
```
我们一看就明白个差不多了root有所有权限只要仿照现有root的例子就行我们在下面加一行最好用tab作为空白
```
foobar ALL=(ALL) ALL
```
保存退出后切换到foobar用户我们用它的身份执行命令
```
[foobar@localhost ~]$ ls /root
ls: /root: 权限不够
[foobar@localhost ~]$ sudo ls /root
PassWord:
anaconda-ks.cfg Desktop install.log install.log.syslog
```
好了我们限制一下foobar的权利不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig把那一行改为
```
foobar localhost= /sbin/ifconfig, /bin/ls
```
再来执行命令:
```
[foobar@localhost ~]$ sudo head -5 /etc/shadow
Password:
Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.
[foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
```
现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机我们后面把它改成了主机名它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令这样编写配置文件
```
foobar linux=(jimmy,rene) /bin/kill
```
但这还有个问题foobar到底以jimmy还是rene的身份执行这时我们应该想到了`sudo -u`了,它正是用在这种时候。 foobar可以使用`sudo -u jimmy kill PID`或者`sudo -u rene kill PID`,但这样挺麻烦,其实我们可以不必每次加`-u`把rene或jimmy设为默认的目标用户即可。再在上面加一行
```
Defaults:foobar runas_default=rene
```
Defaults后面如果有冒号是对后面用户的默认如果没有则是对所有用户的默认。就像配置文件中自带的一行
```
Defaults env_reset
```
另一个问题是很多时候我们本来就登录了每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢当然可以我们这样修改配置文件
```
foobar localhost=NOPASSWD: /bin/cat, /bin/ls
```
再来sudo一下
```
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log
install.log.syslog
```
当然你也可以说“某些命令用户foobar不可以运行”通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的一个用户完全可以把那个命令拷贝到别的地方换一个名字后再来运行。
**日志与安全**
sudo为安全考虑得很周到不仅可以记录日志还能在有必要时向系统管理员报告。但是sudo的日志功能不是自动的必须由管理员开启。这样来做
```
touch /var/log/sudo
vi /etc/syslog.conf
```
在syslog.conf最后面加一行必须用tab分割开并保存
```
local2.debug /var/log/sudo
```
重启日志守候进程,
```
ps aux grep syslogd
```
把得到的syslogd进程的PID输出的第二列是PID填入下面
```
kill HUP PID
```
这样sudo就可以写日志了
```
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg
Desktop install.log
install.log.syslog
$cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar :
TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root
```
不过有一个小小的“缺陷”sudo记录日志并不是很忠实
```
[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null
cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ;
PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow
```
重定向没有被记录在案为什么因为在命令运行之前shell把重定向的工作做完了sudo根本就没看到重定向。这也有个好处下面的手段不会得逞
```
[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够
```
sudo 有自己的方式来保护安全。以root的身份执行`sudo-V`查看一下sudo的设置。因为考虑到安全问题一部分环境变量并没有传递给sudo后面的命令或者被检查后再传递的比如PATHHOMESHELL等。当然你也可以通过sudoers来配置这些环境变量。

View File

@ -1,548 +0,0 @@
---
title: linux 常用命令-系统性能管理
date: 2018/02/27
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-系统性能管理](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%B3%BB%E7%BB%9F%E6%80%A7%E8%83%BD%E7%AE%A1%E7%90%86)
- [df](#df)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [du](#du)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [top](#top)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [top交互命令](#top%E4%BA%A4%E4%BA%92%E5%91%BD%E4%BB%A4)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [free](#free)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [iotop](#iotop)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [安装](#%E5%AE%89%E8%A3%85)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-系统性能管理
## df
显示磁盘的相关信息
### 补充说明
**df命令** 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间目前还剩下多少空间等信息。
### 语法
```
df(选项)(参数)
```
### 选项
```
-a或--all包含全部的文件系统
--block-size=<区块大小>:以指定的区块大小来显示区块数目;
-h或--human-readable以可读性较高的方式来显示信息
-H或--si与-h参数相同但在计算时是以1000 Bytes为换算单位而非1024 Bytes
-i或--inodes显示inode的信息
-k或--kilobytes指定区块大小为1024字节
-l或--local仅显示本地端的文件系统
-m或--megabytes指定区块大小为1048576字节
--no-sync在取得磁盘使用信息前不要执行sync指令此为预设值
-P或--portability使用POSIX的输出格式
--sync在取得磁盘使用信息前先执行sync指令
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;
-T或--print-type显示文件系统的类型
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;
--help显示帮助
--version显示版本信息。
```
### 参数
文件:指定文件系统上的文件。
### 实例
查看系统磁盘设备默认是KB为单位
```
[root@LinServ-1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
```
使用`-h`选项以KB以上的单位来显示可读性高
```
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1
```
查看全部文件系统:
```
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
```
## du
显示每个文件和目录的磁盘使用空间
### 补充说明
**du命令** 也是查看使用空间的但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看还是和df命令有一些区别的。
### 语法
```
du [选项][文件]
```
### 选项
```
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以KMG为单位提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件><文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同但是KMG是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
```
### 实例
显示目录或者文件所占空间:
```
root@localhost [test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
```
只显示当前目录下面的子目录的目录大小和当前目录的总的大小最下面的1288为当前目录的总大小
显示指定文件所占空间:
```
[root@localhost test]# du log2012.log
300 log2012.log
```
查看指定目录的所占空间:
```
[root@localhost test]# du scf
4 scf/lib
4 scf/service/deploy/product
4 scf/service/deploy/info
12 scf/service/deploy
16 scf/service
4 scf/doc
4 scf/bin
32 scf
```
显示多个文件所占空间:
```
[root@localhost test]# du log30.tar.gz log31.tar.gz
4 log30.tar.gz
4 log31.tar.gz
```
只显示总和的大小:
```
[root@localhost test]# du -s
1288 .
[root@localhost test]# du -s scf
32 scf
[root@localhost test]# cd ..
[root@localhost soft]# du -s test
1288 test
```
## top
显示或管理执行中的程序
### 补充说明
**top命令** 可以实时动态地查看系统的整体运行情况是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面用热键可以管理。
### 语法
```
top(选项)
```
### 选项
```
-b以批处理模式操作
-c显示完整的治命令
-d屏幕刷新间隔时间
-I忽略失效过程
-s保密模式
-S累积模式
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
```
### top交互命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的如果在命令行中使用了-s选项 其中一些命令可能会被屏蔽。
```
h显示帮助画面给出一些简短的命令总结说明
k终止一个进程
i忽略闲置和僵死进程这是一个开关式命令
q退出程序
r重新安排一个进程的优先级别
S切换到累计模式
s改变两次刷新之间的延迟时间单位为s如果有小数就换算成ms。输入0值则系统将不断刷新默认值是5s
f或者F从当前显示中添加或者删除项目
o或者O改变显示项目的顺序
l切换显示平均负载和启动时间信息
m切换显示内存信息
t切换显示进程和CPU状态信息
c切换显示命令名称和完整命令行
M根据驻留内存大小进行排序
P根据CPU使用百分比大小进行排序
T根据时间/累计时间进行排序;
w将当前设置写入~/.toprc文件中。
```
### 实例
```
top - 09:44:56 up 16 days, 21:23, 1 user, load average: 9.59, 4.75, 1.92
Tasks: 145 total, 2 running, 143 sleeping, 0 stopped, 0 zombie
Cpu(s): 99.8%us, 0.1%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4147888k total, 2493092k used, 1654796k free, 158188k buffers
Swap: 5144568k total, 56k used, 5144512k free, 2013180k cached
```
**解释:**
* top - 09:44:56[当前系统时间],
* 16 days[系统已经运行了16天],
* 1 user[个用户当前登录],
* load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]
* Tasks: 145 total[总进程数],
* 2 running[正在运行的进程数],
* 143 sleeping[睡眠的进程数],
* 0 stopped[停止的进程数],
* 0 zombie[冻结进程数],
* Cpu(s): 99.8%us[用户空间占用CPU百分比],
* 0.1%sy[内核空间占用CPU百分比],
* 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
* 0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
* 0.0%hi[],
* 0.0%st[],
* Mem: 4147888k total[物理内存总量],
* 2493092k used[使用的物理内存总量],
* 1654796k free[空闲内存总量],
* 158188k buffers[用作内核缓存的内存量]
* Swap:  5144568k total[交换区总量],
* 56k used[使用的交换区总量],
* 5144512k free[空闲交换区总量],
* 2013180k cached[缓冲的交换区总量],
## free
显示内存的使用情况
### 补充说明
**free命令** 可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
### 语法
```
free(选项)
```
### 选项
```bash
-b # 以Byte为单位显示内存使用情况
-k # 以KB为单位显示内存使用情况
-m # 以MB为单位显示内存使用情况
-g # 以GB为单位显示内存使用情况。
-o # 不显示缓冲区调节列;
-s<间隔秒数> # 持续观察内存使用状况;
-t # 显示内存总和列;
-V # 显示版本信息。
```
### 实例
```bash
free -t # 以总和的形式显示内存的使用信息
free -s 10 # 周期性的查询内存使用信息每10s 执行一次命令
```
显示内存使用情况
```bash
free -m
total used free shared buffers cached
Mem: 2016 1973 42 0 163 1497
-/+ buffers/cache: 312 1703
Swap: 4094 0 4094
```
**第一部分Mem行解释**
```
total内存总数
used已经使用的内存数
free空闲的内存数
shared当前已经废弃不用
buffers Buffer缓存内存数
cached Page缓存内存数。
```
关系total = used + free
**第二部分(-/+ buffers/cache)解释:**
```
(-buffers/cache) used内存数第一部分Mem行中的 used buffers cached
(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached
```
可见-buffers/cache反映的是被程序实实在在吃掉的内存而+buffers/cache反映的是可以挪用的内存总数。
第三部分是指交换分区。
输出结果的第四行是交换分区SWAP的也就是我们通常所说的虚拟内存。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看第一行是从OS的角度来看因为对于OSbuffers/cached 都是属于被使用所以他的可用内存是2098428KB,已用内存是30841684KB,其中包括内核OS使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看对于应用程序来说buffers/cached 是等于可用的因为buffer/cached是为了提高文件读取的性能当应用程序需在用到内存的时候buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如本机情况的可用内存为:
18007156=2098428KB+4545340KB+11363424KB
接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换。如何看额定值:
```bash
cat /proc/meminfo
MemTotal: 16140816 kB
MemFree: 816004 kB
MemAvailable: 2913824 kB
Buffers: 17912 kB
Cached: 2239076 kB
SwapCached: 0 kB
Active: 12774804 kB
Inactive: 1594328 kB
Active(anon): 12085544 kB
Inactive(anon): 94572 kB
Active(file): 689260 kB
Inactive(file): 1499756 kB
Unevictable: 116888 kB
Mlocked: 116888 kB
SwapTotal: 8191996 kB
SwapFree: 8191996 kB
Dirty: 56 kB
Writeback: 0 kB
AnonPages: 12229228 kB
Mapped: 117136 kB
Shmem: 58736 kB
Slab: 395568 kB
SReclaimable: 246700 kB
SUnreclaim: 148868 kB
KernelStack: 30496 kB
PageTables: 165104 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 16262404 kB
Committed_AS: 27698600 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 311072 kB
VmallocChunk: 34350899200 kB
HardwareCorrupted: 0 kB
AnonHugePages: 3104768 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 225536 kB
DirectMap2M: 13279232 kB
DirectMap1G: 5242880 kB
```
交换将通过三个途径来减少系统中使用的物理页面的个数: 
1. 减少缓冲与页面cache的大小
2. 将系统V类型的内存页面交换出去 
3. 换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上少量地使用swap是不是影响到系统性能的。
那buffers和cached都是缓存两者有什么区别呢
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式
Buffer Cache和Page Cache。前者针对磁盘块的读写后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
磁盘的操作有逻辑级文件系统和物理级磁盘块这两种Cache就是分别缓存逻辑和物理级数据的。
Page cache实际上是针对文件系统的是文件的缓存在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘这种映射关系由文件系统来完成。当page cache的数据需要刷新时page cache中的数据交给buffer cache因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了没有真正意义上的cache操作。
Buffer cache是针对磁盘块的缓存也就是在没有文件系统的情况下直接对磁盘进行操作的数据会缓存到buffer cache中例如文件系统的元数据都会缓存到buffer cache中。
简单说来page cache用来缓存文件数据buffer cache用来缓存磁盘数据。在有文件系统的情况下对文件操作那么数据会缓存到page cache如果直接采用dd等工具对磁盘进行读写那么数据会缓存到buffer cache。
所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了也是该考虑优化程序或加内存了。
## iotop
用来监视磁盘I/O使用状况的工具
### 补充说明
**iotop命令** 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostatnmon等大多数是只能统计到per设备的读写情况如果你想知道每个进程是如何使用IO的就比较麻烦使用iotop命令可以很方便的查看。
iotop使用Python语言编写而成要求Python2.5及以上版本和Linux kernel2.6.20及以上版本。iotop提供有源代码及rpm包可从其官方主页下载。
### 安装
**Ubuntu**
```
apt-get install iotop
```
**CentOS**
```
yum install iotop
```
**编译安装**
```
wget http://guichaz.free.fr/iotop/files/iotop-0.4.4.tar.gz
tar zxf iotop-0.4.4.tar.gz
python setup.py build
python setup.py install
```
### 语法
```
iotop选项
```
### 选项
```
-o只显示有io操作的进程
-b批量显示无交互主要用作记录到文件。
-n NUM显示NUM次主要用于非交互式模式。
-d SEC间隔SEC秒显示一次。
-p PID监控的进程pid。
-u USER监控的进程用户。
```
**iotop常用快捷键**
1. 左右箭头改变排序方式默认是按IO排序。
2. r改变排序顺序。
3. o只显示有IO输出的进程。
4. p进程/线程的显示方式的切换。
5. a显示累积使用量。
6. q退出。
### 实例
直接执行iotop就可以看到效果了
```
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]
7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1]
8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0]
10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1]
11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper]
2572 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bluetooth]
```

View File

@ -1,168 +0,0 @@
---
title: linux 常用命令-系统操作
date: 2018/02/28
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-系统操作](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%B3%BB%E7%BB%9F%E6%93%8D%E4%BD%9C)
- [reboot](#reboot)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [exit](#exit)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [shutdown](#shutdown)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-系统操作
## reboot
重新启动正在运行的Linux操作系统
### 补充说明
**reboot命令** 用来重新启动正在运行的Linux操作系统。
### 语法
```
reboot(选项)
```
### 选项
```
-d重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果
-f强制重新开机不调用shutdown指令的功能
-i在重开机之前先关闭所有网络界面
-n重开机之前不检查是否有未结束的程序
-w仅做测试并不真正将系统重新开机只会把重开机的数据写入/var/log目录下的wtmp记录文件。
```
### 实例
```
reboot //重开机。
reboot -w //做个重开机的模拟(只有纪录并不会真的重开机)。
```
## exit
退出当前的shell
### 补充说明
**exit命令** 同于退出shell并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数则shell以预设值退出。状态值0代表执行成功其他值代表执行失败。
### 语法
```
exit(参数)
```
### 参数
返回值指定shell返回值。
### 实例
退出当前shell
```
[root@localhost ~]# exit
logout
```
在脚本中,进入脚本所在目录,否则退出:
```
cd $(dirname $0) || exit 1
```
在脚本中,判断参数数量,不匹配就打印使用方式,退出:
```
if [ "$#" -ne "2" ]; then
echo "usage: $0 <area> <hours>"
exit 2
fi
```
在脚本中,退出时删除临时文件:
```
trap "rm -f tmpfile; echo Bye." EXIT
```
检查上一命令的退出码:
```
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
echo "O.K"
fi
```
## shutdown
用来执行系统关机的命令。
### 补充说明
**shutdown命令** 用来系统关机命令。shutdown指令可以关闭所有程序并依用户的需要进行重新开机或关机的动作。
### 语法
```
shutdown(选项)(参数)
```
### 选项
```
-c当执行“shutdown -h 11:50”指令时只要按+键就可以中断关机的指令;
-f重新启动时不执行fsck
-F重新启动时执行fsck
-h将系统关机
-k只是送出信息给所有用户但不会实际关机
-n不调用init程序进行关机而由shutdown自己进行
-rshutdown之后重新启动
-t<秒数>:送出警告信息和删除信息之间要延迟多少秒。
```
### 参数
* [时间]设置多久时间后执行shutdown指令
* [警告信息]:要传送给所有登入用户的信息。
### 实例
指定现在立即关机:
```
shutdown -h now
```
指定5分钟后关机同时送出警告信息给登入用户
```
shutdown +5 "System will shutdown after 5 minutes"
```

View File

@ -1,332 +0,0 @@
---
title: linux 常用命令-系统设置
date: 2018/02/28
categories:
- linux
tags:
- linux
- command
---
<!-- TOC -->
- [linux 常用命令-系统设置](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E7%B3%BB%E7%BB%9F%E8%AE%BE%E7%BD%AE)
- [date](#date)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [日期格式字符串列表](#%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%97%E8%A1%A8)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [mount](#mount)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [umount](#umount)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC -->
# linux 常用命令-系统设置
## date
显示或设置系统时间与日期
### 补充说明
**date命令** 是显示或设置系统时间与日期。
很多shell脚本里面需要打印不同格式的时间或日期以及要根据时间和日期执行操作。延时通常用于脚本执行过程中提供一段等待的时间。日期可以以多种格式去打印也可以使用命令设置固定的格式。在类UNIX系统中日期被存储为一个整数其大小为自世界标准时间UTC1970年1月1日0时0分0秒起流逝的秒数。
### 语法
```
date(选项)(参数)
```
### 选项
```
-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u显示GMT
--help在线帮助
--version显示版本信息。
```
### 参数
<+时间日期格式>:指定显示时使用的日期时间格式。
### 日期格式字符串列表
```
%H 小时24小时制00~23
%I 小时12小时制01~12
%k 小时24小时制0~23
%l 小时12小时制1~12
%M 分0059
%p 显示出上午或下午
%r 时间12小时制
%s 从1970年1月1日0点到目前经历的秒数
%S 秒0059
%T 时间24小时制hh:mm:ss
%X 显示时间的格式H时M分S秒
%Z 按字母表排序的时区缩写
%a 星期名缩写
%A 星期名全称
%b 月名缩写
%B 月名全称
%c 日期和时间
%d 按月计的日期0131
%D 日期mm/dd/yy
%h 和%b选项相同
%j 一年的第几天001~366
%m 月份0112
%w 一个星期的第几天0代表星期天
%W 一年的第几个星期0053星期一为第一天
%x 显示日期的格式mm/dd/yy
%y 年份的最后两个数字1999则是99
%Y 年份比如1970、1996等
%C 世纪,通常为省略当前年份的后两位数字
%U 一年中的第几周,以周日为每星期第一天
%e 按月计的日期,添加空格,等于%_d
```
### 实例
格式化输出:
```
date +"%Y-%m-%d"
2009-12-07
```
输出昨天日期:
```
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
```
2秒后输出
```
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
```
传说中的 1234567890 秒:
```
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
```
普通转格式:
```
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
```
apache格式转换
```
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
```
格式转换后时间游走:
```
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
```
加减操作:
```
date +%Y%m%d //显示前天年月日
date -d "+1 day" +%Y%m%d //显示前一天的日期
date -d "-1 day" +%Y%m%d //显示后一天的日期
date -d "-1 month" +%Y%m%d //显示上一月的日期
date -d "+1 month" +%Y%m%d //显示下一月的日期
date -d "-1 year" +%Y%m%d //显示前一年的日期
date -d "+1 year" +%Y%m%d //显示下一年的日期
```
设定时间:
```
date -s //设置当前时间只有root权限才能设置其他只能查看
date -s 20120523 //设置成20120523这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" //这样可以设置全部时间
date -s "01:01:01 20120523" //这样可以设置全部时间
date -s "2012-05-23 01:01:01" //这样可以设置全部时间
date -s "20120523 01:01:01" //这样可以设置全部时间
```
有时需要检查一组命令花费的时间,举例:
```
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
```
## mount
用于挂载Linux系统外的文件。
### 补充说明
**mount命令** Linux mount命令是经常会使用到的命令它用于挂载Linux系统外的文件。
### 语法
```
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
```
### 选项
```
-V显示程序版本
-h显示辅助讯息
-v显示较讯息通常和 -f 用来除错。
-a将 /etc/fstab 中定义的所有档案系统挂上。
-F这个命令通常和 -a 一起使用,它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。
-f通常用在除错的用途。它会使 mount 并不执行实际挂上的动作,而是模拟整个挂上的过程。通常会和 -v 一起使用。
-n一般而言mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-s-r等于 -o ro
-w等于 -o rw
-L将含有特定标签的硬盘分割挂上。
-U将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。
-t指定档案系统的型态通常不必指定。mount 会自动选择正确的型态。
-o async打开非同步模式所有的档案读写动作都会用非同步模式执行。
-o sync在同步模式下执行。
-o atime、-o noatime当 atime 打开时,系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。
-o auto、-o noauto打开/关闭自动挂上模式。
-o defaults:使用预设的选项 rw, suid, dev, exec, auto, nouser, and async.
-o dev、-o nodev-o exec、-o noexec允许执行档被执行。
-o suid、-o nosuid
允许执行档在 root 权限下执行。
-o user、-o nouser使用者可以执行 mount/umount 的动作。
-o remount将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统现在用可读写的模式重新挂上。
-o ro用唯读模式挂上。
-o rw用可读写模式挂上。
-o loop=:使用 loop 模式用来将一个档案当成硬盘分割挂上系统。
```
### 实例
`/dev/hda1` 挂在 `/mnt` 之下。
```
#mount /dev/hda1 /mnt
```
`/dev/hda1` 用唯读模式挂在 `/mnt` 之下。
```
#mount -o ro /dev/hda1 /mnt
```
`/tmp/image.iso` 这个光碟的 `image` 档使用 `loop` 模式挂在 `/mnt/cdrom` 之下。用这种方法可以将一般网络上可以找到的 `Linux` 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。
```
#mount -o loop /tmp/image.iso /mnt/cdrom
```
## umount
用于卸载已经加载的文件系统
### 补充说明
**umount命令** 用于卸载已经加载的文件系统。利用设备名或挂载点都能umount文件系统不过最好还是通过挂载点卸载以免使用绑定挂载一个设备多个挂载点时产生混乱。
### 语法
```
umount(选项)(参数)
```
### 选项
```
-a卸除/etc/mtab中记录的所有文件系统
-h显示帮助
-n卸除时不要将信息存入/etc/mtab文件中
-r若无法成功卸除则尝试以只读的方式重新挂入文件系统
-t<文件系统类型>:仅卸除选项中所指定的文件系统;
-v执行时显示详细的信息
-V显示版本信息。
```
### 参数
文件系统:指定要卸载的文件系统或者其对应的设备文件名。
### 实例
下面两条命令分别通过设备名和挂载点卸载文件系统,同时输出详细信息:
通过设备名卸载
```
umount -v /dev/sda1
/dev/sda1 umounted
```
通过挂载点卸载
```
umount -v /mnt/mymount/
/tmp/diskboot.img umounted
```
如果设备正忙卸载即告失败。卸载失败的常见原因是某个打开的shell当前目录为挂载点里的某个目录
```
umount -v /mnt/mymount/
umount: /mnt/mymount: device is busy
umount: /mnt/mymount: device is busy
```
有时导致设备忙的原因并不好找。碰到这种情况时可以用lsof列出已打开文件然后搜索列表查找待卸载的挂载点
```
lsof | grep mymount 查找mymount分区里打开的文件
bash 9341 francois cwd DIR 8,1 1024 2 /mnt/mymount
```
从上面的输出可知mymount分区无法卸载的原因在于francois运行的PID为9341的bash进程。
对付系统文件正忙的另一种方法是执行延迟卸载:
```
umount -vl /mnt/mymount/ 执行延迟卸载
```
延迟卸载lazy unmount会立即卸载目录树里的文件系统等到设备不再繁忙时才清理所有相关资源。卸载可移动存储介质还可以用eject命令。下面这条命令会卸载cd并弹出CD
```
eject /dev/cdrom 卸载并弹出CD
```

View File

@ -7,37 +7,13 @@ tags:
- linux - linux
- command - command
--- ---
<!-- TOC depthFrom:2 depthTo:2 -->
<!-- TOC --> - [ps](#ps)
- [kill](#kill)
- [linux 常用命令-进程和作业管理](#linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4-%E8%BF%9B%E7%A8%8B%E5%92%8C%E4%BD%9C%E4%B8%9A%E7%AE%A1%E7%90%86) - [systemctl](#systemctl)
- [ps](#ps) - [service](#service)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E) - [crontab](#crontab)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [kill](#kill)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [systemctl](#systemctl)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [service](#service)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [实例](#%E5%AE%9E%E4%BE%8B)
- [crontab](#crontab)
- [补充说明](#%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E)
- [语法](#%E8%AF%AD%E6%B3%95)
- [选项](#%E9%80%89%E9%A1%B9)
- [参数](#%E5%8F%82%E6%95%B0)
- [知识扩展](#%E7%9F%A5%E8%AF%86%E6%89%A9%E5%B1%95)
- [实例](#%E5%AE%9E%E4%BE%8B)
<!-- /TOC --> <!-- /TOC -->