0、打包压缩与解压、vim
1.gzip命令
-c 将压缩数据输出到标准输出上
-d 解压缩
-t 检验压缩文件的一致性
-v 显示压缩比
-r 目录下的文件也压缩
-l 压缩比
压缩
gzip -v install.log 不保留原文件
gzip -c install.log>install.log.gz保留原文件
解压缩
gzip -d install.log.gz 不保留原文件
gunzip -c install.log.gz>install.log保留
2.bzip2命令
-c 将压缩数据输出到标准输出上
-d 解压缩
-k 保留原文件
-z 压缩的参数
-v 显示压缩比
-r 目录下的文件也压缩
-(1..9) 计算压缩比的参数,9最佳,1最快
压缩
bzip2 -z install.log 不保留原文件
bzip2 -zk install.log 保留原文件
解压缩
bzip2 -d install.log.bz2 不保留原文件
bzip2 -dk install.log.bz2 保留
3.tar命令
-c 建立打包文件
-x 解打包或解压缩
-t 查看打包文件的内容含那些文件
-j 通过bzip2进行压缩/解压缩
-z 通过gzip进行压缩/解压缩
-v 在压缩/解压缩时将正在处理的文件名显示出来
-f 后跟处理后文件的全名称(路径+文件名+后缀名)
-C 在特定的目录下解压
-p 压缩前备份(原本权限与属性)
--exclude=FILE 压缩时不要讲哪些文件打包
01-.tar格式
解包:[*******]$ tar xvf FileName.tar
打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)
02-.gz格式
解压1:[*******]$ gunzip FileName.gz
解压2:[*******]$ gzip -d FileName.gz
压 缩:[*******]$ gzip FileName
03-.tar.gz格式
解压:[*******]$ tar zxvf FileName.tar.gz
压缩:[*******]$ tar zcvf FileName.tar.gz DirName
04-.bz2格式
解压1:[*******]$ bzip2 -d FileName.bz2
解压2:[*******]$ bunzip2 FileName.bz2
压 缩: [*******]$ bzip2 -z FileName
05-.tar.bz2格式
解压:[*******]$ tar jxvf FileName.tar.bz2
压缩:[*******]$ tar jcvf FileName.tar.bz2 DirName
06-.bz格式
解压1:[*******]$ bzip2 -d FileName.bz
解压2:[*******]$ bunzip2 FileName.bz
07-.tar.bz格式
解压:[*******]$ tar jxvf FileName.tar.bz
08-.Z格式
解压:[*******]$ uncompress FileName.Z
压缩:[*******]$ compress FileName
09-.tar.Z格式
解压:[*******]$ tar Zxvf FileName.tar.Z
压缩:[*******]$ tar Zcvf FileName.tar.Z DirName
10-.tgz格式
解压:[*******]$ tar zxvf FileName.tgz
11-.tar.tgz格式
解压:[*******]$ tar zxvf FileName.tar.tgz
压缩:[*******]$ tar zcvf FileName.tar.tgz FileName
12-.zip格式
解压:[*******]$ unzip FileName.zip
压缩:[*******]$ zip FileName.zip DirName
13-.lha格式
解压:[*******]$ lha -e FileName.lha
压缩:[*******]$ lha -a FileName.lha FileName
14-.rar格式
解压:[*******]$ rar a FileName.rar
压缩:[*******]$ rar e FileName.rar
4.vim命令
1)Vim的三种模式
一般模式
编辑模式:按下i、I、o、O、a、A、r、R等任何一个字母后进入编辑模式
该模式下可以输入文件内容,按下<Esc>返回一般模式
命令模式:在一般模式当中,输入:/?三个字符中的任何一个按钮,就可以将光标移动到最下面那一行
2)一般模式快捷键
移动光标:
[Ctrl]+[f]:屏幕向下移动一页 !!
[Ctrl]+[b]:屏幕向上移动一页 !!
0或[Home]:移动到此行最前面字符处 !!
$或[End]:移到光标所在行的行尾 !!
h或 光标左移一个字符。如果是20h,表示左移20个字符
j或 光标下移一个字符 同上
k或 光标上移一个字符 同上
l或 光标右移一个字符 同上
H 光标移到当前屏幕最上方行的第一个字符!!
M光标移到当前屏幕中间行的第一个字符
L光标移动到当前屏幕最下方行第一个字符!!
G移到此文件最后一行 !!!
nG移到第n行
gg相当于1G,即移到第一行 !!!
n[Enter]光标下移n行
查找:
/word向下查找单词“word” !!
?word向上查找单词“word” !!
n表示重复前一个查找操作
N与n相反(反向查找)
替换:
:s/word1/word2/g 在当前行将word1替换成word2 !!!
:%s/word1/word2/g 在当前文件将word1替换成word2 !!!
:n1,n2s/word1/word2/g在n1到n2行查找word1替换成word2(n1、n2为数字)
:1,$ s/word1/word2/g从第一行到最后一行查找word1替换成word2
:%s/word1/word2/gc同上,在替换前confirm是否替换 !!!
删除:
x向后删除一个字符
nx向后删除n个字符(n为数字)
X向前删除一个字符
dd删除光标所在行 !!!
ndd删除光标所在行以下n行(n为数字,包含当前行在内)
d1G删除光标所在行到第一行所有数据(包括所在的行)
dG删除光标所在行到最后一行 !!
d$删除光标所在处到同行最后一个字符 !!
d0删除光标所在处到同行第一个字符。!
复制:
yy复制光标所在行 !!
nyy复制光标所在向下n行(n为数字)
y1G复制光标所在行到第一行所有数据
yG复制光标所在行到最后一行所有数据
y$复制光标所在处到同行最后一个字符
y0复制光标所在处到同行第一个字符
p将已复制的数据粘贴到光标所在下一行
P将已复制的数据粘贴到光标所在上一行
u复原前一个操作(类似于windows中的ctrl+z)!!!
3)一般模式->编辑模式的转换
i从光标所在处插入(!!!)
I从所在行第一个非空白字符处插入(!)
a从光标所在下一个字符处插入
A从光标所在行最后一个字符处插入
o在光标所在处下一行插入新的一行(!)
O在光标所在处上一行插入新的一行
r替换光标所在处字符一次
R一直替换光标所在处文字直到按下Esc(!!!)
4)命令模式快捷键
:w [filename] 另存为filename
:r [filename] 读取filename指定文件中的内容到光标所在的行
:n1,n2 w [filename] 将n1到n2行另存为filename
:! command 临时切换到命令行模式下执行command命令
:wq 保存后离开
:q! 不保存离开
:set nu 显示行号
:set nonu 取消显示行号
一、shell
1.echo命令 变量读取
echo $变量名 或 echo ${变量名}
变量设置:
变量名=值
变量设置规则:
1)变量与变量内容以一个等号“=”连接(name=value)
2)等号两边不能直接接空格符;
3)变量名称只能是英文字母、数字、下划线,但开头不能是数字;
4)变量内容若有空格符可使用双引号或单引号将变量内容结合起来;
|-双引号中的特殊字符保有原本的特性
5)可用转义字符“\”将特殊符号
6)变量内容由其他命令提供,使用$(其他命令),如:version=$(uname)
或 通过反引号 version=`uname`
7)变量增加额外内容,如:version=$version-$(uname –p)
8)取消变量的定义:unset 变量名
2.env命令 环境变量
env|more:查看环境变量
3.数据重定向
数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方,例如传输到文件或是其他命令
标准输入(stdin):编号为0
标准输出(stdout):编号为1
标准错误输出(stderr):编号为2
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
举例:将ls的输出重定向到ls.log当中去
ll 1> ls.log
cat ls.log
命令执行判断
$?
4.|命令 管道命令
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。
连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推
5.find命令 搜索命令
格式:find [path...] [option]
path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
options:
-print:将匹配的文件输出
-size:匹配文件大小 find ./ -size 0 显示大小为0的文件
-name:按文件名查找
-perm:按文件权限查找 find . -perm 755 -print
-user:按文件所有者查找 find ~ -user root -print
-mtime -n/+n:按修改时间查找,-n修改时间距现在n天以内,+n修改时间n天前
-group:按所属组查找
-nogroup:按没有所属组查找
-type:按类型查找
b:块设备的文件 find /etc -type b -print
d:目录
c:字符设备的文件
p:管道文件
l:链接文件
f:普通文件
-size n:[c] 查找长度为n块的文件,带c表示长度以字节为单位
find . -size +100c -print在当前目录下查找长度大于100字节的文件
6.sed命令 非交互式文本处理工具
默认情况下,所有的输出行都被打印到屏幕上
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:
sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间)
然后处理临时缓冲区中的行,完成后把该行发送到屏幕上
sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示
处理完输入文件的最后一行后,sed便结束运行
sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件
sed [option] “[action]” [filename]
option:
h或—help:显示帮助
n:仅显示script处理后的结果
V或—version:显示版本信息
e:允许对输入数据应用多条sed命令进行编辑。
f:直接将sed的动作写在一个文件内,-f filename则可以运行,filename内的 sed动作
action:
s:字符串替换
i:插入insert
d:删除delete
a:追加append
c:替换
p:打印指定的输出行
/g:每行
例:
sed "s/teduhadoop/hadoop/g" demo.txt
把demo.txt中所有行中的"teduhadoop"替换为"hadoop"并显示出来,原文不变
sed "s/teduhadoop/hadoop/g" demo.txt>demo2.txt 替换后的写到demo2.txt中
sed "3s/teduhadoop/hadoop/g" demo.txt只替换第3行
sed "1,2s/teduhadoop/hadoop/g" demo.txt替换第1到第2行的文本
sed "s/l/L/2" demo.txt 替换每行上的第二个l为L
sed "s/l/L/2g" demo.txt 替换每行上的第二个及以后的l为L
多个匹配
sed 's/l/L/1;s/o/O/3g' demo.txt 或
sed -e 's/l/L/1' -e 's/o/O/3g' demo.txt
sed -i "s/teduhadoop/hadoop/g" demo.txt
把demo.txt中所有行中的"teduhadoop"修改为"hadoop"不显示出来,原文改变
sed "1 i aaa" demo.txt 在第一行前插入一行aaa输出,原文不变
sed "1 a bbb" demo.txt 在第一行后追加一行bbb输出,原文不变
sed "/hdfs/d" demo.txt 删除可以匹配"hdfs"的行输出,原文不变
7.grep命令 匹配
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)
一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
grep [OPTIONS] pattern [FILE]
-n:同时显示匹配行上下的n行 如:grep -2 pattern filename同时显示匹配行的上下2行
-b,--byte-offset 打印匹配行前面打印该行所在的块号码
-c,--count 只打印匹配的行数,不显示匹配的内容。
-f File,--file=File 从文件中提取模板,空文件中包含0个模板,所以什么都不匹配
-h,--no-filename 当搜索多个文件时,不显示匹配文件名前缀
-i,--ignore-case 忽略大小写差别
-q,--quiet 取消显示,只返回退出状态,0则表示找到了匹配的行
-n,--line-number 在匹配的行前面打印行号
-v,--revert-match 反检索,只显示不匹配的行
8.tail命令
tail [-F] [-c Number|-n Number|-m Number|-b Number|-k Number] [File]
-F 监视File文件增长
-c Number 从number字节位置读取指定文件(不包含中文)
-n Number 行
-m Number 从number字节位置读取指定文件(包含中文)
-b Number 从Number表示的512字节块位置读取指定文件
-k Number 从Number表示的1KB块位置读取指定文件
当涉及到number,如果不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部开始计算
9.sort命令 排序
-n 按数值排序 sort -n filename
-u 不出现重复的行
-t 指定分段的符号
-k 指定的第几段 sort -t "." -k 4 demo
-r 逆向排序
10.cut命令 剪切数据
-b 字节 cut -b 2/1-3/4,7/-5/5- demo
-c 字符 cut -c 2/1-3/4,7/-5/5- demo
-f 提取第几列
-d 按指定分隔符分割列 cut -d . -f 2 demo
11.history命令 历史
history 显示历史命令
history 5 显示执行过的上5条命令
history -c 清空历史命令
二.shell script脚本
1.执行脚本有以下三种方式:
1、直接执行(shell.sh文件必须具备可读与可执行 (rx)的权限):
绝对路径:运行/home/shell.sh 来执行指令
相对路径:cd到/home/ ,使用/shell.sh执行
2、source 执行 source shell.sh
3、bash执行:
bash shell.sh
sh shell.sh
修改权限: chmod 755 shell.sh
2.数值运算:
简单的加减乘除 格式:$((运算内容))
#!/bin/bash
read -p "please input first number:" num1
read -p "please input second number:" num2
echo "$num1 * $num2 = $(($num1*$num2))"
exit 0
3.test判断命令
1)判断文件类型 案例:test • -e • demo.txt
-e 该文件是否存在!!!
-f 该文件是否存在且为file类型!!!
-d 该文件是否存在且为directory类型!!!
-b 该文件是否存在且为一个 block device装置?
-c 该文件是否存在且为一个 character device 装置?
-S 该文件是否存在且为一个 Socket 文件?
-p 该文件是否存在且为一个 FIFO (pipe) 文件?
-L 该文件是否存在且为一个链接文件?
2)判断文件权限
-r 检查该文件是否存在且具有可读的权限?!!
-w 检查该文件是否存在且具有可写的权限?!!
-x 检查该文件是否存在且具有可执行的权限?!!
-s 检查该文件是否存在且为非空文件?!!
-u 检查该文件名是否存在且具有SUID的属性?
-g 检查该文件名是否存在且具有SGID的属性?
3)判断字符串
test -z string 判断为空字符串,则为true
test -n string 判断为空,则为false
test str1 = str2 或==,若等则返回true
test str1 != str2
4)两个文件比较 test file1 -nt file2
-nt 判断file1 是否比 file2 新
-ot 判断file1 是否比 file2 旧
-ef 判断两个文件是否为同一个文件
5)判断符号[](基本跟test相同) !!!
[ ] 脚本范例 (注意[]和脚本之间保留空格)
==和!=用于比较字符串;
整数比较只能使用-eq,-gt,-ge,-lt,-le这种形式
[ ]中的逻辑与和逻辑或使用-a 和-o 表示
6)shell script默认参数
/path/to/scriptname arg1 arg2 arg3 arg4
$0 $1 $2 $3 $4
– $0:代表脚本程序本身
– $1,$2,…:代表后面第一个参数,第二个参数,等等
– $#:代表后接的参数个数,以上边为例,这里显示为4;
– $@:代表 "$1" "$2" "$3" "$4",每个变量是独立
的(用双引号括起来);
– $*:代表 "$1 $2 $3 $4"
shift 偏移一位
shift n 偏移n位
4.条件判断语句
1)if语句
if [ 条件判断 ]
then
条件成立执行,命令
fi
if [ 条件判断 ];then
条件成立执行,命令;
fi
将if反过来写,就成为fi 结束if语句
&& 代表 and || 代表 or
if [ 条件1 ];then
条件1成立执行,指令集1
else
条件1不成执行指令集2;
fi
if [ 条件1 ];then
条件1成立,执行指令集1
elif [ 条件2 ];then
条件2成立,执行指令集2
else
条件都不成立,执行指令集3
fi
2)case语句
case $变量名称 in "值1")
程序段1
;;
"值2")
程序段2
;;
*)
exit 1
;;
esac
函数格式:
function fname(){
命令
}
函数例子:
#!/bin/bash
function print(){
echo "you input:$1"
}
case $1 in "one")
print "one a" #函数print的输出值
exit 0
;;
[6,8])
print "qita"
;;
*)
print "please input one/two"
exit 1
;;
esac
3)shell script脚本检查
sh [-nvx] scripts.sh
选项与参数:
-n :不执行script,仅查询语法的问题;
-v :在执行script前,先将scripts的内容输出到屏幕上;
-x :将使用到的script内容显示到屏幕上,这是很有用的参数; !!!
4.循环语句
1)while循环语句
while [ condition ];do
命令
done
或者
while [ condition ]
do
命令
done
2)until循环语句
until [ condition ];do
命令
done
或者
until [ condition ]
do
命令
done
3)for循环语句
for 变量名 in 变量取值列表
do
命令
done
seq –s 分隔符 起始 步长 终点
[root@tedu example]#seq -s " " 5 -1 1
5 4 3 2 1
4)课件分发
vim send.sh
#!/bin/bash
for ip in `cat /root/ips.txt`
do
scp /root/epel.rpm root@${ip}:/root
done
修改课件权限:chmod 777 send.sh
文件ips.txt内容:
192.168.80.10
192.168.80.90
在分发课件之前,要对ips.txt中的主机进行免密登录
#生成公钥-私钥对
ssh-keygen
#将公钥拷贝到服务器端
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.80.10
#远程登录
ssh root@192.168.80.10
5)定时任务
分 小时 日 月 星期 用户名 命令
10 0-23 1-31 1-12 0-6 root command (取值范围,0表示周日一般
一行对应一个任务)
记住几个特殊符号的含义:
"*" 代表取值范围内的数字,
"/" 代表"每",
"-" 代表从某个数字到某个数字,
"," 分开几个离散的数字
*/1 * * * * root /home/jinxf/day05/sh/send.sh
每分钟以root用户执行/home/jinxf/day05/sh/send.sh
a)新增调度任务
[root@localhost ssh]在命令行输入: crontab -e 然后添加相应的任务或用下述方法
[root@localhost ssh]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week(0-6)(Sunday=0)sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/1 * * * * root /home/day05/sh1/send.sh
*/1 * * * * root run-parts /etc/cron.daily [注:run-parts参数表示,执行后面目录中的所有可执行文件]
b)启动crontab服务
service crond start
c)查看crontab是否已经运行
service crond status 或 ps -ef|grep crond
6)crontab
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
实例:
实例1:每1分钟执行一次myCommand
* * * * * myCommand
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
三、rpm安装软件
1.rpm安装
rpm -ivh package
-i:install的意思
-v:查看更细部的安装画面
-h:显示安装进度
安装一个rpm
rpm -ivh package
安装多个rpm
rpm -ivh package1 package2 package3
安装网上某个位置rpm包
rpm -ivh http://website.name/path/pkgname.rpm
2.rz命令
rz:从本机到虚拟机;
sz:从linux虚拟机到本机
安装lrzsz
首先使用可视化界面用root登录进入,浏览器访问
http://rpmfind.net/linux/rpm2html/search.php?query=lrzsz
下载lrzsz-0.12.21-15.x86_64.rpm
3.rpm升级与更新
rpm -Uvh <package_name>
-Uvh后面接的软件如果没有安装过, 系统会直接安装,若后面接的软件安装过但版本较旧,则更新至新版
rpm -Fvh <pacakge_name>
-Fvh如果后面接的软件并未安装到Linux系统上,则该软件不会被安装,只有已安装的软件才会被升级
4.rpm查询
-q :仅查询,后面接的软件名称是否有安装
-qa :列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!!
-qi :列出该软件的详细信息,包含开发商、版本和说明等
-ql :列出该软件所有的文件与目录所在完整文件名
-qc :列出该软件的所有配置文件
-qd :列出该软件的所有说明文件
-qR :列出和该软件有关的相依软件所含的文件
-qf :由后面接的文件名,找出该文件属于哪一个已安装的软件
查询某个 RPM 文件内含有的信息:
-qp[icdlR]:
注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出 某个 RPM
文件内的信息,而非已安装的软件信息
例:
rpm -qa |grep jdk 查找是否安装jdk
rpm -qa |head -n 4 查找所有系统已经安装的包,并只查看前3个
rpm -ql lrzsz 查询lrzsz所包含的文件及目录
四、yum安装软件
1.Epel是什么?
它是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和Scientific Linux这样的衍生版本。
我们可以很容易地通过yum命令从EPEL源上获取上万个在CentOS自带源上没有的软件。EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件
2.安装epel
在CentOS 上安装EPEL,要想安装EPEL,我们先要下载EPEL的rpm安装包。CentOS/RHEL下的6.x和5.x版本下载页面如下:noarch是支持32位和64位
http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
根据你的CentOS 版本来选择正确的下载地址。请注意EPEL 的安装包是独立编译的,所以它可以安装在32位和64位系统中。
1)查看有没有epel
[root@bogon ~]# cd /etc/yum.repos.d/
[root@bogon yum.repos.d]# ll
2)确认你的CentOS 的版本
[root@tedu yum.repos.d]# cat /etc/redhat-release
CentOS release 6.5 (Final)
3)下载EPEL 的rpm 安装包
[root@tedu yum.repos.d]# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
4)通过以下命令安装EPEL 软件包
[root@tedu yum.repos.d]# rpm -ivh epel-release-6-8.noarch.rpm
非root账户登录可以使用:sudo rpm -ivh epel-release-6-8.noarch.rpm
5)安装好EPEL 源后,用yum 命令来检查是否添加到源列表
[root@tedu yum.repos.d]# yum repolist
出现下面表示成功
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
epel/metalink | 5.0 kB 00:00
* base: mirrors.tuna.tsinghua.edu.cn
* epel: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.yun-idc.com
* updates: mirrors.yun-idc.com
epel | 4.3 kB 00:00
epel/primary_db | 5.8 MB 00:09
repo id repo name status
base CentOS-6 - Base 6,696
epel Extra Packages for Enterprise Linux 6 - x86_64 12,131
extras CentOS-6 - Extras 62
updates CentOS-6 - Updates 677
repolist: 19,566
6)现在来试一下从EPEL 获取软件包
[root@tedu yum.repos.d]# yum install htop
[root@tedu yum.repos.d]# rpm -qa |grep htop
htop-1.0.3-1.el6.x86_64
[root@tedu yum.repos.d]#yum list | grep mysql
mysql-libs.x86_64 5.1.71-1.el6 @anaconda-CentOS-201311272149.x86_64/6.5
apr-util-mysql.x86_64 1.3.9-3.el6_0.1 base
asterisk-mysql.x86_64 1.8.32.3-2.el6 epel
bacula-director-mysql.x86_64 5.0.0-13.el6 base
bacula-storage-mysql.x86_64 5.0.0-13.el6 base
collectd-mysql.x86_64 4.10.9-3.el6 epel
dmlite-plugins-mysql.x86_64 0.7.6-3.el6 epel
dovecot-mysql.x86_64 1:2.0.9-22.el6 base
dpm-copy-server-mysql.x86_64 1.8.11-1.el6 epel
dpm-name-server-mysql.x86_64 1.8.11-1.el6 epel
dpm-server-mysql.x86_64 1.8.11-1.el6 epel
dpm-srm-server-mysql.x86_64 1.8.11-1.el6 epel
其中base、epel列出来此软件包的源。
3.yum查询参数
search:查询某个软件名称或者是描述的关键字
list:列出目前yum所管理的所有的软件名称与版本,有点类似 rpm -qa
info:同上,格式不太一样,不过有点类似 rpm -qai 的执行结果
4.yum安装/升级/卸载软件
yum [install|update|remove] 软件名
install:后面接要安装的软件
update:后面接要升级的软件,若要整个系统都升级,就直接update即可
remove:删除某个软件时,依赖于该软件并已经安装到系统中的 其它软件或者包,会被一并删除(rpm方式删除某个包时,如果依赖于该包的其它包之前也被安装到系统中,删除不会成功,需要先手动删除那些包. )
5.yum进阶
5.1.yum客户端运行机制
1)客户端每次使用yum调用 install或者search的时候,都会去解析/etc/yum.repos.d下面所有以.repo结尾的文件,这些配置文件指定了yum服务器的地址。
2)yum会定期去“更新”yum服务器上的rpm “清单” ,然后把“清单”下载保存到yum自己的cache里面,根据/etc/yum.conf里配置(默认是在/var/cache/yum/$basearch/$releasever下、即/var/cache/yum/x86_64/6),每次调用yum安装包的时候都会去这个cache目录下去找“清单”,根据“清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,如果rpm包的cache不存在,就去yum服务器下载rpm包安装。
5.2.yum repo配置文件信息
[root@localhost soft]# cd /etc/yum.repos.d
[root@tedu yum.repos.d]# cat CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
其中:
[base]:代表容器的名字,中括号是必须带的,里面名字可以自定义,但不能有两个相同的名字,否则yum找不到相关的软件列表
name:只是描述容器而容器可以使用的镜像站点,如不使用则使用已
mirrorlist: “#”注释掉
baseurl:容器的固定地址
gpgcheck:gpg验证是否开启, 1是开启,0是不开启;“开启”会让yum检查每个下载的RPM的GnuPG签名。这么做是因为你需要适当的GnuPG key注册到您的RPM数据库。可以防止被欺骗,如:非法入侵发行版网站,木马导入软件包,使不知情用户下载
gpgkey:数字证书公钥文件所在位置
5.3.如何让yum支持hadoop分布式软件安装?
1、查看当前系统中yum支持的所有软件包中是否存在hadoop
[root@tedu yum.repos.d]# yum list|grep hadoop #发现没有
2、如果想要当前系统的yum支持hadoop软件包,需要本地/etc/yum.repos.d下创建
cloudera-cdh5.repo文件,保存hadoop对应的repo配置,而具体的配置信息可使用:
http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/cloudera-cdh5.repo
3、再次查看
[root@tedu yum.repos.d]# yum list|grep hadoop #发现显示很多hadoop相关的包
注: http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5/RPMS/
noarch/ # 对系统没有要求
x86_64/ #64位操作系统
点击进入x86_64/可以看到很多与hadoop相关的rpm包
5.4. yum服务器端
所有要发行的rpm包都放在yum服务器上以提供别人来下载,rpm包根据kernel的版本号,cpu的版本号分别编译发布。yum服务器只要提供简单的下载就可以了,ftp或者httpd的形式 都可以。yum服务器有一个最重要的环节就是整理出每个rpm 包的基本信息,包括rpm包对应的版本号,conf文件,binary 信息,以及很关键的依赖信息。
在yum服务器上提供了createrepo工具,用于把rpm包的基本概要信息做成一张"清 单",这张"清单"就是描述每个rpm包的spec文件中信息。
5.5.创建本地yum源
1.检查本机是否有web服务器,如没有则安装
[root@tedu ~]# rpm -qa |grep httpd
2.创建本地web服务:yum •install •httpd
3.安装yum自带工具:yum •install •yum-utils createrepo
4.在/var/www/html/ 下,执行 reposync -r cloudera-cdh5
5.通过http://ip:port/项目名来访问本地yum源 ???
6.最后修改/etc/yum.repos.d/xxx.repo 文件中的 baseurl,换成 本地地址
五、任务管理
1.把任务放到后台执行
直接将命令放到后台执行 & 如:cp file1 file2 &
通过 Ctr+z将正在执行的任务放到后台
2.查看后台任务
jobs 显示全部后台进程(不含PID)
jobs -l 显示全部后台进程(含PID)
jobs –r 仅列出正在后台 run 的任务
jobs -s 仅列出正在后台暂停 (stop) 的任务
3.将后台任务拿到前台执行:fg(foreground)
fg [%]jobnumber
jobnumber为任务号码(数字);%可有可无
fg 1 将任务号为1的进程调到前台执行
4.让任务在后台中变成执行状态: bg
bg 2
5.终止job
kill -9 pid
6.脱机及注销后任务执行
nohup 可以让你在脱机或注销后(比如exit退出当前shell),还能够让工作继续进行
nohup [命令与参数] 在当前终端前台执行
nohup [命令与参数] & 在后台执行
nohup tail -f test &
六、系统资源监控
free :观察内存(memory)使用情况
uname:查阅系统与核心相关信息
uptime:观察系统启动时间与工作负载
netstat :网络监控
vmstat :侦测系统资源变化, CPU/内存/磁盘输入输出状态
1.free :观察内存使用情况
[root@tedu ~]# free [-b|-k|-m|-g] [-t]
选项与参数:
-b :直接输入free时,显示的单位是bytes,我们可以使用b(bytes), m(Mbytes),k(Kbytes),及g(Gbytes) 来定义显示单位
-t :在输出的最终结果时,显示物理内存与 swap 的总量
[root@tedu ~]# free
total used free shared buffers cached
Mem: 1012352 318528 693824 0 23592 113208
-/+ buffers/cache: 181728 830624
Swap: 2031608 0 2031608
Mem一行显示的是物理内存的量
Swap,虚拟内存的量
total是总量,used是已被使用的量,free则是剩余可用的量
shared,共享内存
buffers,将写磁盘的内容
cached,已写磁盘或者已从磁盘读出的内容
2.uname:查阅系统与核心相关信息
uname [-asrmpi]
选项与参数:
-a :所有系统相关的信息,包括以下的数据都会被列出来;
-s :系统内核名称
-r :内核版本
-m :本系统的硬件名称,例如 i686或x86_64 等;
-p :CPU 的类型,与 -m 类似,是显示的是CPU的类型;
-i :硬件的平台(ix86);
3.uptime:观察系统启动时间与工作负载
[root@tedu ~]# uptime
08:05:08 up 3:10, 2 users, load average: 0.00, 0.00, 0.00
显示目前系统当前时间、已经开机多长的时间,用户数、以及 1,5,15分钟的平均负载
4.netstat:网络(network)监控(netstat -[atunlp])
选项与参数:
-a :将目前系统上所有的已经连接、监听、Socket数据都列出来
-t :列出tcp网络包的信息
-u :列出udp网络包的信息
-n :以端口(port number)方式来显示(不以程序的服务名称)
-l :列出目前正在监听(listen)的服务;
-p :列出该网络服务的进程id(PID)
netstat常用的命令
[root@tedu ~]# netstat –atp #所有tcp协议的链接,并输出pid号
[root@tedu ~]# netstat –antp
[root@tedu ~]# netstat -lntp
5.vmstat:侦测系统资源变化
动态的了解一下系统资源的运作,CPU/内存/磁盘输入输出状态
选项与参数:
-a :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出信息;
-f :开机到目前为止,系统复制 (fork) 的进程数;
-s :将一些事件 (开机至目前为止) 导致的内存变化情况列表说明;
-S :后面可以接单位,让显示的数据有单位。例如 K/M 取代bytes的容量;
-d :列出磁盘的读写总量统计表
-p :后面列出磁盘分区,可显示该磁盘分区的读写总量统计
统计目前主机CPU状态,每秒一次,共计四次
[ro@tedu ~]# vmstat 1 4
七、进程
1.如何查看进程
1)进程查看命令
ps(process status):将某个时间点的程序运作情况截取下来
选项和参数
a:和输入终端(terminal)关联的所有process,通常与x一起使用,出完整息
x :后台进程,通常与 a 这个参数一起使用,可列出较完整信息
u :有效使用者 (effective user) 相关的 process
常用组合
ps aux 观察系统所有的程序数据 (常用) !!!
ps -lA 也是能够观察所有系统的数据!
ps axjf 连同部分程序树状态。 !!
2)top:动态观察进程的变化
ps是截取一个时间点的进程状态,而top则可以持续观察进程运行的状态
选项与参数:
-d :后面可以接秒数,就是整个程序画面更新的秒数。默认5秒;
-b :以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流
重导向来将批次的结果输出成为档案;
-n :与 -b 搭配,意义是需要进行几次 top 的输出结果;
-p :指定某些个 PID 来进行观察监测而已;
#top –d 2
#top –b
#top –b –n 2
#top –b –n 5 > a.log
#cat a.log
在 top 执行过程当中可以使用的按键指令:
? :显示在 top 当中可以输入的按键指令
P :以CPU的使用资源排序显示
M :以Memory的使用资源排序显示
N :以PID来排序
T :由该Process使用的CPU时间累积 (TIME+) 排序
k :给予某个PID后kill该进程
r :给予某个PID重新制订一个nice值
q :离开top软件的按键 。
#top –d 1
3) pstree查看进程树
选项与参数:
-A :各程序树之间的连接以 ASCII 字符来连接;
-U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下 可能会有
乱码;
-p :并同时列出每个 process 的 PID;
-u :并同时列出每个 process 的所属账号名称。
系统进程树同时显示PID与user(root身份来执行,属于root的程序不会显示)
[root@tedu ~]# pstree –Aup #(演示)
2.进程管理
Kill发送信号(并不只是杀进程)
–选项与参数:
-l :这个是 L 的小写,列出目前 kill 能够使用的信号(signal)有哪些? signal :向进程发送的信号,指示其进行不同操作。用man7signal可知:
-15:以正常的程序方式终止一个进程!!!;
-9 :立刻强制终止一个进程!!!;
-2 :代表由键盘输入 [ctrl]-c 同样的动作;
-1 :对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程;
八、用户、用户组管理
1.添加用户
useradd [选项] 用户名
选项:
-p 指定用户的密码
-c comment 指定一段注释性描述
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
-g 用户组 指定用户所属的用户组
-G 用户组,用户组 指定用户所属的附加组
-s Shell文件 指定用户的登录Shell
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号
创建用户:useradd tom
查看用户信息:id tom
uid=502(tom) gid=502(tom) groups=502(tom)
创建用户,指定其UID为800: useradd -u 800 jerry
添加用户lucy,并设置他的个人主目录:useradd –d /usr/lucy -m lucy
创建用户gm,指定他属于主用户组“jerry”,附加组“adm、root”,登录使用的shell是/bin/sh
useradd -s /bin/sh -g jerry -G adm,root gm
创建用户(伪用户),没有可登陆的shell:useradd -s /sbin/nologin alice
2.修改用户
usermod [选项] 用户名
常用的选项包括-c,-d,-m,-g,-G,-s,-u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
另外,这个选项指定一个新的账号,即将原来的用户名改为新的用户名
将用户gm的登录shell修改为bash,主目录改为/home/z,用户组改为root
usermod -s /bin/bash -d /home/z -g root gm
3.用户密码的管理
passwd [选项] 用户名
可使用的选项:
-l(lock) 锁定口令,即禁用账号
-u(unlock) 口令解锁
-d(HOME_DIR) 使账号无口令(删除密码)
-f 强迫用户下次登录时修改口令
如果默认无用户名,则修改当前用户的口令
修改密码
#passwd ->修改自己的密码(普通用户修改比较麻烦)
#passwd tom->修改tom的密码(管理员才可以修改其他人的密码)
4.切换用户
su 目标用户 管理员切用户不需要密码,用户切管理员需要密码
5.删除用户
userdel 用户名 删除指定的用户
userdel -r 用户名 在删除指定用户的同时删除他的home目录(工作中不建议使用,一个用户离职后,用户可以删掉,但是他的工作文件很可能还有用)
6.用户组添加
groupadd [选项] 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
添加用户组emp
#groupadd emp
添加用户组market,并指定标识号为8000
#groupadd –g 8000 market
将用户添加到附加组
#usermod –aG market tom (a:append G:附加组)
7.用户组删除
groupdel group1
如果删除的用户组,已经被用户追加为附件组,对应的所有用户的该附件组会被撤销掉。
如果被删除的用户组,已经被用户指定为主组,则该用户组无法被删除
8.用户组修改
groupmod [选项] 用户组
常用的选项有:
-g GID 为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字
ssh 10.170.130.179
ssh root@10.170.130.179
ssh jianlin@10.170.130.179
九、网络
1.网络配置
如何修改网卡eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
2.网络操作
1)通过主机名查看IP: host www.tedu.cn
2)将本地的demo目录拷贝到服务器IP的/root目录下
scp -r /home/demo root@服务器IP:/root
3)远程登录:ssh 用户名@服务器IP
3.SSH远程免密登录
先说RSA
非对称加密算法,秘钥对分为公钥、私钥对
公钥加密的内容,只有拥有私钥者才可解密
免密码操作
具体实现方法,客户端执行
1)生成公钥/私钥对:
ssh-keygen
2)将公钥拷贝到服务器端:
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<server>
4.网络下载
1)wget命令
用于从网络上下载资源,没有指定目录,下载资源默认存储到当前目录。
wget [参数] [URL地址]
–支持断点下载功能
–同时支持FTP和HTTP下载方式
–支持代理服务器
使用wget下载单个文件:
wget http://www.tedu.cn
使用wget -O下载并以不同的文件名保存
wget -O newname.new http://www.tedu.cn
使用wget --limit-rate限速下载(单位,byte/秒)
wget --limit-rate=300k http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.25.tar.bz2
使用wget -c断点续传
wget -c http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.25.tar.bz2
使用wget -b后台下载
wget -b http://mirrors.hust.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
wget http://mirrors.hust.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
使用wget -i下载多个文件
wget -i urlfile.txt
urlfile.txt内容为:
http://www.tedu.cn
http://big.tedu.cn/index.html
学习命令:
xargs
find /home/mj/work -mtime -1
1.读文件最后100行
tail -n 100 filename
2.查看文件大小
ls -lht 查看所有
ls -lh 1.txt
3.Linux下目录复制:
本机->远程服务器:scp -r /home/code/Egg root@192.168.0.1:/home/web
远程服务器->本机:scp -r root@192.168.0.1:/home/web /home/code/Egg
4.Linux下压缩文件夹
unzip -r mydir.zip ./mydir
5.关闭防火墙的方法为:
永久性生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
systemctl start firewalld.service(开启防火墙)
systemctl stop firewalld.service(关闭防火墙)
systemctl disable firewalld.service(禁止firewall开机启动)
service firewalld restart(重启防火墙)
firewall-cmd --state(查看防火墙状态)
firewall-cmd --zone=public --add-port=4400-4600/udp --permanen(指定端口范围为4400-4600通过防火墙)
firewall-cmd --add-port=1024/tcp --permanent(指定端口1024通过防火墙)
firewall-cmd --zone=public --add-port=8080/udp --permanen(指定端口为8080通过防火墙)
firewall-cmd --zone=public --remove-port=80/tcp --permanent(关闭指定端口)
firewall-cmd --zone=public --list-ports(查看通过的端口)
查看防火墙状态 :firewall-cmd --state
firewall常用命令如下:
常用命令介绍
firewall-cmd --state ##查看防火墙状态,是否是running
firewall-cmd --reload ##重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口
iptables -L -n ##查看规则,这个命令是和iptables的相同的
man firewall-cmd ##查看帮助
6.VmWare虚拟机中网卡更改为eth0的方法
root登录,cp /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.bak
vi /etc/udev/rules.d/70-persistent-net.rules,删除eth0有关内容,修改eth1为eth0,记录下这个新eth0的mac地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0,修改其中的mac地址为上步中记录的地址
重启,检查配置
7、远程连接时,防火墙启用端口号
/sbin/iptables -I INPUT -p tcp--dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
8、检查开启远程访问的端口
netstat –nat
统计某文件夹下文件的个数
ls -l |grep "^-"|wc -l
9、挂载光盘、软盘或U盘
挂载光盘:mount -t is09660 /dev/cdrom /mnt/cdrom #该命令将光盘挂载到/mnt/cdrom目录,使用“ls /mnt/cdrom”命令即可显示光盘中数据和文件。
卸载光盘:umount /mnt/cdrom
显示光盘中数据和文件:ls /mnt/cdrom
挂载镜像iso文件:mount -o loop /tmp/linux.iso /mnt/linux 或:mount -o loop,ischarset=gb2312 /tmp/linux.iso /mnt/linux
挂载软盘:mount /dev/fd0 /mnt/floppy
卸载软盘:umount /mnt/floppy
挂载U盘:
首先使用“fdisk -l”命令查看外挂闪存的设备号,一般为/dev/sda1。然后用“mkdir /mnt/usb”命令建立一个挂载U盘用的目录,之后使用如下命令挂载FAT格式的U盘:mount -t msdos /dev/sda1 /mnt/usb
使用如下命令挂载FAT32格式的U盘:mount -t vfat /dev/sda1 /mnt/usb
挂载外挂硬盘分区(本地分区):
挂载外挂硬盘分区(FAT32格式)同样需要先用“fdisk -1”查看外挂的硬盘分区设备号,假设为/dev/hda1。建立/mnt/vfat挂载目录后,使用如下命令进行挂载:mount -t vfat /dev/hda1 /mnt/vfat
挂载本地系统中的windows分区,并挂载其中一个文件系统:
#mkdir /mnt/d
#mount -t ntfs -o iocharset=gb2312 /dev/hdc5 /mnt/d
其中 ntfs为ntfs分区 iocharset=gb2312是为了支持中文,如果已经支持中文,可以用
#mount -t ntfs /dev/hdc5 /mnt/d
#mount -t vfat /dev/hdc5 /mnt/d 挂载fat32格式分区
挂载windows的共享目录
在一个局域网中,一般会有多台windows操作系统的电脑
将windows文件系统映射成文件系统的mount命令格式
#mount -t smbfs -o username=用户名,password=密码 共享名 挂载点
如:
#mount -t smbfs -o username=rq,password=1234 //dz118/software /mnt/software
注意,默认情况下Linux只允许root用户执行mount命令。如果想让一般用户也能挂载,并且希望在系统启动时自动挂载光盘或软盘,需要修改/etc/fstab配置文件,加入以下内容:
LABEL=/ / ext3 defaults 11
/dev/cdrom/mnt/cdrom iSo9660 auto,owner,kudzu,ro,user 00
/dev/fdo /mnt/floppy auto auto,owner,kudzu,ro,user 00
其中,“user”表示将mount命令赋予一般用户使用。
/etc/fstab文件在Linux的帮助手册中讲得很详细,不妨看一看。
查看服务器信息
1、查看CPU是几核:
命令:cat /proc/cpuinfo |grep "cpu cores"|uniq
结果:cpu cores : 12
2、查看逻辑cpu
命令:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
结果:48 Intel(R) Xeon(R) Silver 4214 CPU @ 2.20GHz
说明:上面可以看到有48个逻辑CPU。 型号是Intel(R) Xeon(R) Silver 4214 CPU ,主频是 2.20GHz
3、查看物理cpu的个数
命令:cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
结果:2
4、查看逻辑cpu的个数
cat /proc/cpuinfo |grep "processor"|wc -l
5、查看cpu的core数
cat /proc/cpuinfo |grep "cores"|uniq |awk '{print $NF}'
6、查看网卡
命令:ethtool eno1