Shell命令笔记

shell 命令

column -t # 整齐排列

for i in cat list1|awk '{print $1}' |head -n 1 ;do printf “ i\t";sshp8022root@ i \t " ; s s h − p 8022 r o o t @ i “ls -l /opt/log/nginx/access_proxy.log” ;done #取消换行

basename /usr/bin/a.txt # 取值a.txt

dirname /usr/bin/a.txt # 取值/usr/bin

paste -sd, test.txt # 将文件中的多行合并到一行并以”,”分割

if echo abcde|grep -q abc;then echo “found”;else echo “not found” ;fi # grep -q 表示将结果不输出到屏幕

sort -u test.txt # 只显示唯一的行

grep -w 192.168.100.1 test.txt # 强制匹配仅完全匹配字词

let i++ # 相当于i=i+1

readlink anaconda-ks.cfg # 获得当前链接文件的源地址

echo > test.txt # 清空文件中内容

str=aremove&&echo ${str:1} # 去除字符串第一个字符;-1去除字符串最后一个字符;2去除前两个字符

dirname /usr/bin/ls # 去除/ls

mv abc{,.bak} # 改名字为abc.bak

top -n 1 | awk ‘/Cpu/{print $5}’|cut -d% -f 1 # 取剩余cpu利用率

echo 9692.9 7 | awk ‘{print 1/ 1 / 2}’ # 浮点除法运算awk用法

echo print 9692.9/7 | python # 浮点除法运算python用法

echo “scale=3;9692.9/7”|bc # 浮点除法运算bc用法

grep ‘(10.){2,}’ 1.txt # 过滤字符串10 10.是一个整体,至少出现2次

for循环

for ((i=9;i<=10;i++));do echo $i;done

kill pgrep dovecot # 查看dovecot进程PID并杀死

echo $((5*(6+10))) # 先运算括号

echo $((((((5*(6+10)))+2-2))*10))

basename /root/a.txt # 取最后的文件名

pr # 将文件分解为多个页面的输出;通常用于打印。

排序

join employee bonus | sort -k 2 # join将2个文件合并,以第二列排序

tee # 将它的输入打印到文件和屏幕。当您想创建某些日志记录,但还想在屏幕上看时,这很有用

uniq # 获取已排序的文件或数据流(通过管道)显示唯一行 -c 显示每次行出现次数 -d 只显示重复的行

comm # 比较两个排好序的文件

sleep # 让当前进程休息一会儿

cmp # 判断两个文件内容是否一样

diff # 详细输出两个不同文件的差别

xargs < b.txt # 可以将多行变为一行

curl -I -s www.baidu.com|head -1 # 截取链接状态

ll -rt # 按修改时间从远到近排序

ll -Sh # 安装文件大小排序非目录

du -sh ./* # 列出

kill -15 ps aux | grep java |grep -v "grep " |awk '{print $2}'

find / -name *cpp | cut -d / -f 3-100 | awk ‘{print “../../”$0” \”}’

cat /proc/version

cat /etc/issue # 查看系统版本

if nc -v -z IP I P Port # 判断端口是否开放

if grep error log.txt # 判断文本是否有error

ls -ld */ # 只显示目录

grub-md5-crypt # md5加密

shopt -s extglob && rm -rf !(center) # 删除除center以外的所有

ls | xargs -n 10 rm -f # 以删除10个文件为组删除

ps -eo pid,lstart,etime | grep 47959 # 查看某个进程启动时间

find 用法

find 某个目录 -type f -mtime +7 -exec rm {} \; # 查找名字是-name -iname意思是忽略大小写

find / -type f -size +10M -exec ls -lrt {} \;

find /root -type f -mtime +6 -exec ls -l {} \;

find / ! -name f *.txt # 查找不以txt结尾的文件

//一下默认时间天

-atime # 用户最后一次访问的时间

-mtime # 文件最后一次被修改的时间

-ctime # 权限最后一次改变的时间

//一下默认时间分钟

-amin
-mmin
-cmin
find / -type f -newer test.txt # 查找比test.txt更长的修改时间的文件
-size 5k/M/G # 文件大写 单位
-perm # 权限
-user # 用户
find ./ -type f -name 1 -delete # 删除查找出来的文件
grep mbreader -rl .
find ./ -name * -type f -print | xargs grep “mbreader”

xargs 用法

xargs -d : # 以: 为分隔符
xargs -n 2 # 2组为一行
cat test.txt | xargs -I {} ./a.sh -p {} -l # 将 结果用{}表示传递给后面
xargs rm -f
xargs ls -l

sort 用法

