Linux常用命令和Shell编程基础
目录相关
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
Linux常用命令和Shell编程基础的更多相关文章
- Linux常用命令学习5---(Shell编程)
1.Shell概述 Shell是一个命令行解释器.它为用户提供了一个向Linux内核发送请求一以便运行程序的界面系统级程序,用户可以用 Shell来启动.挂起.停止甚至是编写一些程序 Sh ...
- Linux(五)shell编程基础
一.Linux shell简介 1.shell概述 Shell 是用户与内核进行交互操作的一种接口,目前最流行的 Shell 称为 bash Shell Shell 是一门编程语言& ...
- Linux常用命令及Shell的简单介绍
一.linux命令 1.查看指令的参数搭配: man 指令名称 2.基础指令 ls 列出当前目录下的所有文档的名称(文档指的是文件和文件夹) 常用参数搭配: ls -l 列出文档详细信息 l ...
- Linux常用命令及shell技巧
这里列出一些个人在工作中常使用的各种linux命令,每一个不详细讲参数,只写经常用的参数.希望快速获得在linux命令行工作的能力的朋友可以看看.本人一直觉的,不使用linux 图形界面,以xshel ...
- Linux常用命令及shell脚本
一. 用户管理(添加用户.切换用户.删除用户) ~ ...
- linux常用命令(shell脚本常用命令)(grep、cut、sort、uniq、seq、tr、basename、dirname)
本章命令: 1 2 3 4 5 6 grep cut sort uniq seq tr 1.grep 作用:过滤文本内容 选项 描述 -E :--extended--regexp 模式是扩展正则表达式 ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...
- Linux常用命令 - find命令基础使用(重点)
1篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 首先,先 ...
随机推荐
- 关于在安装MySQL时报错"本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止"的解决方法
首先将你下载的MySQL安装或者解压(对应安装版和解压版),下载地址http://dev.mysql.com/downloads/mysql/ 然后复制你安装目录中的my-default.ini,更改 ...
- [Erlang 0115] 2014值得期待的Erlang两本新书
在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 <The Erlang Runtime System>,其作者happi在2013年3月份公布了这本书的写作 ...
- MySQL解压版配置步骤
mysql-5.7.14-winx64\bin配置到Path中 在解压路径下复制my-default.ini,修改名称为my.ini 在my.ini添加如下 [mysqld] basedir=C:\\ ...
- HttpsURLConnection 利用keepAlive特性进行优化一例
最近项目中,遇到一个报错: java.lang.OutOfMemoryError: unable to create new native thread 报错的场景是:一个消息的群发,群里总共有50多 ...
- THINKPHP源码学习--------文件上传类
TP图片上传类的理解 在做自己项目上传图片的时候一直都有用到TP的上传图片类,所以要进入源码探索一下. 文件目录:./THinkPHP/Library/Think/Upload.class.php n ...
- 【转】前端工程师必须了解的 谷歌 HTML/CSS 规范
背景 这篇文章定义了 HTML 和 CSS 的格式和代码规范,旨在提高代码质量和协作效率. 通用样式规范 协议 省略图片.样式.脚本以及其他媒体文件 URL 的协议部分(http:,https:),除 ...
- ubuntu-Linux系统读取USB摄像头数据(uvc)
这几天在做小车的过程中,需要用到图像采集.我想现在用的摄像头是UVC免驱的.根据国嵌的教程中有一个gspca摄像头的程序.我发现把gspca的采集程序用到uvc上时,在显示图像的时候提示没有huffm ...
- MarkDown+LaTex 数学内容编辑样例收集
$\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...
- BZOJ 4614 【Wf2016】 Oil
题目链接:Oil 感觉同时几线作战有点吃不消啊-- 这道题有一个显然的结论,那就是最优的直线一定过某条线段的端点. 仔细想想很有道理.如果最终的直线没有过线段的端点的话,那么这条直线就一定可以平移,直 ...
- [LeetCode] Add Binary 二进制数相加
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...