[置顶] linux常用命令与shell脚本编程
2017-12-16 23:08
1206 查看
导入公钥到信任证书
keytool -import -file catserver.cer -keystore "$JAVA_HOME/lib/security/cacerts" -alias catserver
删除公钥别名
keytool -delete -alias catserver -keystore cacerts -storepass changeit
远程调试代码
export JVM_OPT="$JVM_OPT -Dosgi.console=33801"
export JVM_OPT="$JVM_OPT -Xdebug -Xrunjdwp:transport=dt_socket,address=****:33802,server=y,suspend=y"
调试模式运行jar包
java -Dosgi.console=33801 -Xdebug -Xrunjdwp:transport=dt_socket,address=****:33802,server=y,suspend=y -cp *.jar ***
sed命令替换文件内容
sed -i 's?securerandom.source=file:/dev/random?securerandom.source=file:/dev/./urandom?g' ***
重启sshd服务
/etc/init.d/ssh restart
/etc/init.d/sshd restart
jar 文件打包
jar -cvf test.jar com/bbb.class aaa.class
查看端口占用情况:
netstat -npl | grep ***
查找文件
find / -name cacerts 2>/dev/null
查找java路径
which java
vim 查找时忽略大小写
项的影响,当 "\c" 或 "\C" 起作用时,它们设成什么值无关紧要。
vim 替换
: %s/source/des/g
%表示操作每一行
g表示替换一行中的每个匹配
设置linux机器硬件时间
hwclock --show 显示时间
hwclock --systohc 将系统时间同步到硬件
ubuntu 安装和卸载deb包
sudo dpkg -i 软件包名.deb
sudo apt-get remove 软件包名
同步时间
客户端:ntpdate ip
server端:ntp
为机器添加公钥
1.修改/etc/ssh/sshd_config(权限和公钥路径)
2.在用户主目录下添加 .ssh 文件夹 权限600
3.在.ssh文件夹下添加 authorized_keys 文件 权限600
linux历史命令不可用
vim /etc/profile
设置HISTSIZE=1000
设置连接超时时间:
vim /etc/profile
设置TMOUT=0
windows下findStr用法(类似linux中的grep)
netstat -na | findstr 12345
输出重定向
>>logs/root.log 2>&1 &
查看linux版本信息
cat /proc/version
eclipse设置main函数参数
右键 -> run as -> run configuration
解压.xz文件
xz -d linux-3.1-rc4.tar.xz
解压.tar文件
tar -xf linux-3.1-rc4.tar
解压.tar.gz到指定文件夹
tar -xzf jre-8u144-linux-x64.tar.gz -C /usr/lib/java`
压缩得到.tar.gz文件
tar -czf all.tar.gz *.jpg
注:
解压文件的时候,文件夹是合并操作,文件是覆盖操作
得到压缩文件的时候,是完全的覆盖操作
cp命令也一样,文件夹是合并操作,文件是覆盖操作
shell脚本编程-算术运算
val=`expr 2 + 2`
输出重定向
>>logs/root.log 2>&1 &
echo 输出丢失换行符
要保留换行符,使用如下命令 注意双引号一定不能少
echo "${foo}"
重启机器:
reboot
退出脚本运行
exit 0
if else语句用法:
if [ "$yesResult" != "" ];then
break
elif [ "$noResult" != "" ];then
echo "1"
elif [ "$unknownResult" != "" ];then
echo "2"
echo "${unknownResult}"
exit 0
else
echo "4"
echo "${out}"
exit 0
fi
while语句用法:
while "true"
do
........
done
for语句用法 + 按名字查找进程并关闭所有进程:
processCount=0
for processId in `ps -ef | grep xxx |grep java | awk '{print $2}'`
do
processCount=`expr $processCount + 1`
out=`kill $processId`
done
for递增循环
for((i=0;i<10;i++))
do
echo "$i"
sleep 0.1
done
shell命令行按删除键无效
stty erase '^H'
检查并安装java环境
#install jre environment
echo -e "\nchecking java environment..."
string=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $2 }'`
version=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'`
if [ $string == version ] ; then
echo -e "java exist! version--$version\n"
else
echo "java environment not found,installing....."
#make a floder and discard stderr output
4000
out=`mkdir /usr/lib/java 2>/dev/null`
#unzip the file
out=`tar -zxf jre-8u144-linux-x64.tar.gz -C /usr/lib/java`
out=`update-alternatives --install /usr/bin/java java /usr/lib/java/jre1.8.0_144/bin/java 300 2>/dev/null 1>/dev/null`
echo -e "install java succeed!\n"
fi
得到链接文件指向的位置
readlink -f
awk设置分隔符
awk -F '/bin/java' '{print $1}'
在脚本中调用其他脚本时输入直接在后面跟参数即可传进行
被调用的脚本直接$1 $2 使用即可 超过10 用${10}(从1开始,没有$0)
脚本睡眠:
sleep 5(单位是秒,可以有小数点,比如说0.1)
xftp显示隐藏文件夹
打开:工具--》选项--》常规 里面有一个“显示隐藏的文件”的选项,勾上即可。
linux显示隐藏文件夹
ctrl + h
递归修改用户和用户组
chown -R ossuser:ossgroup ./
vim 修改文件格式:
:set ff=unix
shell grep 使用的是正则表达式
如grep ".*aaa" 表示以a结束的字符
每隔1s循环向文件中输入内容 大于100自动停止
count=1
while "true"
do
count=`expr $count + 1`
echo "$count" >> test____^_^____.txt
sleep 1
done
设置xftp默认覆盖
工具->选项->传输->高级选项->覆盖文件 将上载下载都改为overwrite
nohup ./test.sh & 解决问题 不管原来的进程(脚本,或是java程序,或是其他)是否还在执行,脚本都会继续执行
如果不用(nohup ./test.sh &)这种写法,如果之前的进程正常执行结束,进程开启的脚本可以正常执行,但是如果进程是kill掉的,那么启动的脚本也会被结束
比如说用了process.waitFor();等待结束的进程被kill掉了。
在java代码中调用UP脚本去执行另一个ST脚本的时候
ST 中有echo -e这种语法的时候 后面的打印日志的语句无法正常输出到log文件
在UP.sh中没有用out=`./ST.sh `这种写法的时候 ST.sh一直无法执行成功,不知道原因
ubuntu设置软件开机自动运行jar包
有两个rc.local文件。/etc/init.d/rc.local文件会在系统启动的时候调用/etc/rc.local文件。一般将启动内容放在/etc/rc.local文件中
脚本rc.local中执行其他目录中的脚本文件时并不知道目录相关信息,但是脚本执行的时候可能需要使用相对路径。可以这样操作,以调用/home/copbint/Test/start.sh为例:
sed -i '/sleep 10 && /d' /etc/rc.local
hasExit=`cat /etc/rc.local | grep "^exit 0$"`
if [ "$hasExit" = "" ];then
echo "sleep 10 && /bin/bash /home/copbint/Test/start.sh" >> /etc/rc.local
else
sed -i '\#^exit 0$#i sleep 10 && /bin/bash /home/copbint/Test/start.sh' /etc/rc.local
fi
以行为单位进行解释:
1.执行前先删除,防止此命令多次重复执行的时候重复添加
2.确认脚本中是否有^exit 0$,^表示行起始符,$表示行结束符,过滤掉注释中的exit 0。
4.如果脚本中没有^exit 0$。直接在脚本追加内容即可。
6.如果脚本中有^exit 0$。在此行前面插入一行。这是sed命令的用法。不熟悉的可以参考: linux sed命令用法举例
另,注意下面这两种错误的写法:|
#i 后面不能跟#,会当成普通字符一起输入:
sed -i '\#^exit 0$#i#sleep 10 && /bin/bash /home/copbint/Test/start.sh' /etc/rc.local
命令最后面也不能跟#,会当成普通字符一起输入:
sed -i '\#^exit 0$#i sleep 10 && /bin/bash /home/copbint/Test/start.sh#' /etc/rc.local
使用expect自动进行远程登陆并执行命令(需要先执行 sudo apt-get install 命令进行安装
#!/usr/bin/expect
set timeout 5
#set username [lindex $argv 0] //保存脚本参数到变量中
#set password [lindex $argv 1]
#set hostname [lindex $argv 2]
spawn ssh xxxx@127.0.0.1
expect {
"(yes/no)?"
{
send "yes\n"
expect "password:"
send "xxxxx\n"
}
"password:"
{
send "xxxxx\n"
}
}
expect "~"
#sleep 0.5
send "cd /home/xxxx/Test\n"
expect "~"
#sleep 0.5
send "echo `date` >> haha.txt\n"
interact
遇到一个大坑就是,最外层的expect的大括号我换行了,导致一直不能自动输入密码。一直找不到原因,最后对照着别人的脚本试着修改才找到此处不对,不知道这背后有什么规则。但是里层的expect 又可以换行。
一点心得:
其实expect的工作原理就是监测服务器发送回来的报文,或者说发给shell的内容,虽然不知道具体在哪个层次做的捕获。屏幕上的提示信息,比如“xxx@ubuntu:~/Test$”,都是从服务器端返回的。所以说,如果expect捕获到期望的内容,就知道可以继续用send命令发送下一个命令让服务器执行了。
所以说还有一种暴力的方法,直接每条要send的命令后面进行一定时间的睡眠,而不用expect,一般来说,服务器都能够正常将命令执行完。当然,暴力而不够优雅,而且可能不能保证准确。
interact的作用是将交互权限交给用户进行操作。如果脚本结尾不加 interact,连接就会被关闭,而关闭连接相比于命令执行的优先级可能更高,这有可能导致最后的某些命令不被执行,所以说可能在最后一个命令后进行一定时候的睡眠,从而保证所有的命令都被正常执行。
查看文件或文件夹大小
du -sh
字符串转ascii码
printf "%d\n" "'A'"
构造一个ascii码对照表
echo "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZaccdefghijklmnopqrstuvwxyz">a.txt;od -t d1c a.txt
keytool -import -file catserver.cer -keystore "$JAVA_HOME/lib/security/cacerts" -alias catserver
删除公钥别名
keytool -delete -alias catserver -keystore cacerts -storepass changeit
远程调试代码
export JVM_OPT="$JVM_OPT -Dosgi.console=33801"
export JVM_OPT="$JVM_OPT -Xdebug -Xrunjdwp:transport=dt_socket,address=****:33802,server=y,suspend=y"
调试模式运行jar包
java -Dosgi.console=33801 -Xdebug -Xrunjdwp:transport=dt_socket,address=****:33802,server=y,suspend=y -cp *.jar ***
sed命令替换文件内容
sed -i 's?securerandom.source=file:/dev/random?securerandom.source=file:/dev/./urandom?g' ***
重启sshd服务
/etc/init.d/ssh restart
/etc/init.d/sshd restart
jar 文件打包
jar -cvf test.jar com/bbb.class aaa.class
查看端口占用情况:
netstat -npl | grep ***
查找文件
find / -name cacerts 2>/dev/null
查找java路径
which java
vim 查找时忽略大小写
项的影响,当 "\c" 或 "\C" 起作用时,它们设成什么值无关紧要。
vim 替换
: %s/source/des/g
%表示操作每一行
g表示替换一行中的每个匹配
设置linux机器硬件时间
hwclock --show 显示时间
hwclock --systohc 将系统时间同步到硬件
ubuntu 安装和卸载deb包
sudo dpkg -i 软件包名.deb
sudo apt-get remove 软件包名
同步时间
客户端:ntpdate ip
server端:ntp
为机器添加公钥
1.修改/etc/ssh/sshd_config(权限和公钥路径)
2.在用户主目录下添加 .ssh 文件夹 权限600
3.在.ssh文件夹下添加 authorized_keys 文件 权限600
linux历史命令不可用
vim /etc/profile
设置HISTSIZE=1000
设置连接超时时间:
vim /etc/profile
设置TMOUT=0
windows下findStr用法(类似linux中的grep)
netstat -na | findstr 12345
输出重定向
>>logs/root.log 2>&1 &
查看linux版本信息
cat /proc/version
eclipse设置main函数参数
右键 -> run as -> run configuration
解压.xz文件
xz -d linux-3.1-rc4.tar.xz
解压.tar文件
tar -xf linux-3.1-rc4.tar
解压.tar.gz到指定文件夹
tar -xzf jre-8u144-linux-x64.tar.gz -C /usr/lib/java`
压缩得到.tar.gz文件
tar -czf all.tar.gz *.jpg
注:
解压文件的时候,文件夹是合并操作,文件是覆盖操作
得到压缩文件的时候,是完全的覆盖操作
cp命令也一样,文件夹是合并操作,文件是覆盖操作
shell脚本编程-算术运算
val=`expr 2 + 2`
输出重定向
>>logs/root.log 2>&1 &
echo 输出丢失换行符
要保留换行符,使用如下命令 注意双引号一定不能少
echo "${foo}"
重启机器:
reboot
退出脚本运行
exit 0
if else语句用法:
if [ "$yesResult" != "" ];then
break
elif [ "$noResult" != "" ];then
echo "1"
elif [ "$unknownResult" != "" ];then
echo "2"
echo "${unknownResult}"
exit 0
else
echo "4"
echo "${out}"
exit 0
fi
while语句用法:
while "true"
do
........
done
for语句用法 + 按名字查找进程并关闭所有进程:
processCount=0
for processId in `ps -ef | grep xxx |grep java | awk '{print $2}'`
do
processCount=`expr $processCount + 1`
out=`kill $processId`
done
for递增循环
for((i=0;i<10;i++))
do
echo "$i"
sleep 0.1
done
shell命令行按删除键无效
stty erase '^H'
检查并安装java环境
#install jre environment
echo -e "\nchecking java environment..."
string=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $2 }'`
version=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'`
if [ $string == version ] ; then
echo -e "java exist! version--$version\n"
else
echo "java environment not found,installing....."
#make a floder and discard stderr output
4000
out=`mkdir /usr/lib/java 2>/dev/null`
#unzip the file
out=`tar -zxf jre-8u144-linux-x64.tar.gz -C /usr/lib/java`
out=`update-alternatives --install /usr/bin/java java /usr/lib/java/jre1.8.0_144/bin/java 300 2>/dev/null 1>/dev/null`
echo -e "install java succeed!\n"
fi
得到链接文件指向的位置
readlink -f
awk设置分隔符
awk -F '/bin/java' '{print $1}'
在脚本中调用其他脚本时输入直接在后面跟参数即可传进行
被调用的脚本直接$1 $2 使用即可 超过10 用${10}(从1开始,没有$0)
脚本睡眠:
sleep 5(单位是秒,可以有小数点,比如说0.1)
xftp显示隐藏文件夹
打开:工具--》选项--》常规 里面有一个“显示隐藏的文件”的选项,勾上即可。
linux显示隐藏文件夹
ctrl + h
递归修改用户和用户组
chown -R ossuser:ossgroup ./
vim 修改文件格式:
:set ff=unix
shell grep 使用的是正则表达式
如grep ".*aaa" 表示以a结束的字符
每隔1s循环向文件中输入内容 大于100自动停止
count=1
while "true"
do
count=`expr $count + 1`
echo "$count" >> test____^_^____.txt
sleep 1
done
设置xftp默认覆盖
工具->选项->传输->高级选项->覆盖文件 将上载下载都改为overwrite
nohup ./test.sh & 解决问题 不管原来的进程(脚本,或是java程序,或是其他)是否还在执行,脚本都会继续执行
如果不用(nohup ./test.sh &)这种写法,如果之前的进程正常执行结束,进程开启的脚本可以正常执行,但是如果进程是kill掉的,那么启动的脚本也会被结束
比如说用了process.waitFor();等待结束的进程被kill掉了。
在java代码中调用UP脚本去执行另一个ST脚本的时候
ST 中有echo -e这种语法的时候 后面的打印日志的语句无法正常输出到log文件
在UP.sh中没有用out=`./ST.sh `这种写法的时候 ST.sh一直无法执行成功,不知道原因
ubuntu设置软件开机自动运行jar包
有两个rc.local文件。/etc/init.d/rc.local文件会在系统启动的时候调用/etc/rc.local文件。一般将启动内容放在/etc/rc.local文件中
脚本rc.local中执行其他目录中的脚本文件时并不知道目录相关信息,但是脚本执行的时候可能需要使用相对路径。可以这样操作,以调用/home/copbint/Test/start.sh为例:
sed -i '/sleep 10 && /d' /etc/rc.local
hasExit=`cat /etc/rc.local | grep "^exit 0$"`
if [ "$hasExit" = "" ];then
echo "sleep 10 && /bin/bash /home/copbint/Test/start.sh" >> /etc/rc.local
else
sed -i '\#^exit 0$#i sleep 10 && /bin/bash /home/copbint/Test/start.sh' /etc/rc.local
fi
以行为单位进行解释:
1.执行前先删除,防止此命令多次重复执行的时候重复添加
2.确认脚本中是否有^exit 0$,^表示行起始符,$表示行结束符,过滤掉注释中的exit 0。
4.如果脚本中没有^exit 0$。直接在脚本追加内容即可。
6.如果脚本中有^exit 0$。在此行前面插入一行。这是sed命令的用法。不熟悉的可以参考: linux sed命令用法举例
另,注意下面这两种错误的写法:|
#i 后面不能跟#,会当成普通字符一起输入:
sed -i '\#^exit 0$#i#sleep 10 && /bin/bash /home/copbint/Test/start.sh' /etc/rc.local
命令最后面也不能跟#,会当成普通字符一起输入:
sed -i '\#^exit 0$#i sleep 10 && /bin/bash /home/copbint/Test/start.sh#' /etc/rc.local
使用expect自动进行远程登陆并执行命令(需要先执行 sudo apt-get install 命令进行安装
#!/usr/bin/expect
set timeout 5
#set username [lindex $argv 0] //保存脚本参数到变量中
#set password [lindex $argv 1]
#set hostname [lindex $argv 2]
spawn ssh xxxx@127.0.0.1
expect {
"(yes/no)?"
{
send "yes\n"
expect "password:"
send "xxxxx\n"
}
"password:"
{
send "xxxxx\n"
}
}
expect "~"
#sleep 0.5
send "cd /home/xxxx/Test\n"
expect "~"
#sleep 0.5
send "echo `date` >> haha.txt\n"
interact
遇到一个大坑就是,最外层的expect的大括号我换行了,导致一直不能自动输入密码。一直找不到原因,最后对照着别人的脚本试着修改才找到此处不对,不知道这背后有什么规则。但是里层的expect 又可以换行。
一点心得:
其实expect的工作原理就是监测服务器发送回来的报文,或者说发给shell的内容,虽然不知道具体在哪个层次做的捕获。屏幕上的提示信息,比如“xxx@ubuntu:~/Test$”,都是从服务器端返回的。所以说,如果expect捕获到期望的内容,就知道可以继续用send命令发送下一个命令让服务器执行了。
所以说还有一种暴力的方法,直接每条要send的命令后面进行一定时间的睡眠,而不用expect,一般来说,服务器都能够正常将命令执行完。当然,暴力而不够优雅,而且可能不能保证准确。
interact的作用是将交互权限交给用户进行操作。如果脚本结尾不加 interact,连接就会被关闭,而关闭连接相比于命令执行的优先级可能更高,这有可能导致最后的某些命令不被执行,所以说可能在最后一个命令后进行一定时候的睡眠,从而保证所有的命令都被正常执行。
查看文件或文件夹大小
du -sh
字符串转ascii码
printf "%d\n" "'A'"
构造一个ascii码对照表
echo "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZaccdefghijklmnopqrstuvwxyz">a.txt;od -t d1c a.txt
相关文章推荐
- 【shell脚本开发技术】linux中shell script脚本开发编程常用命令与脚本速记指南
- Linux(7) 常用命令扩展 改变用户环境变量 (可以实现登陆就执行shell脚本)
- Linux命令shell脚本编程学习笔记-18章初识sed和gawk
- Shell脚本编程——了解你的Linux系统必须掌握的20个命令
- Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令
- Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif
- Linux下shell脚本编写:常用命令
- Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令
- [置顶] Linux下eclipse中shell脚本编程环境的搭建
- Shell脚本编程——查找和过滤的常用命令
- Linux-Shell脚本编程-学习-1-Linux基本命令
- Linux命令行与shell脚本编程-part1-基本bash shell命令
- 常用linux命令及shell脚本
- Linux 基础命令(十)—— SHELL脚本编程进阶(一)
- Shell脚本编程——了解你的Linux系统必须掌握的20个命令
- Linux-Shell脚本编程-学习-2-Linux基本命令
- linux命令:shell脚本编程知识点 信号捕捉trap mktemp ${#}
- Shell脚本编程——了解你的Linux系统必须掌握的20个命令
- Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
- *Linux Shell 高级编程技巧4----几个常用的shell脚本例子