sort # 按字母排序 -u 去除重复行 -r 降序 -o 讲排序后的结果重定向 -n 以数值排序默认10在2前面
sort -n -k 2 -t : facebook.txt # 以:分隔符 的 第2列来进行排序 -t 指定分割符 -k 指定列
sort -M # 按月份排序
sort -c test.txt # 测试文件是否排过序

uniq 用法

uniq # 不加参数删除重复行
uniq -u # 只显示唯一行
uniq -c # 显示各行出现的次数
uniq -d # 找出重复的行

cut 用法

cut -f1,3 # 显示第一列和第三列
cut -f2 –complement # 显示除了第2列其他所有
cut -d : # 分界符:

date 用法

date -d ‘2013-06-01 +10day 10:00:00’ ‘+%F %H:%M’ # 固定日期加10天
date -d +1day ‘+%F %H:%M’ # 当前时间加1天
grep 选项
-v #不显示匹配行
-c #显示匹配行数
-h #不显示文件名
-i #忽略大小写
-n #显示行号
-w #严格匹配

sed 用法

a\ # 当前行后添加行
d # 删除行
i\ # 当前行前插入行
p # 打印行
\n # 换行
s # 替换
g # 全局替换
sed ‘s/[0-9][0-9]$/&.5/’ datafile # 在替代串里的&字符代表在搜索串中真正找到的。每个以两个数字结尾的行都被它自己取代,且要在后面加上.5
sed -i ‘s/love/&/’ a.txt # &号代表搜索串。串love将被星号包围的自身所替代;即love变成love
sed -i ‘/dataavc/i\111\2222’ a.txt # 在a.txt文件中以dataavc开头的行前面插入1111行和222行
sed -i ‘/#德国/a#朝鲜\nd=55’ a.txt # 在#德国行后面追加2行
sed -n ‘2p’ test.txt # 打印第2行
sed -e ‘s/\?.//g’ -e ‘s/.\///g’ # 例如http://www.ourday.cn/bbs/index.php?k=8只过滤出index.php
sed -i ‘20,30s/var\/lib/data/g’ /etc/my.cnf # 替换20至30行
find test -name *.sh -exec sed -i ‘s/.\/hostlists.txt/..\/idctest_iplist/g’ {} \;
sed ‘2,5d’ test.txt # 删除2-5行
sed ‘/my/,/you/d’ test.txt # 删除包含my行到包含you行之间的行
sed ‘/my/,10d’ text.txt # 删除包含my的行到第10行
sed -e ‘/^#/d’ -e ‘/^$/d’ text.txt # 删除注释和空行
cat /home/ntalker/ntalker-t2d-tchat/log/red5.log | sed -n ‘/15:00/,/16:00/p’

sshpass 用法

scp -P 36000 -o “StrictHostKeyChecking no” root@10.182.0.32:/data/soft/java/jdk-6u43-linux-x64.bin . # cvm主机
scp -o “StrictHostKeyChecking no” anaconda-ks.cfg root@yltx11:/opt/ # 避免输入yes/no
sshpass -p 1 scp -o “StrictHostKeyChecking no” anaconda-ks.cfg root@yltx12:/opt/ # 避免输入密码和yes/no
sshpass -p 1 ssh -o “StrictHostKeyChecking no” root@192.168.100.100 “cat /root/list.txt” # 远程查询文件内容
sshpass -p aaaaaa ssh -o “StrictHostKeyChecking no” root@192.168.100.250 “sed -i ‘/#德国/i#朝鲜\nd=55’ /root/a.txt” # 远程插入文件内容
sshpass -p www.utongame.com scp -o “StrictHostKeyChecking no” root@s999.yltx.yaowan.com:/data/share/game_install_center.sh .
sshpass -p www.utongame.com scp -o “StrictHostKeyChecking no” root@s999.yltx.yaowan.com:/data/share/game_install.sh .

seq tr 用法

