定时任务: crontab
crond 定时任务的守护进程
默认此服务基本所有GNU/Linux操作自带
定时任务的主配置文件: /etc/crontab (不建议修改)
设置定时任务的命令: crontab
crontab -e 编辑当前用户的定时任务
以空格为分隔符分成六个字段
第一个字段代表: 分钟 0 - 59
第二个字段代表: 小时 0 - 23
第三个字段代表: 日 1 - 31
第四个字段代表: 月 1 - 12
第五个字段代表: 星期 0 - 7
第六个字段代表: 操作(命令或脚本)
* 代表每分钟 每小时 每日 每月 每星期
, 分隔时间 19,24 * * * * CMD
- 代表时间段 19-24 * * * * CMD
*/n 每隔n个单位 */5 * * * * CMD
星期与日期是或的关系
*/30 */2 15 6 7
6月15号每隔2个小时每隔30分钟去执行或每个星期天去执行
*/30,20,25 */2 15 6 *
6月15号每隔2个小时每隔30分钟或20分钟和25分钟去执行
*/30,20-25 */2 15 6 *
6月15号每隔2个小时每隔30分钟或20分钟到25分钟之间去执行
-------------------------------------------------------------------------------
文本处理: sed + awk
起源: ed文本编辑器 -> grep,egrep -> sed -> awk
perl语言 -> 正则表达式
sed 流编辑器 (查找/匹配) {
-n 取消默认输出(sed默认会输出整个文件内容)
-e 支持同时生效多个sed表达式命令
-i 所有命令的操作应用到文件中
-r 支持扩展正则表达式(+ ? |) 与-e冲突
输出 p
输出第一行
sed -n '1p' file
输出第一行到第三行
sed -n '1,3p' file
输出第一行和第三行
sed -n '1p;3p' file
输出有关键词root的行
sed -n '/root/p' file
输出有关键词root和kyo的行
sed -n -e '/root/p' -e '/kyo/p' file
sed -n -e '/root/p;/kyo/p' file
sed -n -e '/root|kyo/p' file
输出有数字的行
sed -n '/[0-9]/p' file
删除 d
d命令是按行删除
将文件输出时做删除操作, 用法与p命令一样
删除第一行
sed '1d' file
删除第一行到第三行
sed '1,3d' file
...
删除空行(兼容有空行中有空格)
sed '/^\ *$/d' file
sed '/^[[:blank:]]$/d' file
替换 s
把每行的第一个root替换成kyo
sed 's/root/kyo/' file
把每行的第二个root替换成kyo
sed 's/root/kyo/2' file
把每行的所有root替换成kyo
sed 's/root/kyo/g' file
把每行的所有root替换成rootkyo
sed 's/root/rootkyo/g' file
sed 's#root#&kyo#g' file
把第3行到13行中的全部root替换rootkyo
sed '3,13s/root/&kyo/g' file
把以bin开头的行到以sys开头的行,将/替换成#
sed '/^bin/,/^sys/s/\/\#/g' file
子表达式(位域)
-e 使用()必须转义 \(...\)
-r 使用()不需要转义
删除每行中第一个字符
sed 's/^.//' file
删除每行中的第二个字符
sed -nr 's/^(.)./\1/p' file
交换每行中的第一个字符和第二个字符
sed -nr 's/^(.)(.)/\2\1/p' file
删除每行中的第二个单词
单词: [a-zA-Z]+
单词分隔符: [^a-zA-Z]+
sed -nr 's/^([^a-zA-Z]*[a-zA-Z]+[^a-zA-Z]+)[a-zA-Z]+/\1/p' file
sed -r 's/[a-zA-Z]+//2' file
删除每行中的最后一个单词
sed -r 's/[a-zA-Z]+([^a-zA-Z]*)$/\1/' file
删除每行中的倒数第二个单词
sed -nr 's/[a-zA-Z]+([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]*)$/\1/p' file
交换每行中的第二个和倒数第二个单词
\w == [a-zA-Z0-9]
\d == [0-9]
sed -nr 's/^([^a-zA-Z]*[a-zA-Z]+[^a-zA-Z]+)([a-zA-Z]+)(.*[^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]*)$/\1\4\3\2\5/p' file
用一行命令截取IP(使用sed加管道)
截取结果: 3.3.3.9/255.255.255.0
ifconfig enp0s25 | sed -nr 's/.*[^0-9.]([0-9.]+).*[^0-9][0-9]+\.[0-9]+\.[0-9]+\.[0-9]+.*[^0-9.]([0-9.]+)/\1\/\2/p'
}
awk
功能强大到语言级别
会处理连续的分隔符(直接替代cut命令)
分隔字段并且控制输出字段样式
以冒号为分隔符打印第一列
awk -F":" '{print $2}' file
以冒号为分隔符统计第七列有多少个/usr/sbin/nologin有多少个
awk 'BEGIN{FS=":"; count=0}{if ($7 == "/usr/sbin/nologin")count++}END{print count}' file
使用awk脚本
#!/usr/bin/awk
BEGIN {
FS=":"
count=0
}
{
if ($7 == "/usr/sbin/nologin") {
count++
print $0
}
}
END {
print "count = "count
}
运行: awk -f 1.awk file
$0 当前处理行
$1 - $n 当前处理行的第几列
FS 分隔符 支持正则表达式
NF 当前多少个字段
NR 当前处理到第几个行
OFS 输出列分隔符
ORS 输出行分隔符
打印每行的第二个单词和倒数第二个单词
awk BEGIN{FS="[^a-zA-Z]+", s=0}{s=NF - 1; print $2,$s}' file
隔行删除
awk '{if (NR % 2 == 0) print $0}' file
打印每行超过有5个字段的行
awk -F":" '{if (NF > 5) print $0}' file
-------------------------------------------------------------------------------
git: 版本管理器
集中式管理 svn
分布式管理 git
1. linux内核作者开发, 用于管理linux内核代码
2. 支持分布式
3. 只保存代码差异
4. 分支无成本
5. 开源 github / git.oschina.net
熟悉*nix系列操作系统的管理
官方: git-scm.com
教程: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
java:
JRE java的运行环境
JDK java的开发环境 包含JRE
ubuntu:
apt install openjdk-8-jdk
官网:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载jdk-8u121-linux-x64.tar.gz
tar -xf jdk-8u121-linux-x64.tar.gz -C ~/
修改 ~/.bashrc
export JAVA_HOME=~/jdk-8u121-linux-x64
export PATH=$PATH:$JAVA_HOME/bin
. ~/.bashrc
java -version
vim hello.java
public class hello {
public static void main(String arg[]) {
System.out.println("hello world!");
}
}
javac hello.java
java hello
crond 定时任务的守护进程
默认此服务基本所有GNU/Linux操作自带
定时任务的主配置文件: /etc/crontab (不建议修改)
设置定时任务的命令: crontab
crontab -e 编辑当前用户的定时任务
以空格为分隔符分成六个字段
第一个字段代表: 分钟 0 - 59
第二个字段代表: 小时 0 - 23
第三个字段代表: 日 1 - 31
第四个字段代表: 月 1 - 12
第五个字段代表: 星期 0 - 7
第六个字段代表: 操作(命令或脚本)
* 代表每分钟 每小时 每日 每月 每星期
, 分隔时间 19,24 * * * * CMD
- 代表时间段 19-24 * * * * CMD
*/n 每隔n个单位 */5 * * * * CMD
星期与日期是或的关系
*/30 */2 15 6 7
6月15号每隔2个小时每隔30分钟去执行或每个星期天去执行
*/30,20,25 */2 15 6 *
6月15号每隔2个小时每隔30分钟或20分钟和25分钟去执行
*/30,20-25 */2 15 6 *
6月15号每隔2个小时每隔30分钟或20分钟到25分钟之间去执行
-------------------------------------------------------------------------------
文本处理: sed + awk
起源: ed文本编辑器 -> grep,egrep -> sed -> awk
perl语言 -> 正则表达式
sed 流编辑器 (查找/匹配) {
-n 取消默认输出(sed默认会输出整个文件内容)
-e 支持同时生效多个sed表达式命令
-i 所有命令的操作应用到文件中
-r 支持扩展正则表达式(+ ? |) 与-e冲突
输出 p
输出第一行
sed -n '1p' file
输出第一行到第三行
sed -n '1,3p' file
输出第一行和第三行
sed -n '1p;3p' file
输出有关键词root的行
sed -n '/root/p' file
输出有关键词root和kyo的行
sed -n -e '/root/p' -e '/kyo/p' file
sed -n -e '/root/p;/kyo/p' file
sed -n -e '/root|kyo/p' file
输出有数字的行
sed -n '/[0-9]/p' file
删除 d
d命令是按行删除
将文件输出时做删除操作, 用法与p命令一样
删除第一行
sed '1d' file
删除第一行到第三行
sed '1,3d' file
...
删除空行(兼容有空行中有空格)
sed '/^\ *$/d' file
sed '/^[[:blank:]]$/d' file
替换 s
把每行的第一个root替换成kyo
sed 's/root/kyo/' file
把每行的第二个root替换成kyo
sed 's/root/kyo/2' file
把每行的所有root替换成kyo
sed 's/root/kyo/g' file
把每行的所有root替换成rootkyo
sed 's/root/rootkyo/g' file
sed 's#root#&kyo#g' file
把第3行到13行中的全部root替换rootkyo
sed '3,13s/root/&kyo/g' file
把以bin开头的行到以sys开头的行,将/替换成#
sed '/^bin/,/^sys/s/\/\#/g' file
子表达式(位域)
-e 使用()必须转义 \(...\)
-r 使用()不需要转义
删除每行中第一个字符
sed 's/^.//' file
删除每行中的第二个字符
sed -nr 's/^(.)./\1/p' file
交换每行中的第一个字符和第二个字符
sed -nr 's/^(.)(.)/\2\1/p' file
删除每行中的第二个单词
单词: [a-zA-Z]+
单词分隔符: [^a-zA-Z]+
sed -nr 's/^([^a-zA-Z]*[a-zA-Z]+[^a-zA-Z]+)[a-zA-Z]+/\1/p' file
sed -r 's/[a-zA-Z]+//2' file
删除每行中的最后一个单词
sed -r 's/[a-zA-Z]+([^a-zA-Z]*)$/\1/' file
删除每行中的倒数第二个单词
sed -nr 's/[a-zA-Z]+([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]*)$/\1/p' file
交换每行中的第二个和倒数第二个单词
\w == [a-zA-Z0-9]
\d == [0-9]
sed -nr 's/^([^a-zA-Z]*[a-zA-Z]+[^a-zA-Z]+)([a-zA-Z]+)(.*[^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]*)$/\1\4\3\2\5/p' file
用一行命令截取IP(使用sed加管道)
截取结果: 3.3.3.9/255.255.255.0
ifconfig enp0s25 | sed -nr 's/.*[^0-9.]([0-9.]+).*[^0-9][0-9]+\.[0-9]+\.[0-9]+\.[0-9]+.*[^0-9.]([0-9.]+)/\1\/\2/p'
}
awk
功能强大到语言级别
会处理连续的分隔符(直接替代cut命令)
分隔字段并且控制输出字段样式
以冒号为分隔符打印第一列
awk -F":" '{print $2}' file
以冒号为分隔符统计第七列有多少个/usr/sbin/nologin有多少个
awk 'BEGIN{FS=":"; count=0}{if ($7 == "/usr/sbin/nologin")count++}END{print count}' file
使用awk脚本
#!/usr/bin/awk
BEGIN {
FS=":"
count=0
}
{
if ($7 == "/usr/sbin/nologin") {
count++
print $0
}
}
END {
print "count = "count
}
运行: awk -f 1.awk file
$0 当前处理行
$1 - $n 当前处理行的第几列
FS 分隔符 支持正则表达式
NF 当前多少个字段
NR 当前处理到第几个行
OFS 输出列分隔符
ORS 输出行分隔符
打印每行的第二个单词和倒数第二个单词
awk BEGIN{FS="[^a-zA-Z]+", s=0}{s=NF - 1; print $2,$s}' file
隔行删除
awk '{if (NR % 2 == 0) print $0}' file
打印每行超过有5个字段的行
awk -F":" '{if (NF > 5) print $0}' file
-------------------------------------------------------------------------------
git: 版本管理器
集中式管理 svn
分布式管理 git
1. linux内核作者开发, 用于管理linux内核代码
2. 支持分布式
3. 只保存代码差异
4. 分支无成本
5. 开源 github / git.oschina.net
熟悉*nix系列操作系统的管理
官方: git-scm.com
教程: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
java:
JRE java的运行环境
JDK java的开发环境 包含JRE
ubuntu:
apt install openjdk-8-jdk
官网:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载jdk-8u121-linux-x64.tar.gz
tar -xf jdk-8u121-linux-x64.tar.gz -C ~/
修改 ~/.bashrc
export JAVA_HOME=~/jdk-8u121-linux-x64
export PATH=$PATH:$JAVA_HOME/bin
. ~/.bashrc
java -version
vim hello.java
public class hello {
public static void main(String arg[]) {
System.out.println("hello world!");
}
}
javac hello.java
java hello