网络
ping
检查网络的共通性,ping使用忽略网控制消息协议(Internet Control Message Protocol,ICMP)中的echo分组。当向某主机发送echo分组时,如果分组能够送达且该主机处于活动状态,那么它就会返回一条响应。
-c 指定所发送echo分组数量,写在后面 ping www.baidu.com -c 2
ping命令如果顺利执行,会返回退出状态0,否则返回非0.通过$?获得返回值。
Traceroute
当应用程序通过互联网请求服务时,服务的可能位于远端,两者之间通过多个网关或设备节点相连。分组要穿过这些无关才能到达目的地。可以使用traceroute显示分组途径的所有网关的地址。可以帮助我们搞明白分组到达目的地需要经过多少跳(hop)。中途的网关或路由器的数量给出一个策略网络上两个节点之间距离的度量(metric)。
ssh
访问远程计算机上的shell,进而执行命令。
通过网络传输文件
lftp 通过ftp传输文件。输入quit退出会话
sftp 通过ssh连接传输文件。安全ftp。输入quit退出会话
scp 使用ssh进行传输
用SSH实现无密码自动登录
SSH采用非对称加密技术,认证密钥包含两部分:一个公钥和一个私钥。
netstat
用于网络服务分析的命令。查看开发端口与服务
netstat -tnp 列出开发端口与服务
创建套接字
使用netcat命令(或nc)
nc -l 1234
nc hostname port
nc -zv ip port 查看机器端口是否打开
nc -l -p 80 打开本机80端口
iwconfig 获得无线接口的名称
磁盘管理
df和du
du
du 查看某个或多个文件占用磁盘大小,统计结构默认以字节做计量单位。
-a 递归输出指定目录或多个目录所有文件的统计结构
-h 以kb为单位显示
-c 输出文件或目录的磁盘使用情况,会在输出结果末尾加上一行总计
-s 只输出合计数据。可配合-h打印易读的格式
-b 以字节为单位
-k 以kb为单位
-m 以mb为单位
-B 以块为单位
--exclude 排除部分文件
du aa.txt 查看文件大小
du jpg 查看文件夹大小
du -a jpg 查看文件夹内文件大小
du -B 4 jpg
du -B 1024 jpg
du -exclude "*.txt" aa.txt 排除txt文件进行统计
du -ak dir | sort -nrk 1 | head 找出指定目录中最大的10个文件
df 提供磁盘使用情况
df -h
计算命令执行时间
要测试执行时间,只需要将time放在想要运行的命令之前
如:time command
-o 将相关时间统计写入文件
-a 将命令执行时间添加到文件而不影响其原有内容,结合-o使用
-f 格式化字时间输出。
time ls
time -o output.txt ls 将命令执行时间写入文件
登录用户、启动日志及启动故障
who 获取当前登录用户的相关信息
users 获取当前登录主机用户列表
uptime 查看系统已经加电运行了多长时间
last 获取上一次启动以及用户登录会话信息
last username 获取单个用户登录会话信息
last reboot 获取重启会话信息
lastb 获取失败的用户登录会话信息
列出1小时内占用CPU最多的10个进程
ps:用于收集系统中进程的详细信息。这些信息包括CPU使用情况、正在执行的命令、内存占用、进程状态等。
使用watch监视命令输出
watch可以再终端中以固定的间隔监视命令输出 watch command
命令默认每两秒更新一次。可用-n SECOND指定更新输出的时间间隔。watch -l 5 ls。
-d 将时间间隔前后的命令输出的差异之处以不同颜色突出标示出来。
watch -d COMMAND
记录文件及目录访问
inotifywait 可以用来收集有关文件访问的信息。需安装。
用logrotate管理日志文件
用syslog记录日志
logger LOG_MESSAGE 向系统日志文件/var/log/message中写入日志信息。
logger -t TAG LOG_MESSAGE 记录特定的标记到/var/log/message
logger -f /var/log/source.log 将另一个日志文件的最后一行记录到系统日志
收集进程信息
ps
ps 收集进程信息的重要工具。它提供的信息包括:拥有进程的用户、进程的起始时间、进程对应的命令行路径、PID、进程所属的终端(TTY)、进程使用的内存、进程占用的CPU等。
-f 显示多列
-e 获取运行在系统中的每个进程的信息。
-ax 同上
-o 指定要显示的列。参数以,分隔。参数如下 linux shell脚本攻略p285:
pcpu CPU占用率
pid 进程ID
ppid 父进程ID
pmem 内存使用率
comm 可执行文件名cmd 简单命令①
user 启动进程的用户
nice 优先级
time 累计的CPU时间
etime 进程启动后流逝的时间
tty 所关联的TTY设备
euid 有效用户ID
stat 进程状态
-C 指定查找命令
-t 指定TTY列表
-L 显示线程相关信息。NLWP是进程的线程数。LWP是输出中每个条目的线程ID。
w 宽松输出
ps -eo comm,pcpu
ps -o pid 只输出pid
top
默认输出一个占用CPU最多的进程列表。输出结果没隔几秒就会更新。
pgrep
获得特定命令的进程ID列表。
-d 指定分隔符
-u 指定进程拥有者
-U 指定用户列表
查看命令位置
which 找出命令位置
whereis 返回命令路径,打印其对应的命令手册的位置及命令源代码路径。
file 用来确定文件类型
whatis 输出作为命令参数的命令简短描述信息。
杀死进程以及发送响应信号
kill
kill 终止进程的信号,以进程ID作为参数
-l 打印信号编号以及对应信号名称
kill -s SIGNAL PID 通过kill命令向进程发送指定的信号。SIGNAL是kill的信号。
kill -s SIGKILL PID 强行杀死进程
kill -9 PID 同上
killall 通过进程名终止进程
-i 杀死进程前进行确认
killall process_name
killall -s SIGNAL process_name 通过名称向进程发送信号
killall -9 process_name 通过名称强行杀死进程
pkill 与kill类似,默认情况下pkill接受的是进程名,而非进程ID
pkill process_name
pkill -s SIGNAL process_name SIGNAL是信号编号。pkill不支持信号名称。
trap
trap 处理所接收的信号。一旦使用trap将某个函数分配给一个信号,那么该脚本运行收到该信号时,其对应的函数就会开始执行。
语法;trap 'signal_handler_function_name' SIGNAL LIST
SIGNAL LIST以空格分隔,它可以是信号变化或者信号名称。
向用户终端发送消息
wall 用来向当前登录用户的终端写入消息。可以将消息传递给一台服务器中所有的登录用户或是多台分散主中的用户。
wall message
cat aa.txt | wall 发送文件内容给所有当前登录终端
wall< aa.txt 同上
mesg t 禁止写入消息
mesg y 允许写入消息
采集系统信息
hostname 打印当前系统的主机名,或者 uname -n
uname -a 打印linux内核版本、硬件架构等详细信息
uname -r 打印内核发行版本
uname -m 打印主机类型
cat /proc/cpuinfo 打印CPU相关信息
使用proc采集信息
/proc是一个在内存中的伪文件系统(pseudo filesystem)。它的引入是为了提供一个可以从用户空间读取系统参数的接口。
使用cron进行调度
* * * * * aa.sh
分 时 天 月 周(0-6,0表示星期天) 命令/脚本
通过crontab命令进行调度
crontab -e 打开一个vim界面,输入corn作业
crontab -l 列出cron现有内容
-u 查看其他用户的cron表
-r 删除当前用户的cron表
* * * * * /usr/shell/aa.cron 每分钟允许aa.cron
crontab aa.cron 创建一个文件,并写入cron作业。将文件名作为参数,运行crontab
crontab<<EOF * * * * * aa.cron EOF 在行内指定cron作业
用户管理
useradd 创建新用户
deluser 删除用户
chsh 修改用户默认shell
脚本内执行脚本
fork
fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用 foo.sh 这个脚本,比如如果是 foo.sh 在当前目录下,就是 ./foo.sh。运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。
exec
exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用的脚本. 被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。这是 exec 和 source 的区别.
source
与 fork 的区别是不新开一个子 Shell 来执行被调用的脚本,而是在同一个 Shell 中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。
参考:https://www.jb51.net/article/159101.htm
echo命令后面执行脚本需加``号(反引号 tab键上面的键)