Linux常用命令实践

1.

scp 文件迁移

 

Remote Server --> Local file

 

scp -p port user@remoteserverip:/home/user/filename /home/user/filename

各部分含义:

p 为端口参数;

port为具体端口号; 

user 为ssh user;

 remoteserverip为远程服务器ip或者映射后的域名;

/home/user/filename 为远程服务器的文件名;

/home/user/filename 为本地服务服务器的文件名。

该命令的作用就是将远程的filename复制到本地对应的目录下面。

 

如果报错:not a regular file,请加上-r参数。

 

options

-r        递归复制

-l user   指定用户名

-pw       显示的输入用户密码

 

 

 

 

Local file --> Remote Server

用法:

scp local_file remote_username@remote_ip(or domain name):remote_folder

 

使用域名的例子如下:

scp /home/root/davidTmp/output2.csv root@vm008:/root

 

2.

tail 文件查看

从指定点开始将文件写到标准输出。

使用tail命令的-f选项可以方便的查阅正在改变的日志文件,
tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。

tail -n 20  test.log  //查看倒数20行的信息
tail -n +20 test.log  //查看20行以后的信息
tail -f     test.log  //刷新文件尾部内容

 

 

3.

ps aux | grep some_process_name

查看目前运行的所有进程。

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。 
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 
4)ps -e 此参数的效果和指定"A"参数相同。 
5)ps e 列出程序时,显示每个程序所使用的环境变量。 
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。 
7)ps -H 显示树状结构,表示程序间的相互关系。 
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。 
9)ps s 采用程序信号的格式显示程序状况。 
10)ps S 列出程序时,包括已中断的子程序资料。 
11)ps -t  指定终端机编号,并列出属于该终端机的程序的状况。 
12)ps u  以用户为主的格式来显示程序状况。 
13)ps x  显示所有程序,不以终端机来区分。

 

找到进程:

ps aux | grep java

杀死进程:

kill -9 pid

 

 

4.

lsof

[转] http://blog.csdn.net/wyzxg/article/details/4971843 --linux删除文件后没有释放空间

lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,
设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。

 

5.

chown、chgrp

修改文件或目录所属用户、所属组

使用chown命令可以修改文件或目录所属的用户:

       命令:chown 用户 目录或文件名

       例如:chown david /home/liuwei  (把home目录下的liuwei目录的拥有者改为david用户) 

使用chgrp命令可以修改文件或目录所属的组:

       命令:chgrp 组 目录或文件名

       例如:chgrp superuser /home/liuwei  (把home目录下的liuwei目录的所属组改为superuser组)

 

6.

xargs与管道符综合实例

A) 删除除指定文件之外的所有其他文件(含文件/目录)

ls|grep -v cep_compute.tar.gz|xargs rm -rf

B) 杀掉Hello java进程

jps -l|grep HelloExecutor|awk '{print $1}'|xargs kill -9

C) 杀掉运行中的sh脚步

#匹配任意空格: \ *

#匹配任意字符: .*

kill -9 $(ps -ef|grep "sh\ *.*start_new.sh\ *main"|grep -v grep|awk '{print $2}')

 

7.

-e -f -d ne lt

