1、Linux系统查看服务器是arm架构还是x86架构
uname -m
显示结果为:x86_64 ,但是这个地方有个容易搞错的地方,就是下载jdk选择文件包的时候,要选择:标签为:x64 Compressed Archive 对应的包
参考:(21条消息) Java相关经验_foxship305的专栏-优快云博客
2.设置linux环境变量
/etc/profile 中最后添加
JAVA_HOME=/usr/local/jdk1.8.0_311
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME JRE_HOME CLASSPATH
即时生效:source /etc/profile
3、设置提示符样式
/etc/profile 中最后添加
export PS1='[\u@$PWD\$]'
即时生效:source /etc/profile,显示样式为:[root@/root/software#] -- 用户@当前目录
4、查看操作系统版本
cat /etc/redhat-release
5、查看cpu核数
cat /proc/cpuinfo
或者
lscpu
鸣谢:(21条消息) linux下怎么查看cpu核数_天道酬勤-优快云博客_linux 查看cpu核数
6、解决docker容器中没有ping命令
- apt-get update
- apt install net-tools # ifconfig
- apt install iputils-ping # ping
鸣谢:解决docker容器中无ifconfig命令和ping命令问题 - 懒得说话啊 - 博客园 (cnblogs.com)
7、shell脚本中获取日期
#type: yyyymmdd
DATE=` date +%Y%m%d`
echo ${DATE}
#type: yyyy-mm-dd
DATE2=` date +%Y-%m-%d`
echo ${DATE2}
DATETIME=` date +%Y-%m-%d`' '` date +%H:%M:%S`
echo ${DATETIME}
D4=`date -d '0 day ago' "+%Y%m%d %k:%M:%S"`
echo ${D4}
#某一日期的下一天
INDATE=20211213
EXECDATE=`date -d"tomorrow ${INDATE}" +%Y%m%d`
输出结果:
20211123
2021-11-23
2021-11-23 16:50:38
20211209 15:57:37
20211214
8、shell脚本读取文件并按特殊字符分隔取值
文件内容如下,每行的字段用竖线("|")分隔
n001|张三|男
n002|李四|男
n003|王二麻子|男
脚本如下
FILENAME="testfile.txt"
while read fileline
do
echo "-------------"
if [ ${fileline} = "TITLE" ] ;then
read fileline
fi
SID=`echo ${fileline}| awk -F '|' '{print $1}'`
NAME=`echo ${fileline} | awk -F '|' '{print $2}'`
SEX=`echo ${fileline} | awk -F '|' '{print $3}'`
echo ${SID}
echo ${NAME}
echo ${SEX}
done < ${FILENAME}
shell文件加文件头注释
:<<comment
echo -ne "
----------------------------------------------------------------------------
| programme name : |
| author: |
| function: |
| date list: |
| ---------------------------------------------------------------------------|
| 1. |
| 2. |
----------------------------------------------------------------------------
"
comment
echo 'ok'
文件及文件夹相关操作
#判断文件存在则删除
if [ -f "${data_dir}/ok.flag" ]; then
rm -f ${data_dir}/ok.flag
fi
#判断文件夹不存在则创建
if [ ! -d "${data_dir}/${data_date}" ]; then
mkdir ${data_dir}/${data_date}
fi
#批量复制模板文件,M4开头的文件
find ${sqlFileDir} -name "M4*" | xargs -i cp {} ${sqlFile}
#文件中特定内容替换
#将sql目录下的包含@的文件中的" YEAR = @YEAR AND MONTH = @NONTH " 进行值替换为诸如 "YEAR = '2021' AND MONTH = '12'"
if [ ${year} -eq 2021 ]; then
sed -i "s/YEAR = @YEAR AND MONTH = @NONTH/YEAR = '${year}' AND MONTH = '${month}'/g" `grep @ -rl ${DIR}/sql`
fi
变量中的字符替换
#变量中的字符替换:例如变量值为:STR1-STR2-STR3.txt
DATE=20211209
JGH=9901
MBNAME=STR1-STR2-STR3.txt
TB1=${MBNAME/STR3/${DATE}}
echo ${TB1}
TB2=${TB1/STR1/${JGH}}
echo ${TB2}
STR1-STR2-20211209.txt
9901-STR2-20211209.txt
sqluldr2导出数据到文件
#导出sqlfile1.sql 中的脚本执行的数据到expfile
#sid: ip:1521/sid
sqluldr2 USER=${USER}/${pwd}@{sid} rows=100000 sql=${sqlDir}/${sqlfilename} FILE=${expfile} field=0x01 array=2000 read=128
格式日期显示文件列表
ls -l --time-style="+%Y-%m-%d %H:%M:%S" | grep .txt
ls -l --time-style="+%Y-%m-%d %H:%M:%S" | grep .txt > test.dat
-rw-r--r-- 1 root root 24 2021-11-11 13:13:42 backup.txt
将txt文件信息写入日志文件
cd /home/shtest
ls -l --time-style="+%Y-%m-%d %H:%M:%S" | grep .txt > test.dat
#读出test.dat 文件中列出文件的相关信息,并写入日志文件
while read line
do
#文件名
fileName=`echo ${line} | awk '{print $8}'`
#替换文件名变量
logName=${fileName/.txt/.log}
#文件大小
fileSize=`echo ${line} | awk '{print $5}'`
#文件创建时间
fileTime=`echo ${line} | awk '{print $6,$7}'`
#文件条数
fileLines=`wc -l ${fileName} | awk '{print $1}'`
if [ -f "${logName}" ]; then
rm ${logName}
fi
touch ${logName}
echo ${fileName} >> ${logName}
echo ${fileSize} >> ${logName}
echo ${fileTime} >> ${logName}
echo ${fileLines} >> ${logName}
done < test.dat
set -e 作用
你写的每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出。
参见:(25条消息) Unix/Linux 脚本中 “set -e” 的作用_TODD911的专栏-优快云博客
sed显示文件中匹配的行
文件 testfile.txt内容如下
n001|张三|男
n002|李四|男
TITLE
n003|王二麻子|男
命令:查找文件中包含“00”的内容
nl *.txt |sed -n '/00/p'
显示结果:
1 n001|张三|男
2 n002|李四|男
4 n003|王二麻子|男
crontab 时间参数
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重新启动apache
参考:(28条消息) Crontab 每隔整点1小时2小时执行一次任务_li-优快云博客_crontab每隔2小时执行一次
shell重定向相关
/dev/null 的用法: command -v $1 >/dev/null
通常被用于丢弃不需要的输出流
可以通过把删除命令的输出重定向到 /dev/null 来避免输出错误信息, 同时也不用判断文件是否存在
rm $1 >/dev/null 2>$1, 调整之后的删除脚本内容如下: