文章目录
- 0.0 了解
- 0.1 特殊符号
- 0.3 程序、内置文件
- 1. 细节 - 描述信息,帮助文档,用户名等信息
- 2. 目录、文件、字符串
- 3. 链接
- 4. 进程管理、管道使用
- 5. 文件压缩与解压
- 6. 防火墙firewalld
- 7. 其他命令 - 打印信息、显示文件属性信息、查看用户使用过的命令、查看什么用户在使用该系统、查看系统已经创建的用户
- 8. 组合命令
- 9. 关机命令
- 9. 用户切换
- 10. 文件所属者、文件所属组、以及所属的文件配置
- 11. 磁盘管理
- 12. 软件安装
- 13. 系统信息 - 显示服务、查看有什么Shell解释器执行脚本文件、日期信息、上一条命令是否执行成功
- 14. 打印
- 17. 授权
- 18. 符号链接创建
- 19. 文件下载 - wget
- 20. curl == 页面抓取、文件下载
- 21. 定时任务 - crontab
- 22. 逻辑运算符与多命令的结合使用
- 23. 清空文件
0.0 了解
Windows叫做“服务service”,Linux叫做“守护进程daemon”
0.1 特殊符号
// 当前用户的家目录
cd ~
// 回到上一次的目录,类似浏览器的 <- 返回按钮,返回到上一个页面一样的东西
cd -
// 执行上一次命令
!!
//执行历史中的某条命令,需要配合 history命令使用
!历史命令ID
0.3 程序、内置文件
自定义命令全局使用
//编辑
vim /etc/profile
//在/etc/profile 末尾添加下面一行的代码
export PATH=$PATH:脚本所在目录的绝对路径
//环境变量生效
source /etc/profile
Shell解释器、回收站
//回收站【黑洞】 == 可以讲不需要的东西直接放进去,例如文件、控制台输出内容等等
/dev/null
// 标准正确输出1与标准错误输出2都丢弃的意思
&>/dev/null
// nohup java -jar "$1.jar" > nohup.out : 将此命令的正常输出的内容追加到到 nohup.out 文件中 == nohup java -jar "$1.jar" 1 > nohup.out
// 2>&1 : 标准错误输出2内容也是 输出到 标准输出1那里面
// 最后一个& :命令以后台的job的形式运行(守护进程的形式运行)
nohup java -jar "xx.jar" > nohup.out 2>&1 &
//shell脚本解释器
/etc/shells
变量的存储位置
内置函数库
# 文件地址
/etc/init.d/functions
# 使用 == shell脚本中使用直接就是下面的语句即可 == 下面的.是 source的作用
. /etc/init.d/functions
本地变量
全局变量
1. 细节 - 描述信息,帮助文档,用户名等信息
命令自动填充: 按Tab按钮
命令提示: 双击Tab按钮
帮助文档解说
退出登录:
exit、
logout、
Ctrl+D快捷键
查看当前的Shell:
echo $SHELL
查看IP:
ifconfig
查看Linux版本:
cat /etc/redhat-release
2. 目录、文件、字符串
Liunux根目录下各文件夹的作用
2.-1 文件类型、MD5
伪文件: 不占用磁盘空间
文件类型标识 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录Directory |
l | 符号链接SymbolicLink |
s | 套接字Socket(伪文件) |
b | 块设备BlockDevice(伪文件) |
c | 字符设备CharacterDevice(伪文件) |
p | 管道Pipe(伪文件) |
md5sum 文件名
md5sum -c md5文件
2.0 其他 - 目录、文件列表展示详细信息、创建、移动、修改文件名以及权限
确定文件类型:文本还是目录文件
file 文件名
查看当前所在的目录:
pwd
//或者
dirs
跳转到指定的目录下
显示当前目录下的文件、目录信息
//显示当前目录内的文件
ls
//显示其他目录的文件
ls 其他目录路径
//显示当前文件a信息
ls -ld 文件路径a
ls -l 文件路径a
//显示当前目录a的显示
ls -ld 目录路径b
//显示当前目录a下的子文件、子目录信息
ls -l 目录路径b
更改文件的属主,属组等。创建用户
//更改文件属组
chgrp -R 新属组名 文件名
//更改文件所属的用户
chown -R 新属主名 文件名
//更改文件所属的用户,以及属组
chown -R 新属主名: 新属组名 文件名
//更改用户对文件的操作权限
chmod 数字和 文件名
创建目录
修改文件名、移动文件
创建临时文件
创建临时文件、目录
mktemp testTeXXX.abc
mktemp -d testTeXXXDir
修改文件名
rename 即将被替换的源字符 替换后的字符 需要执行替换字符的文件
# demo = 将 .one 换成 .test
rename .one .test ./testCMD/*.one
复制文件、目录
//将目录1整个目录 复制到 目录2里面
cp -r 源目录1 目的地目录2
//将这3个文件复制到目标目录里面
cp 文件1 文件2 文件3 存放复制文件的目标目录
//复制一份相同内容的文件在同一目录
cp 原文件名 复制文件名
强制删除文件、目录 - 不会询问
rm -rf 文件/目录名
//批量删除文件
find ./ -name '*txt' -exec rm -rf {} \;
//① find ./ -name '*txt' 在当前目录中查找txt结尾的文件名
//② -exec rm -rf {} \ 将前面①的结果放入到中括号中,准备进行删除
创建普通文件:
touch 文件名
查找文件:
find 搜索路径 [选项] 搜索关键字
//模糊查询 - 根目录下开始查找文件名带有abc字符的文件
find / -name "*abc*"
2.1 读取文件内容
文件内容检索:
grep -i "模糊查询字符" 文本文件地址
1. 显示文件的头50行内容,可方向盘滚动显示
2. 显示文件的头50行内容,可enter下一页显示
head -50 文件名 | less
head -50 文件名 | more
/etc目录下 passwd的内容讲解
2.3 文件其他信息 - 行数单词数字节数、文件属性(更改时间)
// wc 文件
读取文件的行数、单词数、字节数
// ls -l 文件
比较简略的信息
// stat 文件
详细的文件信息,更改时间,创建时间,大小、权限等信息
2.4 正则支持 - grep、egrep
注意: 同时使用开头和结尾表精确匹配,只使用其中一个表,模糊匹配
//筛出所有除了含【afsd】的行
grep -v 'afsd' 文件名 | more
grep -e '正则表达式'
//等价 == 建议正则则使用下面这个
egrep '正则表达式'
cat test.txt
cat test.txt | egrep "^([[:alnum:]]+)z$"
2.5 文件内容的操作 - sed - 针对行
概述
# 语法格式 == 中括号可以去掉
sed [选项] '{command}[flags]' [文件名]
sed: 外部命令,行流编辑器,非交互式的对文件内容进行增删改查操作 == 编辑单位:文件中的行数据
sed数据处理原理
内置命令简单使用
cat test2.txt
# 内部命令==首个字符即命令
# 不会对文件内容操作,只是在内存进行操作而已
sed 'a\插入内容' test2.txt
sed '3a\插入内容' test2.txt
sed '3,4a\插入内容' test2.txt
# 注意我已经修改了test2.txt的内容
cat test2.txt
# 匹配模式 含有forth的行,再其下插入'新增内容字符串 /匹配内容/
sed '/forth/a\新增内容' test2.txt
sed '2d' test2.txt
sed 'i\前面新增内容' test2.txt
# 删除含有#的注释行
sed -r '/#/d' nginx.conf
cat test2.txt
# 替换字符 == 精确匹配几个字符就替换几个字符,只匹配一次
sed 's/=/+/' test2.txt
# 替换字符 == 精确匹配几个字符就替换几个字符,只匹配第四行
sed '4s/=/+/' test2.txt
cat test2.txt
# 每行内容都变为changeContent
sed 'c\changeContent' test2.txt
# 2-4行的内容变成一个行内容即changeContent
sed '2,4c\changeContent' test2.txt
cat test2.txt
# 转换 =变+ f变F 以此类推
sed 'y/=firste/+FIRSTE/' test2.txt
cat test2.txt
# p命令会把 文件、内存地内容都打印一遍
sed 'p' test2.txt
# 内存中只打印从第三行开始
sed '3p' test2.txt
内置命令结合标志位使用
cat test2.txt
# 未加标志位前 == 至多只会匹配每行一个
sed 's\first\测试\' test2.txt
# 加了g标志位后 == 每行只要符合都匹配
sed 's\first\测试\g' test2.txt
cat test2.txt
# 加了g w标志位后 == 每行只要符合都匹配,并把匹配到修改后的行存入新文件
sed 's\first\测试\gw test2_change.txt' test2.txt
ls
cat test2_change.txt
一下次执行多条子命令【逗号分割,或者指定匹配文件】
cat test2.txt
sed 's\=\+\g;s\first\测试\' test2.txt
cat test2.txt
cat matchFile
sed -f matchFile test2.txt
修改文件 - 加-i
cat test2.txt
sed -i 's\=\+\g;s\first\测试\' test2.txt
cat test2.txt
备份加修改文件 - 加-i.备份文件后缀
ls
cat test2.txt
sed -i.backup 's\+\=\g;s\second\xxxxx\' test2.txt
ls
cat test2.txt
cat test2.txt.backup
技巧
# 打印行数
sed -n '$=' 文件地址
2.6 【推荐】内容的操作 - awk - 更强大的字符串处理 - 是一种简单的程序语言
概述
awk: 处理数据、产生格式化报表的语言,字段与字段的分隔符是一个或多个的Tab制表符 == 可以实现数据处理、运算、输出
注意: 单词与单词的间隔默认是使用 空格/Tab 进行区分,可以通过 -F 进行修改单词的分隔符号
使用
cat test.txt
# 打印每行最后一个单词(字段)
awk '{print $NF}' test.tx
# 打印每行第2单词(字段)
awk '{print $2}' test.tx
# 打印第二行第三个单词(字段)
awk 'NR==2{print $3}' test.tx
cat test3.txt
# 定义单词的分隔符 == 下面两句一样的
awk -F ',' '{print $2,$NF}' test3.txt
awk -F, '{print $2,$NF}' test3.txt
# 修改打印出来的格式
awk -F ',' '{print $2 "-" $NF "+" $1}' test3.txt
# 修改打印出来的格式
awk -F ',' '{print "第二个参数:"$2,"最后一个参数:"$NF,"第一个参数:"$1}' test3.txt
cat test3.txt
awk 'BEGIN{print "开始"}'
awk -F, 'BEGIN{print "==开始"}{print $2}END{print "==结束"}' test3.txt
# 定义数组
awk 'BEGIN{nums[0]="fsdfd";nums[1]="3432";print nums[0],nums[1]}'
# 变量比较
awk 'BEGIN{firstStr="Afsdf";secondStr="Bfsdf";print firstStr>=secondStr}'
awk 'BEGIN{firstStr="Afsdf";secondStr="Bfsdf";print firstStr<=secondStr}'
cat test.txt
# 打印每行第一个单词大于3的整行内容
awk '$1>3{print $0}' test.txt
cat test3.txt
# 精确完全匹配
awk -F ',' '$1=="小红"{print $0}' test3.txt
# 模糊匹配
awk -F ',' '$1~"红"{print $0}' test3.txt
head -1 /etc/passwd
# 指定需要截取的单词长度=一旦指定,如果你打印其他单词,则其他单词即是长度都一样你也要指定
awk 'BEGIN{FIELDWIDTHS="10 2 4"}NR==1{print $1,$2,$3}' /etc/passwd
awk 'BEGIN{FIELDWIDTHS="5"}NR==1{print $1,$2,$3}' /etc/passwd
head -1 /etc/passwd
# 下面两句是等价的
awk -F: 'NR==1{print $2,$6}' /etc/passwd
awk 'BEGIN{FS=":"}NR==1{print $2,$6}' /etc/passwd
head -1 /etc/passwd
# 下面两句是等价的
awk 'BEGIN{FS=":"}NR==1{print $2"=============="$6}' /etc/passwd
awk 'BEGIN{FS=":";OFS="=============="}NR==1{print $2,$6}' /etc/passwd
head -10 /etc/passwd
awk -F":" 'NR<=10{if($1=="halt")print $3; else print "去你妹的"}' /etc/passwd
cat test2.txt
awk -v 'sum=0' '{sum+=$1}END{print sum}' /test/test2.txt
cat test2.txt
awk -v 'sum=0' '{for(i=1;i<=3;i++) sum+=$i;}END{print sum}' test2.txt
cat tempIo.txt
# 数组的使用
cat tempIo.txt | awk '{ioInfo[$1]+=$2}END{ for(field in ioInfo) print field, ioInfo[field] }'
cat content.txt
# 行去重 --
# 前面的【 !a[$0]++ 】是判断此行是否需要打印,每到一行则运行一下这个命令
# $0表示此行的内容 a[行内容] 数组 默认值是0 num++ 先获取到num值,在将num值+1 0表示false >1表示true 所以遇到第一次的内容则必打印,第二次遇到同一内容则必为false,即不会打印
awk '!a[$0]++ {print $0}' content.txt
应用
free | awk 'NR==2{print "内存已使用率:"$3*100/$2"%"}'
# 另一种写法 == 可定义变量
free | awk 'NR==2{t=$2}NR==2{f=$3;print "未使用内存率:"(t-f)*100/t"%" }'
# 处理输入的字符
echo 'mongodb_23432_ere_23423' | awk -F '_' '{print $2 }'
2.7 切割字符串cut
cat tempIo.txt
# -d 定义每个单词由什么分隔符进行确定
cat tempIo.txt | cut -d ',' -f 1-2
cat tempIo.txt | cut -d ',' -f 3
cat tempIo.txt | cut -d ',' -f 1
2.8 获取文件的绝对路径 - readlink
//文件有无都会显示推断绝对路径
readlink -f 文件路径
//文件必须存在才会显示绝对路径
readlink -e 文件路径
2.9 获取文件所在的目录(根据入参来截取路径字符串)- 父目录 - dirname
//不会检测文件路径是否存在,仅做字符串截取操作
dirname 文件路径
3. 链接
创建链接
4. 进程管理、管道使用
类似函数调用,管道前是实参,管道后是函数
管道命令
命令1 | 命令2
案例
查看某个应用的运行情况
//模糊查询某个应用
ps -ef | grep 应用名
查看当前全部进程
//查看所有进程信息 - 可看到该进程的父进程ID
ps -ef
//进程树 - 查看父进程不建议使用上面这个,使用下面这个 - 以树状图显示最好
pstree -pu
//进程详细信息 - 占CPU率等信息
ps -aux
//退出进程
kill -9 进程号
//根据端口号查询进行号
netstat -tunlp | grep 端口号
- top: 实时查看系统进程运行情况CPU占有率、内存占有率、总共运行时间等其他信息的运行情况
- top -Hp 进程号: 查看某个进程,所有的线程运行信息
5. 文件压缩与解压
压缩文件
tar -zcvf 压缩后的文件名 源文件、目录名
解压文件
tar -zxvf 压缩文件名
6. 防火墙firewalld
查看防火墙开启/关闭状态
systemctl status firewalld
查看防火墙开启/关闭状态
firewall-cmd --state
查看防火墙开放的端口号
firewall-cmd --list-all
查询防火墙是否开放某个端口给外界
firewall-cmd --query-port=端口号/tcp
设置防火墙需要开放/关闭的端口号给外界
# 开启
sudo firewall-cmd --add-port=端口号/tcp --permanent
# 关闭
firewall-cmd --permanent --remove-port=8080/tcp
重启防火墙
firewall-cmd --reload
关闭防火墙开机启动
systemctl disable firewalld.service
7. 其他命令 - 打印信息、显示文件属性信息、查看用户使用过的命令、查看什么用户在使用该系统、查看系统已经创建的用户
打印信息、将信息打印到某个文件里面
//打印
echo 文本信息
//将文件信息追加到文件里面
echo "文本信息" >> 文件名
显示行数、单词数、文件大小【字节单位】
wc 文件名
# 行数
wc -l 文件
查看当前用户使用过的命令
history
查看什么用户在使用该系统
who
查看当前系统支持的所有命令
compegen -c
查看系统已经创建的用户
vipw
# 等价
vim /etc/passwd
8. 组合命令
模糊查找当前目录下的文件名 - 忽略大小写
ls -l | grep -i "模糊文件名"
//简写
ll | grep -i "模糊文件名"
9. 关机命令
//重要:将数据从内存同步到硬盘中 - 关机前防止数据丢失
sync
//直接关机
shutdown
shutdown now
//定时关机
// 十分钟后关机
shutdown -h 10
// 9点半后关机
shutdown -h 21:30
//重启 - 两种方式
reboot
shutdown -r now
//定时重启
//十分钟后重启
shutdown -r +10
9. 用户切换
//切换到用户名的用户
su 用户名
//1. root超级权限用户 到 普通用户 - 使用下面这个命令,则切换会root权限
//2. 仅仅是普通用户的话,使用下面这个命令,则直接会退出SSH连接
exit
//显示当前主机名
hostname
//修改主机名 - 需要重新SSH连接才生效
hostname 新主机名
//赋予、修改用户密码 - 需要在root用户下
passwd 用户
// 删除用户密码
passwd -d 用户
//锁定用户 - 不给该用户使用Linux
passwd -l 用户名
//解锁用户 - 给该用户使用Linux
passwd -u 用户名
10. 文件所属者、文件所属组、以及所属的文件配置
- 例如有(开发组、测试组、运维组、Root组)每个组对Linux都有不同的权限
- 每创建一个用户,则Linux会创建一个同名的属组
- 属组其实操纵文件:/etc/group
- 属主其实操纵文件:/etc/passwd
- 用户加密后的密码文件:/etc/shadow
用户组命令
//创建属组
groupadd 组名
//指定组ID号进行创建新组
groupadd -g ID号 组名
//删除用户组
groupdel 组名
//修改组信息 - 组ID、组名
groupmod -g 新ID号 -n 新组名 旧组名
/etc/passwd - 用户文件
用户命令
//创建用户 - 同时会在home目录下创建同新用户名的目录 - 可在 /etc/passwd 该文件查看所有用户
useradd -m 新用户名
//删除用户 - 同时会将home目录下对应的用户目录一并删除 - /etc/passwd 该文件也会删除该用户的信息
userdel -r 用户名
//修改用户的home的目录 - 同时etc/passwd关于该用户的目录信息也会被修改
usermod -md 新用户目录绝对/相对地址 用户名
/etc/shadow- 用户密码加密后的文件
11. 磁盘管理
查看各磁盘的使用情况
df -h
查看某个目录的文件情况
//当前目录每个文件所占用的容量【单位:字节】
du 目录
//当前目录每个文件所占用的容量【单位:字节】 - 包括目录内的普通文件也显示出来
du -a 目录
//占用大小显示会携带单位
du -ha 目录
//只统计模糊查询到的文件大小
du -s 目录模糊查询
//例如: du -s /home/*
12. 软件安装
11.1 rpm
//检测软件版本信息 - 查看是否有安装
//例如:rpm -qa | grep jdk
rpm -qa | grep 查找的软件模糊名
//卸载软件
//例如:rpm -e --nodeps jdk_
rpm -e --nodeps 上面命令查找的的完整软件名
//安装rpm包
rpm -ivh rpm包
11.1.1 JDK安装
//查看是否由安装JDK - 如果有版本信息则需卸载
java -version
//如果有则卸载它
//查看JDK完整的软件名
rpm -qa | grep jdk
//卸载软件
rpm -e --nodeps 完整的JDK软件名
//安装JDK - rpm包 - JDK安装目录在 /usr/java
rpm -ivh jdk的rpm包
//查看是否安装成功
java -version
//环境变量配置 - 文件 - /etc/profile
下图
//配置文件重载
source /etc/profile
/etc/profile - 末尾添加下列配置
JAVA_HOME=/usr/java/jdk1.8.0_231-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
11.2 解压缩安装
11.2.1 Tocmat
//解压压缩包
tar -zxvf tomcat压缩包名
//启动Tocmat - bin里面的 startup 运行即可
./startup.sh
//停止Tocmat - bin里面的 shutdown 运行即可
./shutdown.sh
//其他IP访问Tocmat时需要本地防火墙开放端口
sudo firewall-cmd --add-port=端口号/tcp --permanent
//重新加载防火墙的服务 - 更新需要开放的端口
firewall-cmd --reload
11.3 yum在线安装
//在线安装
yum -y install 包名
11.3.1 Docker
阿里云官方出的安装Docer教程 - https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11WRDufp
#安装gcc
yum -y install gcc
#安装c++
yum -y install gcc-c++
# step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
# Step 4: 开启Docker服务
service docker start
# Step 5: 查看是否安装成功Docker
docker version
# Step 6: 查看Docker安装成功说明
docker run hello-world
# Step 7: 查看Docker安装成功说明
docker images
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ee.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# yum -y install docker-ce-[VERSION]
11.4 编译安装
# 1、解包软件
tar zxf xxxx.tgz
# 2、先进入解压后目录,以及配置
cd xxxx
./configure ....
## 不会配置的话,则看怎么使用,有文档说明
./configure --help
# 3、编译
make
# 4、安装
make install
# 5、卸载
make uninstall
13. 系统信息 - 显示服务、查看有什么Shell解释器执行脚本文件、日期信息、上一条命令是否执行成功
服务chkconfig service
查看
// 查看Linux有什么服务,什么服务开启了,在什么级别下被开启
chkconfig --list
//删除服务
chkconfig --del 服务名
//添加脚本作为服务
chkconfig --add 服务名
//服务启动
service 服务名 start|stop|restart
脚本作为服务运行
# 将frps.sh脚本作为服务进行运行
# 1. 脚本文件的头3行注释添加下面3行
#!/bin/bash
#
#description: 内网穿透服务工具
#chkconfig:2345 99 99
#将frps.sh 移动到 /etc/init.d
cp frps脚本文件 /etc/init.d/
cd /etc/init.d/
#脚本后缀取消掉,好看点
mv frps.sh frps
#修改frps脚本权限
chmod 777 frps
#将frps脚本文件作为服务
chkconfig --add frps
#查看所有服务
chkconfig --list
#服务运行 === 其实就是普通脚本一样使用就可以了,不过多添加了service命令而已
service 脚本名(服务名) 脚本内的几个参数
其他
// 查看可执行shell脚本的命令,一般都是使用 bash 或者 sh进行执行Shell脚本
cat /etc/shells
// 显示日期
date +%F
// 0上一条命令执行成功 非0上一条命令没有执行成功
echo $?
14. 打印
14.1 echo - 打印 - 等价于System.out.println
14.2 read - 输入 - 等价于Scanner.nextLine
test17.sh
#!/bin/bash
echo -n '账号:'
read account
echo -n '密码:'
# -s秘密输入,字符不回显出来 -n最大的字符个数 -t等待输入最多等多少秒
read -s -n10 -t20 password
# -s秘密输入,字符不回显出来 -n最大的字符个数 -t等待输入最多等多少秒
echo ""
read -s -n10 -t20 -p "请输入密码:" password2
echo "结果为:{账号:$account, 密码:$password}, 密码2:$password2}"
sh test17.sh
17. 授权
18. 符号链接创建
# 格式
ln -s 真正的命令文件 目录/链接名字
# demo
ln -s /usr/nginx/nginx/sbin/nginx /usr/nginx/nginx/sbin/test/nginx
# demo == 目录映射
ln -s /usr/nginx/nginx /www/server/nginx
19. 文件下载 - wget
* 用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m http://www.tldp.org/LDP/abs/html/
* 在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o
down.log &
上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。
* 使用代理下载
wget -Y on -p -k https://sourceforge.net/projects/wvware/
代理可以在环境变量或wgetrc文件中设定
# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/
wget各种选项分类列表
* 启动
-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND
执行`.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
* 记录和输入文件
-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
* 下载
–bind-address=ADDRESS
指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –output-document=FILE 把文档写到FILE文件中
-nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, –server-response 打印服务器的回应
–spider 不下载任何东西
-T, –timeout=SECONDS 设定响应超时的秒数
-w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率
* 目录
-nd –no-directories 不创建目录
-x, –force-directories 强制创建目录
-nH, –no-host-directories 不创建主机目录
-P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
* HTTP 选项
–http-user=USER 设定HTTP用户名为 USER.
–http-passwd=PASS 设定http密码为 PASS.
-C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许).
-E, –html-extension 将所有text/html文档以.html扩展名保存
–ignore-length 忽略 `Content-Length'头域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 设定代理的用户名为 USER
–proxy-passwd=PASS 设定代理的密码为 PASS
–referer=URL 在HTTP请求中包含 `Referer: URL'头
-s, –save-headers 保存HTTP头到文件
-U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION.
–no-http-keep-alive 关闭 HTTP活动链接 (永远链接).
–cookies=off 不使用 cookies.
–load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
* FTP 选项
-nr, –dont-remove-listing 不移走 `.listing'文件
-g, –glob=on/off 打开或关闭文件名的 globbing机制
–passive-ftp 使用被动传输模式 (缺省值).
–active-ftp 使用主动传输模式
–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
* 递归下载
-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr.
-p, –page-requisites 下载显示HTML文件的所有图片
* 递归下载中的包含和不包含(accept/reject)
-A, –accept=LIST 分号分隔的被接受扩展名的列表
-R, –reject=LIST 分号分隔的不被接受的扩展名的列表
-D, –domains=LIST 分号分隔的被接受域的列表
–exclude-domains=LIST 分号分隔的不被接受的域的列表
–follow-ftp 跟踪HTML文档中的FTP链接
–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –span-hosts 当递归时转到外部主机
-L, –relative 仅仅跟踪相对链接
-I, –include-directories=LIST 允许目录的列表
-X, –exclude-directories=LIST 不被包含目录的列表
-np, –no-parent 不要追溯到父目录
20. curl == 页面抓取、文件下载
curl 文件URL -o 下载好后的文件路径 --progress
21. 定时任务 - crontab
//添加、取消定时任务(可通过删除某行任务以及在行头添加#字符都可以取消某个定时任务)
//定时任务定义语法:cat /etc/crontab 分 时 日 月 周 脚本命令 共5个时间定义跟Java有点区别,注意区分
// 定时任务执行日志(仅是某个任务某个时间点调用信息):tail -10f /var/log/cron
// 定时任务执行输出内容日志(即定时任务执行时的脚本输出信息):tail -10f /var/spool/mail/root
//其实就是修改这个文件:cat /var/spool/cron/root
crontab -e
//删除全部定时任务
crontab -r
//查看定义的所有定时任务
//其实就是看这个文件:cat /var/spool/cron/root
crontab -l
tail -10f /var/spool/mail/root
22. 逻辑运算符与多命令的结合使用
&&:前面命令执行返回结果成功,后面的命令才需执行
||:前面命令执行返回结果成功,后面的命令无需执行,前面命令执行返回结果失败,后面的命令才需执行
logicTest.sh
#!/bin/bash
echo "========1==========="
[ -e /home/root/testShell/outContent.sh ] && echo 'outContent.sh文件存在'
echo "========2==========="
[ -e /home/root/testShell/outContent2.sh ] && echo 'outContent2.sh文件存在' || echo 'outContent2.sh文件不存在'
echo "========3==========="
[ -e /home/root/testShell/outContent2.sh ] || echo 'outContent2.sh文件不存在'
23. 清空文件
//方式1
cat /dev/null > 目标待清空内容的文件路径
//方式2
vim 目标待清空内容的文件路径
执行vim命令::%d
执行vim命令::wq!
//方式3
echo "" > 目标待清空内容的文件路径