文件比较运算符
-e filename 	如果 filename存在,则为真 	[ -e /var/log/syslog ]
-d filename 	如果 filename为目录,则为真 	[ -d /tmp/mydir ]
-f filename 	如果 filename为常规文件,则为真 	[ -f /usr/bin/grep ]
-L filename 	如果 filename为符号链接,则为真 	[ -L /usr/bin/grep ]
-r filename 	如果 filename可读,则为真 	[ -r /var/log/syslog ]
-w filename 	如果 filename可写,则为真 	[ -w /var/mytmp.txt ]
-x filename 	如果 filename可执行,则为真 	[ -L /usr/bin/grep ]
filename1-nt filename2 	如果 filename1比 filename2新,则为真 	[ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 	如果 filename1比 filename2旧,则为真 	[ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 	如果 string长度为零,则为真 	[ -z "$myvar" ]
-n string 	如果 string长度非零,则为真 	[ -n "$myvar" ]
string1= string2 	如果 string1与 string2相同,则为真 	[ "$myvar" = "one two three" ]
string1!= string2 	如果 string1与 string2不同,则为真 	[ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2 	等于	[ 3 -eq $mynum ]
num1-ne num2 	不等于	[ 3 -ne $mynum ]
num1-lt num2 	小于	[ 3 -lt $mynum ]
num1-le num2 	小于或等于	[ 3 -le $mynum ]
num1-gt num2 	大于	[ 3 -gt $mynum ]
num1-ge num2 	大于或等于	[ 3 -ge $mynum ]

 

8.

获取随机数

function rand(){

  min=$1

  ((max=$2-$1))

  num=$(date +%s%N)

  retnum=$(($num%$max + $min))

  echo $retnum

}

 

9.

随机获取文本中一行

process_to_be_kill=`shuf -n1 pid`

kill -9 $process_to_be_kill

 

10.

删除文本中指定的一行

sed -i "/${process_to_be_kill}/d" pid

 

11.

变量赋值

let mod_number=random_number%2

retnum=$(($num%$max + $min))

 

12. 

综合案例

如果进程数大于某个预设值,则随机将一个进程杀死,如果小于该值,则启动java进程

function start_process(){

  process_cnt=`cat pid | wc -l`

 

  echo 'process_cnt='$process_cnt

  if [ $process_cnt -ge $concurrent_cnt ];then

    process_to_be_kill=`shuf -n1 pid`

    echo 'process_to_be_kill='$process_to_be_kill

    kill -9 $process_to_be_kill

 

    sed -i "/${process_to_be_kill}/d" pid

  else

    random_number=$(rand 1 100)

    echo 'random_number=============='$random_number

    let mod_number=random_number%2

    echo 'mod_number='$mod_number

    if [ $mod_number -eq 1 ];then

      echo 'Random number is odd, will start new handler.'

 

      nohup java -Xms70g -Xmx120g -XX:-UseGCOverheadLimit  -Dproject.configuration=$dir/app.properties -Dlog4j.configuration=file:$dir/log4j.properties  -cp /opt/spark-2.4.0-cdh6.1.0/conf/:/opt/spark-2.4.0-cdh6.1.0/jars/*:/opt/spark-2.4.0-cdh6.1.0/jars/../hive/*:$dir/cep-order-1.0-SNAPSHOT-jar-with-dependencies.jar org.apache.spark.executor.HelloExecutor  $dir/meta/data > /dev/null  2>&1  &

      echo $! >> pid

    else

      echo 'Random number is even, will kill one handler randomly'

      process_to_be_kill=`shuf -n1 pid`

 

      kill -9 $process_to_be_kill

 

      sed -i "/${process_to_be_kill}/d" pid

    fi

  fi

}

 

13. 

循环执行某项操作

function main_process(){

  while true

  do

    start_process

    random_number=$(rand $run_min $run_max)

    echo 'Current time is '$(date '+%Y-%m-%d %H:%M:%S')', System will sleep for '${random_number}' seconds'

    sleep $random_number

  done

}

 

 

14. 

在多个文件中查找符合某个特征的文件

ls lib/* | while read line; do jar -tf $line|grep ${SPECIFIC_FEATURE}; echo $line; done

#查找并判断文件类型是否为文件,是则清空:

ls|while read l;do if [ -f $l ];then cat /dev/null > $l;fi done

 

15. 

获取文件当前路径

curr_dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)

 

16.

从文件中循环读取一行文本

while read line; do  done; < file 

案例:

读取文件中server中ip地址,批量将jar包上传上去:

while read IP; do scp -P 22 /home/david/deploy/file_transfer_station/* david@$IP:~ ; done < dw_servers

 

17.

清空文件

方法1:cat /dev/null > ${FILE_NAME}

方法2:> ${FILE_NAME}

 

18.

sed替换指定string内容

场景1:替换不带路径的字符串

sed -i "s/address:.*/address: $ip/g"  ${SPRINGBOOT_APP_PATH}/config/application-peer1.yml (将address: 后的ip替换为新的ip)

 

场景2:替换带路径的字符串

sed  -i  "s:/aaa/bbb:${NEW_PATH}:"  test.yml

注意:

a)、":"为新的分隔符,为非默认的"/";

b)、当替换的字符串为使用"$"符号的变量时,-i后的参数需整体用 双引号(" ~ ") 包起来,如果使用单引号(' ~ '),则变量不会被替换。

场景3:为第n行插入指定String

语法:

sed -i "第几行i\需要添加的内容" $RawFileName

样例,在文件f的第一行插入指定的文件内容:

sed -i "1i\\$(cat user_header.txt)" $f

检查是否插入:

sed -n '1,1p' yourfile

 

19.

vim s替换指令

:s/helllo/sky/   替换当前行第一个hello为sky

:s/helllo/sky/g  替换当前行的所有hello为sky

:n,$s/hello/sky 替换第n行开始到最后一行的第一个hello为sky

:n,$s/hello/sky/g 替换第n行开始到最后一行的所有hello为sky

:%s/hello/sky    替换每一行的第一个hello为sky

:%s/hello/sky/g    替换每一行的所有hello为sky

 

20.

vim 中【将第3~最后一行】的空格(包括空格,\t,^M)替换为空

:3,$s/[[:space:]]*//g

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值