首页 > 技术 > 系统 > Linux > Linux常用命令和Shell编程基础

Linux常用命令和Shell编程基础

2017-01-11 浏览()

目录相关

cd
- .与.. 分别表示当前目录和父目录
- ~与$HOME 都是指当前用户的主目录
- cd – 切换到上一次所在的目录(不一定是父目录)

pwd
- pwd 显示当前目录
- $PWD与$OLDPWD 两个变量表示当前目录和上一次所在的目录

ls
- ls -rtl 查看当前目录下的文件,按时间倒序排(最新的在最后)

文件查看

- cat <file> 查看文件

head
- head <file> 查看文件前10行
- head -20 <file> 查看文件前20行

tail
- tail <file> 查看文件最后10行
- tail -20 <file> 查看文件最后20行
- tail –f <file> 查看文件最后10行,并监测显示文件追加内容

tailf
- tailf <file> 和tail –f <file>类似

交互式查看、 编辑文件

less
- less <file> 交互式打开文件,不会因为文件过大而加载缓慢
- 上下移动:j/k
- 前后翻页:Ctrl+f Ctrl+b
- 搜索:/ 搜索下一个、 上一个:n N

vim
- 查看、 搜索和less类似,如果文件过大,打开会缓慢
- 删除行:dd d{n}j/k
- 替换::%s/<old>/<new>/g
- 模式切换:i ES

文件移动、复制与删除

mv
- mv <old_path> <new_path> 移动文件

cp/scp
- cp <old_path> <new_path> 复制文件
- scp <old_path> user@host:<new_path> 复制远程文件
- scp user@host:<old_path> <new_path>

rm
- rm <file> 删除文件
- rm –fr <directory> 递归删除目录,且不确认

文件查找

find
- find . –name config.xml 查找当前目录及子目录下名为config.xml的文件
- find . –name “*.xml” 查找当前目录及子目录下后缀为.xml的文件
- find . –newer <file> 查找当前目录下mtime比file文件新的文件
- find . –mtime -7 查找7天内修改的文件

atime/mtime/ctime
- stat <file> 查看文件属性
- atime 文件访问时间
- mtime 文件内容修改时间
- ctime 文件内容或inode修改时间

文本过滤

grep
- grep -F string file 打印字符串匹配行
- grep -E regex file 打印正则匹配行
- grep -A/-B N string file 打印匹配行以及后/前N行
- grep string * -r 当前目录递归搜索包含string的文件

文本排序、 去重、 计数

sort
- sort <file> 排序<file>文件内容
- sort -rn <file> 按数字、 倒序排序<file>文件内容
- sort -k1,1 -t “,” <file> 按第一列排序<file>文件内容,逗号为列之间的

分隔符

uniq
- uniq <file> 过滤掉文件中相同的相邻行
- uniq -c <file> 过滤掉文件中相同的相邻行,并显示相同的相邻行数量

wc
- wc <file> 统计文件行数、 单词数、 字符数

文本处理

sed
- sed –i ‘s/<old>/<new>/g’ <file> 文本替换
- sed -n -r ‘s/ip=(.*)/\1/p’ <file> 文本提取
- 更多高级用法参考:http://coolshell.cn/articles/9104.html

awk
- ps –ef|grep <command>|awk ‘{print $2}’ 打印command进程号
- awk ‘{sum+=$1}END{print sum}’ <file> 统计file文件第一列的和
- 更多高级用法:http://coolshell.cn/articles/9070.html

磁盘大小

df
- df -h 查看磁盘大小、 使用量
- -h 表示human readable,会把大小自动换算成合适的单位(M G)

du
- du –sh <file> 统计文件或目录大小
- du –sh * 统计当前目录下所有文件或目录大小
常见问题:删除文件磁盘空间没有恢复
- 删除的文件正被某些进程打开,不会真正删除
- lsof | grep file

日期和随机数

date
- date +%Y%m%d%H%M%S 按年月日时分秒的格式打印当前时间

$RANDOM
- echo $RANDOM 打印随机数

进程查看与终止

ps
- ps -ef 查看所有进程
- ps -elf

kill/killall
- kill <pid> 杀死指定进程号的进程
- killall process_name 杀死指定进程名的进程

系统资源查看

top
- CPU: us, sy, id CPU用户态、 内核态和空闲比例
- Load avg 系统load值
sar
- sar –n DEV <interval> [<times>] 查看网卡流量
- Ibytes/s 表示网卡接收流量
- Obytes/s 表示网卡发送流量

netstat
- netstat –anp 查看网络连接

管道与命令组合

|
- ps –ef|grep <command>|awk ‘{print $1}’ 前一条命令输出作为后一条命令输入

xargs
- find . –mtime +7|xargs rm –f 删除最后修改时间7天前的文件
- grep “1” * -r -H|awk -F‘:’ ‘{print $1}’|sort|uniq|xargs rm -f 删除包含字符串1的文件

Bash编程基本语法

变量定义和求值

ssh_home_dir="$HOME/.ssh"
tmp_file="$ssh_home_dir/.tmp_authorized_keys"
dollar_var='$ssh_home_dir/.tmp_authorized_keys'

函数定义与调用

function help
{
    echo "Usage: $0 host user password [port, default 22]"
    return 1
}

