Shell笔记系列七
du/df
磁盘空间是一种有限资源,du(disk usage) 和df(disk free)命令可以报告磁盘的使用情况
找出某个文件占用的磁盘空间:
[land@localhost test]$ du hello.txt
4 hello.txt
递归的查考某个目录中所有文件的磁盘使用情况
[land@localhost test]$ du -a www.csdn.net/
104 www.csdn.net/nav/newarticles
0 www.csdn.net/nav/watchers
140 www.csdn.net/nav/news
......
du命令默认显示文件占用的总字节数,以KB,MB或GB为单位显示磁盘使用情况,可以使用-h选项。-b选项以字节为单位打印(默认),-k以KB为单位打印文件大小,-m以MB为单位打印文件大小,-B以指定块为单位打印文件大小。
[land@localhost test]$ du -h hello.txt
4.0K hello.txt
[land@localhost test]$
-c选项可以计算出文件或目录所占用的总的磁盘空间,-s选项则只输出总计数据,可以和-h配置打印。
[land@localhost test]$ du -sh www.csdn.net/
25M www.csdn.net/
--exclude选项可以与通配符或单个文件名配合使用;--max-depth 可以限制du遍历目录的层数。
time
可以测量出应用程序的执行时间。time application ,time命令或执行application,当application执行完毕后,time命令将其real时间,sys时间,user时间输出到stderr中,将application的正常输出发送到stdout中。
[land@localhost test]$ time ls
hello.txt land@192.168.192.134 output3.tar www.csdn.net yes.pub
image.baidu.com output2.tar output.tar yes
real 0m0.003s
user 0m0.001s
sys 0m0.002s
/usr/bin/time -o ouput.txt command : 可以将相关的时间统计信息写入文件,
/usr/bin/time -a -o output.txt command :可以将相关的时间统计信息追加到文件的末尾。
-f可以指定输出哪些统计信息及其格式 :
[land@localhost test]$ /usr/bin/time -f "Time spend %U " -a -o timespent.log ls
hello.txt land@192.168.192.134 output3.tar timespent.log yes
image.baidu.com output2.tar output.tar www.csdn.net yes.pub
[land@localhost test]$ cat timespent.log
Time spend 0.00
参数解释:time命令默认报告3类时间:
Real:指的是壁钟时间即命令开始到执行结束的时间。
User:指进程花费在用户模式的中的CPU时间。
Sys:指进程花费在内核中的CPU时间。
who
可以获取当前登录用户的相关信息,该命令会显示登录名,用户所使用的TTY,登录时间以及登录用户的远程主机名。
TTY:是与文本终端相关联的设备文件,当用户产生一个新终端,对应的设备文件就会出现在/dev中,可以使用tty命令获取当前终端的设备路径。
[land@localhost test]$ who
land :0 2018-12-13 06:34 (:0)
land pts/1 2018-12-13 07:26 (:0)
w
w命令可以获取更详细的与用户登录有关的信息。
users
列出当前的登录的用户列表。
last
可以获取来自文件/var/log/wtmp创建之后登录过系统的用户列表,可以追溯到很久
[land@localhost test]$ last
land pts/1 :0 Thu Dec 13 07:26 still logged in
land pts/1 :0 Thu Dec 13 06:50 - 07:15 (00:24)
land pts/0 :0 Thu Dec 13 06:50 - 08:04 (01:14)
land pts/1 :0 Thu Dec 13 06:43 - 06:48 (00:05)
ps
ps命令可以显示出系统中进程的详细信息,包括CPU的使用情况,所执行的命令,内存占用,进程状态等。
logger
守护进程和系统进程的日志文件位于/var/log目录中,守护进程sylogd使用syslog标准协议处理日志
向日志文件/var/log/message中写入信息
[root@localhost ~]# logger this is my first to use the logger command
[root@localhost ~]# tail -n 1 /var/log/messages
Dec 13 08:31:49 localhost land: this is my first to use the logger command
[root@localhost ~]#
选项-t可以定义消息标签
选项-f可以将其他文件的内容记录到系统日志中。
fsck
检查文件系统,如果文件系统长时间没有检查或者怀疑文件有损坏,Linux在启动的时候会自动执行fsck,也可以手动执行该命令
fsck /dev/sdb1
选项-A可以检查指定设备的所有文件系统。
选项-a指示fsck尝试自动修复错误。
which
用来找好粗某个命令的位置
whereis
用来返回命令的路径,还可以打印出其对应的命令手册以及源代码的路径。
whatis
会输出指定命令的一行简单描述,描述信息是从命令手册中解析出来的。
file
可以用来确定文件的类型。
kill
信号能够中断正在运行的程序,当进程接受到一个信号时,它会执行对应的信号处理程序作为响应,编译型的应用程序使用系统调用kill生成信号,通过kill命令实现。
终止进程,kill命令默认发送SIGTERM信号,信号用来终止进程,进程ID列表中使用空格来分隔各个进程。
[land@localhost ~]$ top &
[1] 2968
[land@localhost ~]$ kill 2968
[1]+ Stopped top
选项-s可以指定发送给进程的信号
kill -s SINGAL PID
hostname/uname
可以输出当前系统的主机名
crontab
使用cron进行调度
允许任务能够按照固定的时间间隔在系统后台自动运行,cron使用一个表,表中保存了需要执行的一系列脚本或命令以及执行的时间。cron常用于调度系统维护任务,例如备份。
cron表指定了执行的时间以及要执行的命令,cron表中的每一行都定义了单条命令,命令可以是脚本或二进制可执行文件。cron表中的每一行均由6个字段组成,每个字段之间以空格分隔并按照以下顺序排列:
分钟,小时,天,月份,星期中的某天,命令。
前5个字段指明命令开始执行的时间,多个值之间使用逗号分隔,星号表示任何时间段,除号表示调度的时间间隔。(在分钟字段上出现*/5表示每隔5分钟)
/etc/crontab文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
在每天中每小时的第二分钟执行脚本test.sh
02 * * * * /home/land/test.sh
在每周日的时候,每隔2小时执行脚本script.sh
00 /2 * * 0 / home/land/scripth
crontab命令采用交互式或使用预先写好的文件
crontab -e
02 * * * 1 /home/land/test2.sh
执行cron作业使用的权限同创建crontab的用户的权限相同,如果需要执行更高的权限命令,需要以root用户身份执行crontab命令。
crontab -i 可列出当前用户的cron表
crontab -r 可以删除当前用户的cron表。
useradd
用来创建新用户
[land@localhost ~]$ useradd xixi -p 123456 -m
deluser
用来删除用户
[land@localhost ~]$ deluser xixi --remove-all-files
cssh
用于修改用户的默认shell
[land@localhost ~]$ chsh xixi -s SHELL
passwd
用于修改用户的密码,不加任何参数,则默认修改当前用户的密码
[land@localhost ~]$ passwd land
addgroup
创建一个新的用户组
[land@localhost ~]$ addgroup mysql
在创建组的时候,将一个特定的用户,添加到组中
[land@localhost ~]$ addgroup xixi mysql
delgroup
删除一个用户组
[land@localhost ~]$ delgroup mysql
参考《Linux Shell 脚本攻略》