Linux
一. 为什么学习 Linux 命令?
大型企业高并发的 Java 应用程序都是部署在大型服务器之上的,而服务器的操作系统一般是使用高性能的 Linux(或Unix)的操作系统,不是 Windows 操作系统,所以编程人员需要在服务器上部署程序,就需要与服务器交互;Linux 命令成为程序员一个很必要的技能
二. 在 Linux 系统干什么事?
- 部署 Web,C++等应用程序
- 定时调度:脚本(脚本中调度程序)
- 与数据库交互统计数据:日统计、月统计
- 错误数据修复
- 用户个性化数据统计
- 数据稽核预警
- 基于 Linux 平台的数据计算:例如一个月的全省联通用户的详单金额统计
- ......
三. Linux 介绍
大型服务器的的主机操作系统一般分为 Linux 和 Unix,IBM 主机一般安装 Linux 系统,而 HP主机一般安装 Unix 系统,两种操作系统的命令有细微的差异,但 Linux 是建立在 Unix 之上的,所以 Linux 命令适用 Unix,并且 Linux 命令严格区分大小写
举例:
联通核心系统
11台专用 Web 服务器,负载均衡;8台应用服务器
http://130.75.1.10:8080/CRM_WEB
http://192.168.3.249:8080/CRM_WEB
http://130.75.1.82:8080/CRM_WEB
BEA:WebLogic
IBM:WebSphere
四. Linux 命令
命令格式:
命令名 [选项] [命令参数];
命令,选项,参数三者用空格隔开;
命令名必须得有,选项和命令参数可以没有;
命令 | 描述 |
---|---|
man ls | 帮助命令:查找命令的使用方法(查看 ls 命令的使用) |
cd | 改变路径(Change Director):注意相对路径和绝对路径 /root/user/uuu ../../../../user/io/ |
cd - | 快速回到之前的路径(后退) |
pwd | 当前所在目录 |
ls | (List): 查看当前目录下的文件及文件夹 |
ls -a | 显示隐藏文件 |
ls -l | 以长格式的形式查看当前目录下所有可见文件的详细属性 |
ls -lt | 以更新时间为顺序使用长格式列出信息 |
ls -ltr | 对输出文件进行各种排序 |
ls -p | 只给目录添加/ |
ls -lt|more | 空格键:一屏一屏翻页;Enter:一行一行翻页 |
创建相关命令:
命令 | 描述 |
---|---|
touch 文件名 | 创建一个空文件(很少用) |
> 文件名 | 重定向方式创建一个文件,如文件没有则创建,有则清空追加 |
cat grf.sh > 文件名 | 创建一个文件 |
>> 文件名 | 重定向方式创建一个文件(StringBuffer.append() ) |
cat grf.sh >> 文件名 | 重定向方式创建一个文件 |
mkdir 文件夹名称 | 创建一个文件夹 |
vi | 编辑器命令创建文件 |
复制相关命令:
命令 | 描述 |
---|---|
cp 文件名1 文件名2 | 复制文件或目录 |
cp -r 文件夹1 文件夹2 | 复制文件或文件夹都可以 |
mv 对象1 对象2 | 剪切,重命名且能操作文件夹 |
删除相关命令:
命令 | 描述 |
---|---|
rm 文件名 | 删除文件 |
rm -r 文件夹名称 | 删除文件夹 |
rm -rf 文件夹 | 文件或文件夹都可以删除 |
查看相关命令:
命令 | 描述 |
---|---|
cat 文件名 | 显示文件内容 |
more 文件名 | 以一页一页的形式显示,逐页阅读 |
cat 文件名|more | 回车键(一行一行查看);空格键(一版一版查看) |
head -5 文件名 | 查看文件前五行 |
cat 文件名|head -5 | 查询前五行 |
tail -5 * | 查看尾五行 |
grep | 匹配搜索 |
文件名|grep "搜索值" | 过滤搜索 |
命令汇总:
命令 | 描述 |
---|---|
pwd | 自己所在的位置 |
mkdir | 创建文件夹 |
su | 切换用户 |
su - root | 切换到 root 用户,向上切换需要密码(鉴权),由高级权限用户切换到低级用户无需鉴权 |
whoami | 当前用户 |
exit | 退出到上一次的用户 |
touch a | 创建一个空文件夹 |
cp | 拷贝文件 |
clear | 清屏 |
mv | 移动,源文件会没有了 |
gzip 文件名 文件名.gz | 压缩文件 |
gunzip 文件名.gz | 解压缩文件 |
tar -cvf 文件名.tar | 打包一个 tar 文件 |
gzip 文件名.tar | 压缩 tar 文件 |
tar -czvf 文件名.tar | 打包压缩一个 tar |
gunzip 文件名.tar.gz | 解压缩 |
cat 文件名.tar|tar -xvf - | 显示 tar 文件内容 |
cat 文件名.tar.gz|tar -xzvf - | 显示 gzip 压缩包文件内容 |
zcat 文件名.tar.gz|tar -xvf - | 显示压缩包文件内容 |
rm | 文件删除 |
rm -rf | 删除文件或文件夹(慎用) |
grep -l 关键字 | 只列出相关的文件名 |
grep -n 关键字 | 列举出文件名,以及文件中出现的那行代码 |
VI 编辑器命令:
VI 进来默认是命令行状态
状态的转变通过命令实现(命令行状态,编辑状态)
操作指令 | 描述 |
---|---|
ESC 键 | 功能切换键,从编辑状态回到命令行状态 |
h,l,k,j 键 | 左右上下 |
i | 在前面追加 |
shift + i | 回到当前行首列 |
a | 在后面追加 |
shift + a | 回到当前行尾列 |
x | 删除一个字母(当前光标处的内容) |
r | 替换当前字母 |
cw | 替换一串字母,以空格为分隔(change word) |
yy | 复制 |
p | 黏贴 |
nyy p | 复制n行,n代表数字 |
dd | 删除1行 |
ndd | 删除n行,n代表数字 |
o | 当前行下面加一空行 |
shift + o | 当前行上面加一空行 |
shift + j | 行合并 |
shift + d | 删除当前光标到行尾的所有内容 |
ctrl + g | 得到当前文本的总行数 |
shift + g | 快速回到最后一行 |
:1 | 快速回到第一行 |
:set number | 给文本一个虚拟的行号 |
:wq! | 保存并退出 |
:q! | 退出不保存 |
:w! | 保存而不退出 |
/字符串 | 查找字符串 |
:%s/目标串/结果串/g | 替换字符串 |
:%s/被替换/替换/g | 全局替换,将String“被替换”替换为“替换” |
:%s/^#//g | 字符串替换 |
:r bb.txt | 读取 bb.txt 文件进来 |
> | 定向覆盖 |
>> | 重定向追加 |
Shell 脚本编程
文件名以 .sh 作为结尾,使用 VI 编辑器命令编写本质上是许多 Linux 命令的集合
Shell 脚本完成某项功能运行.sh脚本名将Shell 脚本持久化到磁盘中
date +%Y
date +%m%d%H%M%s
for cityCode in 1 2 3
do
echo $cityCode
done
# ^表示开头开头替换,#表示全局
:%s/^/#/g
cat txt|grep -v ^#|while read city
do
echo ${city}
done
cat 1.txt|awk '{a+=$2}END{printf "%10.2f\n",a}'
# 默认分隔符:空格
cat txt|awk '{print 50}'
cat txt|awk 'FS=""{print $0}'
cat txt|
# 指定分隔符
cat 1.txt|awk 'FS="|"{print $1}'
cat txt|awk '{sum+=$2}END{printf "%10.2f\n",sum}'
# 查看后台运行进程
ps -ef
ps -ef|grep vi
kill -9 3947
ps -ef|grep 文件名|grep -v grep|awk '{print "kill -9",$2}' |sh
ps -ef|grep 文件名|grep -v grep|awk '{print $2}'|xargs kill -9
# 排序,剔重
cat a.txt|sort -u
diff txt1 txt2
查找文件,且文件的全路径名称中含有关键字 xxx yyy
find . -type f|grep xxx|grep yyy
查找文件夹,且文件夹的全路径名称中含有关键字 xxx yyy
find . -type d|grep xxx|grep yyy
在所有的日志文件中定位在哪些日志文件中出现过关键字
grep -l "18679155625" *
定位日志在文件中哪一行出现过关键字
grep - n "18679155625" *
grep -l "18679155625" *|wc -l (L)
重中之重
压缩
gzip 文件名 ---> 文件名.gz
gunzip 文件名.gz ---> 文件名
第一种方法:先 tar 包,后压缩
tar -cvf a.tar a ---> a.tar
gzip a.tar ---> a.tar.gz
# 先解压缩,再解包
gunzip a.tar.gz ---> a.tar
# 还原成功
cat a.tar|tar -xvf - ---> a
第二种方法: 一步到位
tar -czvf a.tar.gz
cat a.tar.gz|tar -xzvf -
压缩还有一种:只支撑文件压缩(unix支撑)
compress a.txt ---> a.txt.Z
uncompress a.txt.Z ---> a.txt
我也不清楚下面写的都是啥了
linux操作系统的注释:`#`
ls a[0-1]文件名.txt
# 模式转换后,命令将来可以调用
sh ksh
set -o vi
esc /关键字 回车 n
# 压缩
compress a.txt a.txt.Z
# 解压缩
uncompress
# Linux 系统中定时调度的一个配置文件
crontab
# 查看使用(看看而已)
crontab -l
# 编辑使用(编辑而已)慎重
crontab -e
# 删除使用(你猜)
crontab -r drop
# 杀进程
ps -ef|grep vi|grep -v grep|
awk '{print $2}'|xargs kill -9
# 后台运行
nohup sh 文件名.sh &
# 自动调度
crontab
# 看俺自己
crontab -l
# 编辑
crontab -e
# 查看内存
df -h
vi function.sh
# 函数
get() {
echo ok
}
get
:wq!
sh function.sh
# 文件传输,传输接收
get() {
f
tp 192.168.1.1 <<!
user scott admin
# 异地目录
cd /others/file
# 本地目录
lcd /local/file
# 传输编码方式
bin
prompt
get 文件名.txt
bye
!
}
# 批量接受
mget(){
f
tp 192.168.1.1 <<!
user scott admin
# 异地目录
cd /others/file
# 本地目录
lcd /local/file
# 传输编码方式
bin
prompt
mget 文件名*.txt
bye
!
}
# 单独接收和传输需要 get 和 put
# 批量接收和传输只需要 mget 和 mput 以及在文件名后面加上*.txt就可以了
get_ftp1() {
ftp -n 192.168.1.888 <<!
use username password
# 异地目录
cd
ls -lt
bye
!
}
get_ftp2(){
ftp -n 192.168.1.888 <<!
use username password
# 本地目录
lcd
# 异地目录
cd
prompt
mget ${file_name}
bye
!
}
get_ftp3(){
ftp -n 192.168.1.888 <<!
use username password
# 本地目录
lcd
# 异地目录
cd
prompt
mput 20150311.txt
bye
!
}
get_ftp4(){
sqlplus username/password@oracl <<!
select 'grf',to_char(sysdate,'yyyymmdd') from dual
/
bye
!
}
get_ftp1|awk '{print $7}'|while read file_name
do
get_ftp2
done
get_ftp4|grep grf|awk '{print $2}'|while read stat_date
do
echo ${stat_date}
done
vi test.sh
cat txt1|while read stat_date
do
cat txt2|while read city
do
echo $stat_date $city
done
done
report_day_t
stat_date 20150809
# 调用存储过程
delete report_day_t where stat_date='20150809';
insert into report_day_t select * from xxx;
--- 2小时
ps -ef|grep list1.sh
# 大于
gt greater than
# 大于等于
ge greater equals
lt less than
le
eq
# 开始写 sh
vi jk.sh
echo success >> jk.sh
ls -lt
# 给用户赋权
chomod 777 kj.sh
sh kj.sh
ls -lt
crontab -e
while sleep 3
> do
> date
> done
find /|grep
# 挂 crontab 的自动调度
cat kj*
cd /home/xiqingbo
echo success >>xqb.log
crontab -1
55 15 * * * /home/xiqingbo/kj.sh
vi txt
0791
0792
0793
:wq!
vi main.sh
cd /home/ztkj
cat txt|while read city
do
nohup sh list.sh ${city} &
done
:wq!
vi list.sh
city=$1
echo ${city} begin
sleep 5
echo $city end
:wq!
sh main.sh
vi list.sh
city=$1
echo ${city} begin >>grf.log
sleep 180
echo $city end >> grf.log
# 实时监控日志动态
tail -f grf.log
五. 你是否使用过 UNIX/LINUX 系统,用来做什么?
- Shell 脚本开发,压缩备份
- 检查系统磁盘的使用率
df -h 85%
预警 - 检查系统 CPU 内存以及 IO 的使用率:
top
命令 - 文件的上传和下载
- 编写 Shell 脚本,调用数据库存储过程实现日月统计,并且挂载到 crontab 中实现定时调度
本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/system-01.html