linux-tutorial/docs/linux/commands/系统管理/系统设置.md

333 lines
9.8 KiB
Markdown
Raw Normal View History

2018-02-28 09:43:42 +08:00
---
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
```