Please keep learning —> Linux工具快速教程
测试网络连接
linux 上一般是不装ping的1
2
3
4telnet 8.8.8.8 80
curl 8.8.8.8:80
ssh -v -p qqs@8.8.8.8
wget 8.8.8.8:80
拷贝目录
将工作空间目录下的test文件夹拷到labhome下面1
cp -ri /home/Workspace/test /var/labhome/
- -r 递归
- -i 询问是否覆盖
查找文件
find [path] -name [filename]1
find / -name filename
tail
tail命令读取文件内容到标准输出,-f 循环读取,上述命令查找文件中最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容1
tail -f filename
filename 可以是多个文件 以空格分隔即可
tar
tar 通常是GNU tar,而libarchive库集成了bsdtar,不知道为什么我的windows默认的tar.exe是后者执行下述脚本1
tar -c * | gzip > Agt.tgz
报异常:tar.exe: Failed to open ‘\.\tape0’
该路径是缺省的设备起始位置(?),因为bsdtar要求不能缺省输出参数 应为1
tar -cf - * | gzip > Agt.tgz
后台运行
后台运行命令1
anycommand $
将前台命令放到挂起(stopped)
Ctrl + Z
查看后台工作项目1
jobs -l
操作后台工作项目
- 终止后台工作项目 kill jobNumber
- 调至前台继续运行 fg jobNumber
- 在后台执行挂起的工作项目 bg jobNumber
vi查找
在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。
如果你要继续查找此关键字,敲字符 n 就可以继续查找了。
敲字符N(大写N)就会向前查询;重命名rename
个人理解: 语法其一 rename 原字符串 新值 范围
将run.sh重命名为run_bak.sh语法其二 rename ‘option/原字符串模式/新字符串模式/‘ 搜索范围1
rename run.sh run_bak.sh run.sh
统一删除.bak后缀名:其中/ /之间是正则表达式,后缀名中的.需要转义1
rename 's/\.bak$//' *.bak
批量修改文件名为全部小写1
rename 'y/A-Z/a-z/' *
软件
对于nodejs npm需要使用n模块升级到最新稳定版本1
2
3sudo npm cache clean -f #----- 先清除 npm cache
sudo apt-get update #------ 更新源
sudo apt-get upgrade #------ 更新已安装的包Nov 25th 遭遇 issue 27711 需将nodejs从v12降至v101
2
3sudo apt-get install nodejs npm
npm install -g n
sudo n stableRPM1
sudo n 10.16.0
1
2
3
4wget https://example.com/file.rpm
sudo yum localinstall file.rpm
sudo rpm –ivh file.rpm
sudo rpm –ivh https://example.com/file.rpm查看系统版本
1
2
3cat /etc/issue 查看发行版
cat /etc/redhat-release 查看CentOS版本
uname -r 查看内核版本查看硬件信息
1
2
3
4
5cat /proc/cpuinfo |more
cat /proc/meminfo |more
// 磁盘
cat /proc/partitions
fdisk -l查看服务列表
1
service --status-all
异常:键入命令不显示(回显关闭)
1
2
3
4// 回显关闭
stty -echo
// 回显打开
stty echo定时任务
查看服务状态crontab1
service cron status
不指定username 则以root用户身份执行1
2
3
4// 列出该用户的计时器设置
crontab -l
// 编辑该用户的计时器设置
crontab -u username -e计划任务分为系统任务调度和用户任务调度两类
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等 见/etc/crontab时日周月计划。
用户任务调度:用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致
实际上,crontab文件被设计为不允许(存疑)用户直接编辑,而是通过crontab -e管理
计划的格式如下1
2
3
4
5
6
7
8
9
10
11
12
13
14SHELL=/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
- * 表示匹配该域的任意值。假如在Minutes域使用*, 即表示每分钟都会触发事件。
- / 表示起始时间开始触发,然后每隔固定时间触发一次。例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.
- - 表示范围。例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次
, 表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。
? 只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 ?, 其中最后一位只能用?,而不能使用,如果使用*表示不管星期几都会触发,实际上并不是这样。
L 表示最后,只能出现在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。
W 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 。
LW 这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
# 用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。
例子:
20 6 pwd 每天的 6:20 执行pwd命令
20 6 8 6 pwd 每年的6月8日6:20执行pwd命令
20 6 0 pwd 每星期日的6:20执行pwd命令
20 3 10,20 pwd 每月10号及20号的3:20执行pwd命令
25 8-10 pwd 每天8-10点的第25分钟执行pwd命令
/15 pwd 每15分钟执行一次pwd命令
20 6 /10 * pwd 每个月中,每隔10天6:20执行一次pwd命令
开启系统cron日志
sudo vim /etc/rsyslog.d/50-default.conf 取消注释1
cron.log
即可在/var/log/syslog中看到关于CRON的log
ISSUE: No MTA installed, discarding output
cron默认将console output用邮件发送,task有控制台输出但未配置邮件则记如上日志,可以将console output重定向到文件1
echo "" > /home/QQs/corn.log
若task执行中间过程有报错,报错信息仍会以Email形式发送,非安装邮件服务器不能解决
安装postfix
注意,crontab task 若以root权限执行(syslog中可以看到),root若无重定向日志文件的写权限,仍然会报 “No MTA installed, discarding output”
重载CRON服务1
sudo service cron reload
启动/关闭1
sudo service cron start/stop
Ubuntu timezone
显示时间:1
date -R
某年月日,测试scheduled tasks,总是无法在期望时间触发,经查系统时间为‘Universal Time’(即格林威治时间时间)
输入1
tzselect
选择本地时间(shanghai)
永久覆盖本地时间设置1
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
设置时间1
date -s '2020/3/1 18:20:30'
Linux 以一定时间间隔更新内核时间,做上述调整后立即重启,可以将设置写入内核,否则会被更新回来(QQs尚未验证重启操作)
异常:刚启动正常,很短时间后,所有端口无法连接
事实证明,Linux与Windows发生IP冲突,Linux无法竞争过Windows,(反之未验证),现象是刚刚启动时连接正常,很短时间后无法连接。
再次遭遇此问题,Linux虚拟机IP被抢,virtualbox桥接,宿主计算机访问虚拟机无碍,其他计算机可以ping通,telnet不通(目标ip实际上是windows机器)
user
1 | su -l USERNAME |
chmod
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
例如 owner - RWX, group - RX, other - R_
如上,u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。1
chmod [ugoa...][[+-=][rwxX]
栗子1
2chmod ugo+r file1.txt //将文件 file1.txt 设为所有人皆可读
chmod a+r file1.txt // 同上
其他参数
- -R 对目录递归变更权限
查看端口使用
1
sudo lsof -i:8080
curl
即client url tool curl 的用法指南
dos2unix
windows&linux交叉编译环境下脚本结尾标记可能出错
Bash syntax error: unexpected end of file
使用dos2unix工具转换脚本文件1
dos2unix task.sh