http://man.linuxde.net/
drwxr-XR-X。2根根4096 11月19 09:26测试
如果是目录数字2代表的目录中有几个文件及子文件夹
如果是文件数字代表的是硬链接数
ln file.txt file1硬链接
ln -s file.txt file2软连接相当于win里的快捷图标
最后行模式shift +:1,$ s / nologin(旧内容)/ 666(新输入)/ g
http://man.linuxde.net/
一,grep过滤
-c:只输出匹配行的计数。
-i:不区分大小写(只适用于单字符)。-
h
:查询多文件时只输出包含匹配字符的文件名。-
n:显示匹配行及行号。-
s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。grep
-i --color 'Ro'/ etc / passwd大小写忽略#grep
-i --color'Anonymous'passwd -B5 -a -A5
二,管道符|,追加/覆盖符号命令未结束符号\
1,用竖线表示| :
表示将前一个命令的输出结果传递给后面的命令处理,两边都是命令
$ cat / etc / passwd | 更多
1)、grep:过滤筛选
$ cat /etc/passwd | grep 'root'
2)、过滤条件
$ ifconfig | grep 'inet'
$ ls /dev | grep 'cdrom'
5、追加和覆盖
1、追加 >>:以追加的方式将命令正确的结果输出到文件或设备中区
date >>1.txt
echo '123' >>1.txt
假如命令错误
data 2>> 1.txt
2、覆盖
date >1.txt
假如命令错误
data 2> 1.txt
标准输入 0 从键盘获得输入
标准输出 1 输出到屏幕
错误输出 2 输出到屏幕
4、 \ 表示命令未结束换行继续
注意: \后面不能任何字符,直接回车
$ cat /etc/sysconfig/\
> network-scripts/ifcfg-eth0
cat / etc / sysconfig /
network-scripts / ifcfg-eth0
三,正则表达式
sed awk
1、过滤包含数字的行
# grep '[0-9]' /etc/passwd
grep '[0-9][0-9][0-9]' /etc/passwd
# grep ':[0-9][0-9][0-9]:7' /etc/passwd
# grep '^r.*n$' /etc/passwd
“[a-z]”“[0-9]”“[A-Z]”
[A-Z][0-9][0-9] = B02
【举例】提取ifconfig命令中的IP地址,使用sed命令
# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | sed 's/inet addr://g' | sed 's/Bcast.*//g'
补充命令
5、wc(word count)统计命令:统计单词、字符、行数,支持管道符号
$ wc file.log
1 4 19 file.log 行数 单词数 字节数
$ wc -l /etc/passwd 统计行数
$ cat /etc/passwd | wc -l
6、df -l -h 显示当前各个硬盘分区的使用情况
7、du -h 统计文件或目录的大小
四,关闭防火墙和安全子系统(Hadoop HBase这样的分布式集群应用需要)
- “在联机应用(分布式)中,一般会关闭防火墙。网络访问(比如rpc通信端口),为了保证多机通信的稳定性,可以选择关闭防火墙
1.关闭防火墙并且不开机启动
1)。关闭Linux 防火墙#service
iptables status ##查看
防火墙状态iptables:Firewall is not running 。
#service iptables stop ##关闭防火墙
2).设置不开机启动防火墙
# chkconfig iptables off ##不随机启动
3).查看防火墙的开机启动设置
# chkconfig --list | grep iptables
2.关闭安全子系统
# vi /etc/sysconfig/selinux
SELINUX=disabled
**这里不用去修改
创建虚拟机的时候一定要选择桌面版
vi / etc / inittab
#0 - halt(不要将initdefault设置为此):关机
#1 - 单用户模式:使用单用户模式
#2 - 多用户,没有NFS(与3相同,如果你没有网络):使用多用户
#3 - 完全多用户模式:完全多用户
#4 - 未使用
#5 - X11:图形化
#6 - reboot(不要设置initdefault对此):重启
把默认值修改为3,就会开启命令行模式
五,sudo权限
1,操作对象是系统命令
2,命令:#visudo管理员(root)身份执行
或者#vi / etc / sudoers
3.配置sudo#visudo
##允许root在任何地方运行
root ALL = ALL)所有
hadoop ALL =(root)NOPASSWD:ALL
三个ALL到底是什么意思。
第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明hadoop用户可以在此主机上执行后面的命令。
第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。
最后一个ALL当然就是指命令名了。
4.使用:在需要root用户操作的时候,在原来命令的前方加sudo
$ vi /etc/hosts
"/etc/hosts" [readonly] 3L, 189C
$ sudo vi /etc/hosts
4、which和whereis命令
whereis定位可执行文件、源代码文件,定位文件在文件系统中的位置
which同样也是可以定位文件的位置
which shutdown
whereis shutdown
六,Linux中的压缩命令
1,gzip,压缩时不保留原文件
2,gzip,不能压缩目录
3,不能重命名
压缩前:1668 11月19日11:24 passwd
压缩后:697 11月19日11:24 passwd.gz
gzip:test /是一个目录 - 忽略
3、bzip2适用于一些内容和数据较大的文件进行压缩
4、tar包格式压缩
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩
则是将一个大的文件通过一些压缩算法变成一个小文件。
-c:建立新的备份文件
-x:从备份文件中还原文件;
-v:显示指令执行过程;
-z:通过gzip指令处理备份文件;
-f:指定备份文件;
打包:#tar -cvf test.tar test/
注意:-f必须放在选项的最后
打包完成之后再压缩
gzip test.tar
gzip -c file.txt > fiel/file.gz
gunzip
解包:# tar -xvf beifeng100.tar -C /opt/
结合 tar 和 gzip 命令使用
-C :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
.tar.gz格式打包:# tar -cvzf beifeng100.tar.gz beifeng100/
.tar.gz格式解包:# tar -zxvf beifeng100.tar.gz -C /opt/rh/
解压的目录不在当前目录
选项:-C 重定向,注意是大写
七,Linux中的软件包管理方式
1,软件包的类型
- “源码包(
脚本)- ”二进制包(rpm,系统默认包)
- “经过编译后的(看不到源码)
- ”管理方便:安装,卸载,升级,查看
- “安装速度快
- ”依赖性
A-> B-> C-> D .....#相关依赖
挂载光驱:#mount / dev / sr0 / media
2、rpm管理方式
-》管理.rpm结尾的包
-》查询:
rpm -qa q表示查询,a表示所有
-》查询所有已经安装好的包
-i:显示套件的相关信息;
-v:显示指令执行过程;
-h:套件安装时列出标记;
--安装
rpm -ivh httpd-devel-2.2.15-26.el6.centos.x86_64.rpm 失败的
rpm -ivh httpd-manual-2.2.15-26.el6.centos.noarch.rpm 成功
--卸载
rpm -e httpd-manual-2.2.15-26.el6.centos.noarch.rpm
error: package httpd-manual-2.2.15-26.el6.centos.noarch.rpm is not installed
rpm -e httpd-manual-2.2.15-26.el6.centos.noarch
--查看
(已经安装)# rpm -qa | grep 'httpd'
# rpm -qa | grep jdk
# rpm -qa | grep mysql
选项:--nodeps:不检测依赖性,一般建议在试验环境使用
3、yum管理方式
-》使用的前提条件,需要连接到网络
-》查询:
# yum list查询已经安装好的包
# yum list | grep 'httpd'
-》安装:
选项:install ,选项:-y 直接确认
# yum -y install httpd-devel.x86_64
-》卸载:
选项:remove
# yum -y remove httpd-devel.x86_64
-》yum仓库:
地址:/etc/yum.repos.d/
gpgkey 校验码
gpgcheck=1 开启校验,0是关闭校验
如果你的yum源不能使用,可以网上找一下更换yum源
50G
20G
八,磁盘管理
1,查看当前磁盘使用情况
df -h
2,磁盘命令 #fdisk
-l
brw-rw ----其中b代表的是设备文件
sda代表第一块硬盘,s代表接口,d代表磁盘磁盘
sda1 / 2 ...代表硬盘中的分区
硬盘接口:
sata sas-“服务器方面
scsi ide-” 个人电脑方面
SSD固态
3,cylinders disks - “就是查看分区情况
- ”起始和结束
4,添加磁盘之前关机,关闭所有的进程
5,分区#fdisk
/ dev / sdb
输入m查看帮助信息
输入n进行分区
e extended - “扩展分区
p主分区(1-4) - ”主分区
主分区+扩展分区<=4
必须保证要有一个扩展分区
2+1或者3+1的模式
主分区分完格式化之后可以直接使用
扩展分区分完之后还需要进行逻辑分区才能使用
注意:
分完区之后按 w 进行信息的保存
分完区之后建议重启机器,让系统重新加载一次信息
6、格式化磁盘
Linux中的文件系统
ext2、ext3、ext4(centos6)、xfs(centos7)等
格式化命令:mkfs.ext4 /dev/sdb6
7、挂载磁盘
挂载临时命令:mount
mount /dev/sdb5 /mnt
挂载点:是访问这个分区的唯一入口,是必须已经存在的
使用:df -h来验证是否挂载成功
永久生效的挂载方法:
# vi /etc/fstab 写入配置文件
/dev/sdb5 /mnt ext4 defaults 0 0
九,克隆虚拟机VMware
1.关闭Linux系统关机:init 0; 断电; 停; shutdown重启:init 6; 重新启动
2.虚拟机 - “管理 - ”克隆
选择完整克隆而非克隆链接
3.克隆出来的虚拟机 要修改主机名还有ip地址,关键是要修改网卡信息
修改主机名: vi /etc/sysconfig/network
4.# vi /etc/hosts
修改主机映射:个人的配置为:
192.168.195.11 bigdata02
# vi /etc/sysconfig/network
修改主机名 个人的配置为:apache(原)--》apche clone(克隆)
5.网卡的信息(mac地址HWADD)
# vi /etc/udev/rules.d/70-persistent-net.rules
删除原来的网卡信息通过mac地址来区分,删除原来的信息
并将新的网卡的name信息改为eth0
6.重命名网卡配置名称
# mv /etc/sysconfig/network-scripts/ifcfg-Auto_eth1 /etc/sysconfig/network-scripts/ifcfg-eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
# service network restart
7.修改网卡名称:将Auto_eth1 修改为System eth0
SUBSYSTEM ==“net”,ACTION ==“add”,DRIVERS ==“?”,ATTR {address} ==“00:0c:29:8f:24:b5”,ATTR {type} ==“1” ,KERNEL ==“eth ”,NAME =“eth0”
8.# reboot 重启虚拟机(因为修改了主机名)
同时修改windows中主机映射,增加:
C:\Windows\System32\drivers\etc\hosts
192.168.195.101 bigdata02
十,系统管理命令
1,top - “查看当前系统的资源和任务,3秒刷新一次
Swap交换分区 - ”类似windows中的虚拟内存概念
- “按q退出浏览的状态
2,free - ”查看当前系统内存资源的情况
选项:-m表示mb
3,netstat
- “ - 打印Linux中网络系统的状态信息,可以让你知道整个Linux系统的网络情况
- ” - t:表示TCP网络协议,三次握手,更安全
- “ - u:表示UDP网络协议,直接传输数据,传输快,不稳定
- ” - l:表示监听端口,listen
- “ - r:表示路由器,查看网关
- ” - n:表示IP地址和端口号
- “ - a:显示所有插座,包括正在监听的。
第一种用法:
#netstat -tlun
查看系统已经开启的监听端口
第二种用法:#netstat
-an
- ”a表示全部的意思
查看系统已经开启的监听端口以及正在连接的网络程序
第三种用法:#netstat
-rn
#route -n同样也是单独查询路由信息
4、ps命令用于报告当前系统的进程状态
ps -ef
kill结束系统进程命令
jps
$ kill -9 2287
-9表示强制关闭,类似windows中的结束任务
十一,Linux shell
1,shell的概念
1)shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序界面的系统级程序。
用户可以通过shell来启动,挂起,停止。甚至编写一些程序
。2)它还是一个功能强大的编程语言,易编辑,易调试,灵活性强.shell是结核性的脚本语言,在我们
shell中可以直接调用linux系统命令。
外层应用程序ls
|
shell命令解释器 - “转换
|
内核
|
硬件 - ”010101010 ....机器语言ASCII
#!shebang
如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$ SHELL环境变量)
2,shell执行的原理
1)在我们计算机语言中,最底层是硬件,硬件是通过内核进行管理的。内核通过管理硬件进行功能的实现,但是在计算机语言里底层硬件只能识别0101 ...的机器语言,无法识别一个,b,C,ASC码语言。在这中间就需要一个翻译机制进行编译,就是所谓的shell编辑器,shell编辑器可以讲外层输入的asc码翻译成计算机能识别的机器语言,所以说内核要通过shell编辑器进行翻译才能对硬件进行管理。
2)反之,硬件要将输入的请求响应给外层应用,那么我们内核是无法识硬件的机器语言,那么这时壳编辑器也会将硬件处理的机器语言翻译成ASCLL语言给内核,内核再进行壳编辑器反馈给外层应用。最后就会得到我们想要的结果了
3,Linux的中支持的壳环境
[根@ java15〜]#猫的/ etc /弹
/ bin / sh的
/斌/庆典
/ sbin目录/ NOLOGIN
/斌/破折号
/ bin中/ tcsh的
/ bin中/ CSH
4,外壳脚本的执行方式
。shell.sh
sh shell.sh
./shell.sh(必须要有X权限才可以操作)chmod u + x shell.sh
6,变量
1)环境变量
系统环境(全局):cat / etc / profile
用户环境变量(局部):cat .bash_profile,root修改后,beifeng也是不能使用的
这两类文件别轻易修改
2)位置变量
获取脚本文件时所传入的参数,将传输的参数保存在位置变量中,以便于在脚本中可以使用这些变量。
$ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8,$ 9,$ { 10},$ {11} .....
编写位置变量:
[root @ java15 sh]#vi 1.sh
#!/ bin / bash
echo $ 2
echo $ 3
echo $ 1
调用脚本并且传入参数
[root@java15 sh]# sh 1.sh start stop restart
stop
restart
start
3)预定义变量
$0 显示脚本名称
$! 进程中的PID号,每一个进程都有一个编号
$$ 当前进程的id号
$# 当前传入shell的参数个数
$* 整体打印参数
$@ 逐个显示参数内容
$?判断表示程序退出的代码 (返回0表示成功,非0表示失败)
6、4)自定义变量
语法格式:name=[value]
注意:
变量对大小敏感
等号两边不能有空格
定义好之后用($变量名)调用变量
用法:a=12
echo $a
5、逻辑符号
&&:逻辑与
cmd1&&cmd2:表示前一个执行成功后,才会执行后面的命令
如:# cat /etc/passwrd && mkdir test(不执行第二个命令)
# cat /etc/passwd && mkdir test(执行第二个命令)
||:逻辑或
cmd1||cmd2:表示前面一个命令执行失败,才会执行后面的命令
如:# cat /etc/passwrd || mkdir hello
;没有逻辑 (无逻辑)
cmd1;cmd2
顺序执行
6、shell计算
# echo $((a+b))
# echo $[a+b]
# echo $(($a+$b))
# echo $[$a+$b] echo $[a+b]不加$也可以执行
# expr $a + $b 注意:加号前后要加空格
7、内置判断
数字判断:
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
数字:
a=11
b=12
[ $a -eq $b ];echo $?
字符串判断:
=:字符串内容相同则为真,就是说包含的文本一摸一样。
!=:字符串内容不同,则为真(!号表示相反的意思)
-z:字符串内容为空(长度为零)则为真
测试:
[ "as" = "aa" ];echo $?
[ "as" != "aa" ];echo $?
[ -z $a ];echo $?
[beifeng@bigdata-03 shell]$ a="I am"
[beifeng@bigdata-03 shell]$ echo $a
I am
[beifeng@bigdata-03 shell]$ b="B am"
[beifeng@bigdata-03 shell]$ [ $a = $b ];echo $?
-bash: [: too many arguments
2
[beifeng@bigdata-03 shell]$ [ "$a" = "$b" ];echo $?
1
3)文件测试
-e 文件名 : 如果文件名存在即为真
-r 文件名 : 如果文件名存在且可读则为真
-w 文件名 : 如果文件名存在且可写则为真
-x 文件名 : 如果文件名存在且可执行则为真
! : 非
-a : and
-o : or
[ -e /etc/passwd -a 2 -eq 2 ];echo $?
[ -e /etc/passwd ];echo $?
7、for循环
#!/bin/bash
for i in tom tony leo
do
echo $i
done
【需求】使用for循环
#!/bin/sh
for MONTH in {1..12} //或者这里也可以写$(seq 1 12)
do
mkdir -p /opt/test/$MONTH
done
【需求】求1到10的和
#!/bin/bash
for((i=1;i<=10;i++))
do
SUM=$((SUM+i))
done
echo $SUM
【扩展】
使用延迟(有趣的进度条):
#!/bin/bash
b=''
for ((i=0;$i<=100;i++))
do printf "Progress:[%-100s]%d%%\r" $b $i
sleep 0.1
b=#$b
done
echo
2)if判断:
第一种写法:
if 条件判断
then
command.....
fi
eg.
[root@java15 sh]# vi test05.sh
#!/bin/bash
if [ 3 -eq 3 ]
then
echo Yes
fi
[root@java15 sh]# bash test05.sh
Yes
第二种写法:
if 条件语句
then
command ....
else
command ....
fi
eg.
[root@java15 sh]# vi test06.sh
#!/bin/bash
if [ -d /home/jerry/tmp ]
then
ls /home/jerry/tmp
else
mkdir /home/jerry/tmp
echo "目录创建成功"
fi
# sh test06.sh
目录创建成功
第三种写法:
if 条件语句
then
command...
elif 条件语句
then
command...
elif 条件语句
then
command...
....
else
command...
fi
eg.
#!/bi/sh
# read socre and choose level
# read 相当于Java中的scanner 是一种交互式命令,读取设备的输入
echo "请输入学生成绩score:"
read score
if test $score -ge 90;
then
echo level A;
elif [ $score -ge 80 -a $score -lt 90 ]
then
echo "level B";
elif test $score -ge 70 -a $score -lt 80
then
echo "level C";
elif [ $score -ge 60 ] && [ $score -lt 70 ]
then
echo "level D";
else
echo 不及格;
fi
8、while循环
【需求】求1到10的和
#!/bin/bash
i=1
while [ $i -le 10 ]
do
SUM=$((SUM+i))
i=$[i+1]
done
echo $SUM
【需求】读取文件内容
#!/bin/bash
while read -r line
do
echo $line
done < /etc/passwd
控制语句case语句
语法1:
case $变量名称 in
条件1)
命令序列
;;
条件2)
命令序列
;;
条件3)
命令序列
;;
*)
esac
例如:
#!/bin/bash
case $1 in
top)
top
;;
free)
free
;;
ls)
ls /opt/cmz
;;
*)
echo "usages: top|free|df"
esac
语法2:
case $变量名称 in
条件1|条件2)
命令序列
;;
条件3|条件4)
命令序列
;;
条件5|条件6)
命令序列
;;
*)
esac
例如: #!/bin/bash
case $1 in
cat|dog)
echo "animal"
;;
pen|pencil)
echo "study"
;;
*)
echo "usages: cat|dog|pen|pencil"
esac
十一,Linux中的定时任务
1,日期
显示当前系统的时间
#date -s“2017-11-18 17:03:30”#date
“+%Y%m%d”
七天前#date
-d' 7天前''+%Y%m%d%H%M'
2、at命令:定时计划任务
在特定的时间执行一次后结束
格式:at now+时间(相对于当前时间)
--at 时间(绝对时间:在当前时间之后的一个具体时间)
例如:at now+2minutes
at 10:26
步骤:at now+2minutes按回车键键入
at> mkdir /opt/test
at> 这时可以
--按Ctrl+d结束编辑
--# at -l:查看未执行的定时计划
3、Crontab计划任务
-->周期性执行计划任务
选项使用:
crontab -l (list ) #查看目前的计划任务列表
crontab -r (remove) #删除计划任务
crontab -e (eidt) #编辑周期性计划任务
进程名称是crond
ps -ef | grep crond $查看此进程是否开启
-》检查服务是否开启
# service crond status
# service crond start
# service crond stop
# service crond restart
-》执行身份管理员
-》注意:凡事只要涉及到服务相关的,都会有开机设置项
开启# chkconfig crond on
关闭# chkconfig crond off
-》执行身份管理员
cat /etc/crontab
* * * * * user-name command to be executed
分 时 日 月 周 命令
/ 表示频率
- 表示范围
, 表示指定执行
【假设场景】
每周三的凌晨两点
0 2 * * 3 cp / etc / passwd / tmp
每个月10号和25号凌晨1点5分
5 1 10,25 * * *****
每10分钟执行一次
* / 10 * * * * *****
每天凌晨1点到6点
0 1-6 * * * *****
每小时的第5分钟执行一次
5 * * * * **** *
每月8号的7:30分执行
30 7 8 * * *****
每年的6月8号5:30分执行
30 5 8 6 * * ******
每天8到11点的第25分钟执行
25 8-11 * * * *****
每小时的第5分钟和15分钟和25分钟执行
5,15,25 * * * * *******
【示例】
每一分钟执行一次将结果写到一个文件中
*/1 * * * * date >> /opt/test.txt
制定完成建议重启服务
# service crond restart