Centos7
命令
# 查询正运行的java进程,建议使用jps,使用ps会将tail也显示出来jps -lvm | grep '/home/chencye/tomcat/apache-tomcat-8.5.23'ps -ef | grep -v 'grep' | grep '/home/chencye/tomcat/apache-tomcat-8.5.23'# 查看端口是否被占用netstat -na | grep 8080# 查看磁盘空间使用情况df -lh# 统计当前目录下,所有文件(包括文件夹)大小du -smh *# 下载文件curl -o ~/download/jdk.tar.gz http://download.oracle.com/jdk.tar.gz# 读取输入的内容read -p 'type yes/no: ' content# 以空格间隔输入多个值read -p 'type 2 value: ' v1 v2echo $(($v1+$v2))# 查找文件find . -name "tomcat*"# 查找并删除find . -name "*.tmp" -exec rm -rf {} \;# 查找大文件find . -size +10M -exec ls -lh {} \;
解压缩
# zip 压缩zip -r tomcat.zip tomcat# zip 压缩,排除指定文件或文件夹zip -r tomcat.zip tomcat -x tomcat/logs -x tomcat/work# zip 不解压,直接查看压缩包中的文件名zipinfo tomcat.zip# zip 解压unzip tomcat.zip# zip 解压到指定路径unzip -d bak/ tomcat.zip# tar 压缩tar zcvf tomcat.tar.gz tomcat# tar 压缩,排除指定文件或文件夹tar zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/work tomcat# tar 不解压,直接查看压缩包中的文件名tar ztvf tomcat.tar.gz# tar 解压tar zxvf tomcat.tar.gz# tar 解压到指定路径mkdir -p tomcattar zxvf tomcat.tar.gz -C tomcat
内置参数
$# # 传递给程序的总参数数目$0 # 当前程序名称,如./test.sh$n # 表示第几个参数,从$1开始,大于$9的,数字用花括号括起,如${11}$* # 传递给程序的所有参数组成的字符串$@ # 以"参数1" "参数2" ...形式保存所有参数 $? # 上一个shell命令或程序在shell中退出的情况,若正常退出返回0,否则为1$$ # 本程序的进程ID号PID,可用于创建临时文件$! # 上一个命令的PID
文件类型判断
#!/bin/bash# 文件夹判断dir="test"if [[ -d ${dir} ]]; then rm -rf ${dir}fi# 文件判断file="/file/test.txt"if [[ -f ${file} ]]; then rm -rf ${file}fi# 判断是否存在path="~/test"[[ -e ${path} ]] && echo "exist" || echo "not exist"
循环遍历
一般遍历
#!/bin/bash# 1到100的和sum=0# for i in $(seq 1 100)# for i in {1..100}for ((i=1; i<=100; i++))do sum=$(( ${sum} + ${i} ))doneecho ${sum}
文件夹遍历
#!/bin/bash# 文件夹遍历function walkDir() { curDir=$1 # for seeFile in $(ls ${curDir}) # 无相对路径 for seeFile in ${curDir}/* do if [[ ! -e ${seeFile} ]]; then continue fi if [[ -d ${seeFile} ]]; then walkDir ${seeFile} else echo "file in ${curDir}: ${seeFile}" fi done}dir="file"if [[ ! -d ${dir} ]]; then exit 1;fiwalkDir ${dir}
文件内容遍历
#!/bin/bash# 文件内容遍历file="file/download/upload_test_1.txt"if [[ ! -f ${file} ]]; then exit 1fi# for line in `cat ${file}` # 取值的分隔符由$IFS确定,如果输入文本中包括空格或制表符,则不是换行读取cat ${file} | while read linedo echo "${file}: ${line}"done
数组遍历
#!/bin/bash# 数组遍历array=(1 2 "a" "b")# echo "array length: ${#array[*]}"echo "array length: ${#array[@]}"# for data in ${array[*]}for data in ${array[@]}do echo ${data}done
case
option="${1}"case ${option} in f | file | -f | -file ) file="${2}" echo "file name is $file" ;; d | dir | -d | -dir ) dir="${2}" echo "dir name is $dir" ;; * ) echo "basename ${0} :usage:[-f file ]| [-d directory]" ;;esac
文本处理
字串匹配
字串截取与替换
说明:$substring
可以是一个正则表达式
表达式 | 含义 |
---|---|
${#string} | $string 的长度 |
${string:index} | 在$string 中, 从位置$index(0开始) 开始提取子串 |
${string:index:length} | 在$string 中, 从位置$index(0开始) 开始提取长度为$length 的子串 |
${string#substring} | 从变量$string 的开头, 删除最短匹配$substring 的子串 |
${string##substring} | 从变量$string 的开头, 删除最长匹配$substring 的子串 |
${string%substring} | 从变量$string 的结尾, 删除最短匹配$substring 的子串 |
${string%%substring} | 从变量$string 的结尾, 删除最长匹配$substring 的子串 |
${string/substring/replacement} | 使用$replacement , 来代替第一个匹配的$substring |
${string//substring/replacement} | 使用$replacement , 代替所有匹配的$substring |
${string/#substring/replacement} | 如果$string 的前缀匹配$substring , 那么就用$replacement 来代替匹配到的$substring |
${string/%substring/replacement} | 如果$string 的后缀匹配$substring , 那么就用$replacement 来代替匹配到的$substring |
示例
str="aaaa4444bbbb4444aaaa4444bbbb"echo ${#str} # 28echo ${str:2} # aa4444bbbb4444aaaa4444bbbb # 从位置2开始到最后(位置0开始)echo ${str:2:4} # aa44 # 从位置2开始截取2个字符echo ${str#*a} # aaa4444bbbb4444aaaa4444bbbb # 删除最短前缀echo ${str##*a} # 4444bbbb # 删除最长前缀echo ${str%a*} # aaaa4444bbbb4444aaa # 删除最短后缀echo ${str%%a*} # 无内容 # 删除最长后缀echo ${str%%b*} # aaaa4444 # 删除最长后缀echo ${str/b/c} # aaaa4444cbbb4444aaaa4444bbbb # 替换首个echo ${str//b/c} # aaaa4444cccc4444aaaa4444cccc # 替换所有echo ${str/#a/c} # caaa4444bbbb4444aaaa4444bbbb # 前缀替换echo ${str/#b/c} # aaaa4444bbbb4444aaaa4444bbbb # 前缀替换echo ${str/%a/c} # aaaa4444bbbb4444aaaa4444bbbb # 后缀替换echo ${str/%b/c} # aaaa4444bbbb4444aaaa4444bbbc # 后缀替换
文件中匹配替换
# sed 命令sed 's/123/456/g' file.txt # 只显示效果,不修改sed -i 's/123/456/g' file.txt # 直接修改原文件# vi 编辑器# 替换:%s/123/456/g
shell脚本头
#!/bin/bashshell_home=$(cd `dirname $0`;pwd)shell_name=`basename $0`shell=${shell_home}/${shell_name}function print() { echo -e "\e[36;1m ---> $1$(tput sgr0)"}print "cd ${shell_home}"cd ${shell_home}print "begin execute ${shell}"# export /home/chencye/jdk/jdk1.8.0_131# export JAVA_OPTS="-server -Xms800m -Xmx800m"# export JPDA_ADDRESS=7878 # catalina.sh jpda start# JPDA_SUSPEND=y # 等待客户端连接,tomcat才继续启用,用于调试启动过程# --------------------------------------------------------------------
FTP
# 连接ftp chencye@192.168.1.103# 先定位远程目录cd /home/chencye/ftp# 下载远程目录中的文件get test.txtip="192.168.1.103"user="chencye"password="chencye"remote_dir="/home/chencye/ftp"file_name="test.txt"local_dir="/home/chencye/download"# 自动ftp下载ftp -n <
软件安装
yum源及yum命令
# 安装base reop源mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bakcurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 安装epel repo源curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo# 清理缓存yum clean all# 重新生成缓存yum makecacheyum list gcc # 列出所指定的软件包yum list updates # 列出所有可更新的软件包yum list installed # 列出所有已安装的软件包yum list extras # 列出所有已安装但不在 Yum Repository 内的软件包yum info gcc # 获取指定软件包信息yum search gcc # 在源中查找指定软件yum remove gcc # 删除指定软件yum clean all # 清除缓存目录下的软件包及旧的headers
安装mysql
FTP服务安装
minimal安装时,配置网络连接
使用root账号登录
用nmtui
命令进入 Network Manager
Edit a connection
选择Edit
进入DHCP配置 选择IPv4 CONFIGURATION
为Automatic
,并且勾选Automatically connect
选项 最后返回命令行,输入: service network restart
测试:ping baidu.com
查看IP: ip addr show ens33
(ens33上面配置时出现的对应网卡名)
系统配置
为rm命令配置垃圾箱
alias rm="~/.local/saferm.sh"
设置定时任务,定时清空垃圾箱
0 0 * * 0 rm -rfu ~/Trash
配置别名alias与function
echo "alias l='ls -alh --color=auto --time-style=\"+%F %H:%M:%S\"'" >> ~/.bashrc && source ~/.bashrcecho "alias ll='ls -lh --color=auto --time-style=\"+%F %H:%M:%S\"'" >> ~/.bashrc && source ~/.bashrcecho "alias date='date \"+%F %H:%M:%S\"'" >> ~/.bashrc && source ~/.bashrc# function示例:重置ping命令# vi ~/.bashrcfunction ping { local commandName="${FUNCNAME[0]}" local params=($@) echo "Original command: $commandName ${params[@]}" local num=${#params[@]} local params_new=() for ((i=0; i<$num; i=i+1)) do param=${params[$i]} param=${param/"127.0.0.1"/"localhost"} # 替换参数 params_new[$i]=$param done echo "new command: $commandName ${params_new[@]}" command $commandName ${params_new[@]}}function md5 { if [[ ! $# -eq 2 ]]; then echo -e "\n" echo "missing parameter. example:" echo "md5 test.txt ee69b061c627ec20991d4259cbcbfed4" echo -e "\n" return fi local file="$1" local theMd5="$2" local fileMd5=`md5sum "$file" | awk '{print $1}'` [[ "$fileMd5" = "$theMd5" ]] && echo true || echo false}# source ~/.bashrc
vi编辑器配置
echo "syntax on" >> ~/.vimrcecho "set number" >> ~/.vimrcecho "set tabstop=4" >> ~/.vimrcecho "set expandtab" >> ~/.vimrc
配置PS1提示符定义
vi ~/.bashrc
PS1="\[\e[32;1m\][\u@\h \w]$\[\e[m\]"
export PS1
\d
:代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H
:完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux\h
:仅取主机的第一个名字,如上例,则为fc4,.linux则被省略\t
:显示时间为24小时格式,如:HH:MM:SS\T
:显示时间为12小时格式\A
:显示时间为24小时格式:HH:MM\u
:当前用户的账号名称\v
:BASH的版本信息\w
:完整的工作目录名称。家目录会以 ~代替\W
:利用basename取得工作目录名称,所以只会列出最后一个目录\#
:下达的第几个命令 设置字符序列颜色的格式为:\[\e[F;Bm\]
F
为字体颜色,编号30~37;B
为背景色,编号40~47 可通过\e[0m
关闭颜色输出;特别的,当B为1时,将显示加亮加粗的文字 颜色表与代码表
前景 | 背景 | 颜色 |
---|---|---|
30 | 40 | 黑色 |
31 | 41 | 紅色 |
32 | 42 | 綠色 |
33 | 43 | 黃色 |
34 | 44 | 藍色 |
35 | 45 | 紫紅色 |
36 | 46 | 青藍色 |
37 | 47 | 白色 |
时间同步
su root# 安装yum -y install chrony# 启用systemctl start chronydsystemctl enable chronyd# 设置亚洲时区timedatectl set-timezone Asia/Shanghai# 启用NTP同步timedatectl set-ntp yes# 手动同步:重启chronyd即可systemctl restart chronydexit