seq -s ’ ’ -w 10 # 以01 02 …..10格式列出,以空格分割
seq -w 10 | tr “\n” ” ” # 以01 02 …..10格式列出,以行分割,tr将行(\n) 替换为空格(” “)分割
seq -w 10 | tr -d “\n” # 以01 02 …..10格式列出,以行分割,tr -d 去掉分割符行
cat file | tr -d “\r” > new_file # 删除Windows文件“造成”的’^M’字符
cat file | tr -d “#” # 删除注释字符
cat file | tr -s ‘\n’ # 删除空行
cat 1 | echo [ [ (tr ‘\n’ ‘+’) 0] # 将结果进行加法运算
echo aabcbbabcc|tr “abc” “xyz” # 将a替换x,/b/y/,/c/z/,而不是将字符串/abc/xyz/
echo seq -w 10 {10..99} # 以01 02 …99格式显示
seq -s ” ” -f “%02g” 99 # 以01 02 …99格式显示
seq -f “%02g” 99|xargs -n 99 # 以01 02 …99格式显示
for i in seq -w 99 ; do echo -n $i” “;done # 以01 02 …99格式显示,echo -n 取消自动换行

sed ‘/^$/d’ file # 移除空白行

xargs 用法

find /etc -name “*.conf” | xargs ls –l # 命令xargs将结果传递给ls -l
find python -type f -name “a.*” -exec head -1 > f.txt {} \; #python目录下以a.开头的文件第一行读取保存到f.txt
awk 用法

seq 99 |awk ‘{if(NR<10)print ‘0’ 0;elseprint0}’|xargs -n 100 # 以01 02 …99格式显示
echo "1378359168.830" | awk '{print strftime("%F %H:%M",$0)}'
awk -F: '$0 ~ /WARNING|FATAL/ && $0 !~ /IGNOR/{print $5}' a.txt #打印包含WARNING或者FATAL,但不包含IGNOR的行的第5列
grep -v "IGNOR" a.txt | grep -e "WARNING" -e "FATAL" #打印包含WARNING或者FATAL行
netstat -anplt | grep :::22|awk '{gsub("/"," ");gsub(":::"," ");print "prot:",$4, "pid:",$7}' # 过滤出sshd 端口号和进程号
awk '!a[$0]++' a.txt # 去除重复行
awk '{ip[$1]++}END{for (i in ip){printi,ip[i]}}' /var/log/nginx/access.log

expect 用法

#!/usr/bin/expect -f
spawn scp yunwei-d@119.146.202.24:/data/soft/java/jdk-6u43-linux-x64.bin /data/soft/java/
set timeout 300
expect "(yes/no)?"
send "yes\r"
expect "password:"
set timeout 300
send "123.com\r"
set timeout 300
interact

read 用法

while read -u3 i && read -u4 j
do
echo $i $j
done 3<afile 4<bfile #的意思是,不断从 afile 和 bfile 中分别读取内容到i , j 中,然后用echo 打印出来。 这个循环会一直执行直到遇到 afile 或 bfile 中至少任意一个的文件尾。

比方说你 afile 的内容是
a
b
c

bfile 的内容是
1
2
3
4

则这段程序就会打印
a 1
b 2
c 3
shell 编程中使用到得if语句内判断参数
文件操作
  –b 当file存在并且是块文件时返回真

  -c 当file存在并且是字符文件时返回真

  -d 当pathname存在并且是一个目录时返回真

  -e 当pathname指定的文件或目录存在时返回真

  -f 当file存在并且是正规文件时返回真

  -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真

  -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效

  -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真

  -p 当file存在并且是命令管道时返回为真

  -r 当由pathname指定的文件或目录存在并且可读时返回为真

  -s 当file存在文件大小大于0时返回真

  -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真

  -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。

  -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
数字比较
  -eq 等于

  -ne 不等于

  -gt 大于

  -lt 小于

  -le 小于等于

  -ge 大于等于

  -z 空串
字符串比较
  = 两个字符相等
!= 两个字符不等
-n 比较字符串长度是否大于0,如果大于则为“是”
-z 比较字符串的穿度是否等于零,如果等于则为“是”
if [ ! -e file ] ; then        #如果文件不存在的话,then;  
逻辑操作  
    -a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否”  
    -o 或(or):两个逻辑值有一个为“是”,返回值就为“是”  
    # &&或者|| 使用于 if [ ] && [ ]  
    # -a或者-o 使用于 if [
file ] ; then        #如果文件不存在的话,then;  逻辑操作      -a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否”      -o 或(or):两个逻辑值有一个为“是”,返回值就为“是”      # &&或者|| 使用于 if [ ] && [ ]      # -a或者-o 使用于 if [
? -eq 0 -a 0=a.sh] 0 = ‘ a . s h ′ ] 内 部 参 数 # —-传递给程序的总的参数数目
?shellshell退退00 ? — − 上 一 个 代 码 或 者 s h e l l 程 序 在 s h e l l 中 退 出 的 情 况 , 如 果 正 常 退 出 则 返 回 0 , 反 之 为 非 0 值 。 * —-传递给程序的所有参数组成的字符串。
@array=(redgreenblueyellowmagenta)dir= @ — − 程 序 的 所 有 参 数 数 组 表 示 方 法 a r r a y = ( r e d g r e e n b l u e y e l l o w m a g e n t a ) d i r = (ls)
for ((i=0;i<{#dir[*]};i++));do echo " {#dir[*]};i++));do echo " {dir[i]}”;done  
注释
i]}”;done  注释
{#dir[*]} 表示数组长度 ;{dir[ {dir[ i]} 表示数组内容

for 循环

!/bin/bash

a.sh

for a
do
echo $a
done

sh a.sh 1 2 3
1
2
3
VIM 编辑器用法
/pattern # 向后查找
?pattern # 向前查找
n # 下一个匹配
N # 上一个匹配
:%s/a/b/g # 将全文中的a替换为b
:1,5s/a/b/g # 将1-5行中的a替换为b
dd # 删除所在行
dd10 # 删除所在行后面的10行
dw # 删除一个字
x # 删除当前字符
X # 删除前一个字符
yy # 复制当前行
2yy # 复制两行
yw # 复制一个字
p # 小写P粘贴内容在当前行下面,大写P粘贴到上面
Home # 切换到行首
End # 切换到行末
PageUp # 上翻页
PageDown # 下翻页
gg # 跳到文件开头
G # 跳到文件结尾
:set nu # 显示行号
:set nonu # 取消行号
文本内容:
$cat test.txt
001
002
003
004
005
006
0000999

!/bin/bash

#
line=”root:x:0:0:root:/root:/bin/bash”
IFS=”:” # 以:为分隔符
count=0
for item in linedo[[ l i n e d o [ [ count == 0 ]] && user= item[[ i t e m [ [ count == 6 ]] && shell= itemletcount++doneecho i t e m l e t c o u n t + + d o n e e c h o user is $shell

结果 root is /bin/bash

for ((i=10;i<=20;i++)) ; do sh release_s i/shutdownyulong.sh;donefor((i=10;i<=20;i++));docpgameactivity.xlsreleases i / s h u t d o w n y u l o n g . s h ; d o n e f o r ( ( i = 10 ; i <= 20 ; i + + ) ) ; d o c p g a m e a c t i v i t y . x l s r e l e a s e s {i}/resources/xls/ ;done
for ((i=10;i<=20;i++)) ; do sh release_s${i}/startup_yulong.sh ;done

rsync -aP -e “ssh -p 8022” xn6 root@113.31.17.227:/home/ntalker/ntbackup/dl.ntalker.com/js/

rsync -aP -e “ssh -p 8022” –delete –exclude=’enterpriseIcon’ root@192.168.1.114:/home/ntalker/www/mcenterbc.ntalker.com ./

查看网络连接情况
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}’

sed ’28s/value=.*”/value=”tcp:\/\/aaadf22d.com:33”/g’ webapps/t2d/WEB-INF/red5-web.xml
sed ’28s/[0-9]+/80/g’ webapps/t2d/WEB-INF/red5-web.xml

yum install collectd –downloadonly –downloaddir=/root/ 下载不安装

database.php.template:$db[‘default’][‘hostname’] = ‘{{DEFAULT_HOSTNAME}}’;

database.php.template:$db[‘default’][‘username’] = ‘{{DEFAULT_USERNAME}}’;

查找目标 : .?{{(\w+)}}[^\n]
替换为: \1\n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当学习Shell命令时,以下是一些重要的注意事项和学习建议: 1. 基本语法:Shell命令通常由命令名称和参数组成。命令名称是要执行的操作,而参数则提供了命令所需的信息。了解Shell命令的基本语法是学习的第一步。 2. 命令帮助:大多数Shell都提供了内置的命令帮助功能。通过使用命令后跟`--help`或`-h`选项,或者使用`man`命令(例如`man ls`)来获取有关特定命令的详细信息。 3. 常用命令:有一些常见的Shell命令对于日常使用非常有用。这些包括`cd`(更改目录)、`ls`(列出目录内容)、`mkdir`(创建目录)、`rm`(删除文件或目录)等。逐步学习和掌握这些命令是很重要的。 4. 管道和重定向:Shell命令非常强大,可以通过管道和重定向符号将多个命令组合在一起。了解如何使用管道(`|`)将一个命令的输出作为另一个命令的输入,并使用重定向符号(`>`、`>>`、`<`)来控制输入和输出。 5. 脚本编写:Shell脚本是一种将多个命令组合在一起以自动化任务的方法。学习如何编写简单的Shell脚本可以提高工作效率。 6. 实践和练习:最重要的是进行实践和练习。尝试使用不同的Shell命令来完成各种任务,并在实际场景中应用所学知识。 记住,Shell命令的学习是一个逐步的过程。开始时可能会有些困惑,但随着实践和经验的积累,你会变得越来越熟练。希望这些提示对你有帮助!如有任何具体问题,随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值