Linux 常用命令

1、Linux系统查看服务器是arm架构还是x86架构

uname -m

显示结果为:x86_64 ,但是这个地方有个容易搞错的地方,就是下载jdk选择文件包的时候,要选择:标签为:x64 Compressed Archive 对应的包

参考:(21条消息) Java相关经验_foxship305的专栏-CSDN博客

 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核数_天道酬勤-CSDN博客_linux 查看cpu核数

6、解决docker容器中没有ping命令

  1. apt-get update
  2. apt install net-tools       # ifconfig 
  3. 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的专栏-CSDN博客

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-CSDN博客_crontab每隔2小时执行一次

shell重定向相关

 /dev/null 的用法:    command -v $1 >/dev/null

通常被用于丢弃不需要的输出流

可以通过把删除命令的输出重定向到 /dev/null 来避免输出错误信息, 同时也不用判断文件是否存在
rm $1 >/dev/null 2>$1, 调整之后的删除脚本内容如下:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值