help
echo $?

变量计算

数学计算

a=1
let b=a+1
c=$((a+1))
echo "$b, $c"

截取和替换

host='dx-ep-test06.dx.sankuai.com'
echo "${host#*.}"
echo "${host##*.}"
echo "${host%.*.}"
echo "${host%%.*.}"
echo "${host/test/ptest}"

以上代码输出结果为:

dx.sankuai.com
com
dx-ep-test06.dx.sankuai.com
dx-ep-test06.dx.sankuai.com
dx-ep-ptest06.dx.sankuai.com

分支和循环

if分支

if [ -f file ];then
    rm -f file
    touch file
else
    touch file
fi

for循环

for((i=0;i<20;i++))
do
    echo $i
done

while循环

while read line
do
    echo $line
done < file

课程笔记

ps -ef 查看所有的进程
ps -ef | grep Chrome 查看Chrome浏览器的进程
ps -ef | grep Chrome | wc -l 统计多少行,多少个Chrome进程
ps -ef | grep Chrome | grep -v grep | wc -l  去除grep自己的一条,不包含字符串“grep”

df -h 查看磁盘使用情况
df -h | awk '{print $1}'  打印出第一列的内容
awk默认以空格为分隔符
df -h | head -2 打印出前两行
df -h | head -2 | tail -1 打印出前两行中的最后一行
df -h | head -3 | awk '{print $5}'  打印出前三行的第五列

top 查看系统资源使用情况
top -l 1 只看第一次的结果
top -l 1 | head -10 查看第一次的结果的前10行

测试数据文件data
8,12
11,9
10,10
7,13
19,1
8,12
19,1
3,17
6,14
14,6
18,2
19,1
19,1
16,4
16,4
12,8
4,16
11,9
7,13
17,3
16,4
14,6
5,15
8,12
7,13
13,7
11,9
16,4
17,3
17,3

求第一列的和

practice_awk awk -F "," '{sum+=$1;print sum}' data  默认每一行都执行
awk -F "," '{sum+=$1}END{print sum}' data 最后一行才执行print

awk -F "," '{sum+=$2}END{print sum/NR}' data 求第二列的平均值,NR为文件的行数

awk -F "," '{if($1>10)sum+=$2}END{print sum}' data 第一列的值大于10时,累加第二列的值

生成测试文件脚本

>data
for((i=1;i<=100;i++))
do
    echo $i {0..10} >> data
done

#-i 修改当前文件
#s 替换
#e 备份
sed -i -e 's/0/x/' data  #将每行的第一个0替换成x
cp data-E data #将data-E中的内容copy到data中
sed -i -E 's/0/x/g' data #将data中所有的0替换成x(g全局 global)
sed -i -E '1,10s/0/x/g' data #将1-10行中的0替换成x
sed -i -E '1,/aa/s/0/x/g' data  #将第一行到aa这一行的0替换成x

sed -i -E '1,10d' data   #删除前面10行

一下例子中的build.xml数据格式如下

<build>
  <id>1</id>
  <contacts>赵四</contacts>
  <mis>si.zhao</mis>
  <status>aborted</status>
  <startTime>2016-05-03 15:55:06</startTime>
  <endTime>2016-05-03 15:55:38</endTime>
  <job>job0000007935</job>
</build>
find . -name build.xml  #找出当前目录下所有的build.xml
find . -name build.xml|xargs cat   #xargs将前面的作为参数传给后面的命令
find . -name build.xml|xargs cat|grep mis #提取出其中mis这一行
find . -name build.xml|xargs cat|grep mis|awk -F '[<>]' '{print $3}'   #-F指定分隔符为<或> 打印出第3列

find . -name build.xml|xargs cat|grep mis|awk -F '[<>]' '{print $3}'|sort|uniq #按字符串排序 去重
find . -name build.xml|xargs cat|grep mis|awk -F '[<>]' '{print $3}'|sort|uniq -c  #显示出每一个有多少行
find . -name build.xml|xargs cat|grep mis|awk -F '[<>]' '{print $3}'|sort|uniq -c|sort -k1,1    #按第一列排序(从第1列开始,第1列结束)默认由低到高排序
find . -name build.xml|xargs cat|grep mis|awk -F '[<>]' '{print $3}'|sort|uniq -c|sort -k1,1 -r #由高到低排序
sort#默认按字符串排序,sort -n 按数字排序

打印30个随机数

for((i=0;i<30;i++))
do
    echo $RANDOM
done

赋值操作

for((i=0;i<30;i++))
do
    a=$(($RANDOM%20))
    b=$((19-$a))
    echo $a,$b
done
#sh t3.sh > 1 将命令的内容输出到文件中

suffix=$(date +%Y%m%d%H%M%S) #将命令的输出提取到变量中
#suffix=20161206174216
echo $suffix
fn=data.$suffix

#如果文件存在则删除
if [ -f $fn ];then
    rm -f $fn
fi 

for((i=0;i<30;i++))
do
    a=$(($RANDOM%20))
    b=$((19-$a))
    echo $a,$b >> $fn  #以追加方式写入文件
done



相关推荐

感谢关注 Ithao123Linux频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!

关键词:

文章点评:


精选专题

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。