您的位置:首页 > 运维架构 > Shell

[置顶] 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: