解释: [root@linux01 Desktop]# root 用户,是超级用户 linux01 主机(主机名:linux01.hadoop.com) Desktop 用户所在目录 (工做目录) # 超级用户($表明普通用户) 经常使用操做 历史命令(使用 ↑ ↓ ,获取历史命令 ) tab补全(输入文件名补全或提示) clear (ctrl+l) pwd (print name of current/working directory) 查看当前位置 家目录 root用户 /root 普通用户hadoop /home/hadoop man 命令 按q退出 命令 -help 1. ls (list directory contents) 2. cd ./ 当前目录 ../ 上一级目录 cd ~ cd 回到家目录 3. mkdir:建立目录 多级目录 -p mkdir -p a/b/c 4. touch:改变文件属性 5. rmdir 删除空目录 rmdir test 6. rm 删除文件或目录 -r 迭代 -f 强制:不要问我直接删 7. cp:复制 -r:递归复制目录 8. mv (移动剪切、重命名) 9. cat(查看较少内容) 10. more 分页向下查看(空格) 逐行向下查看(回车) 按q或者Ctrl+C终止退出查看的状态 11. less 12. head 13. tail -3 文件 查看文件后三行 -f 动态查看,跟文件描述符 -F 动态查看,跟随文件名 14. 关机 shutdown -h now init 0 15. 重启 reboot init 6
w保存,q退出,!强制
wq保存并退出
q!强制退出,不保存修改java
su - 切换为超级用户 1) 主机名不能以数字,.开头,包含特殊字符(*@$) hostname 查看主机名 hostname centos01 临时修改主机名,重启失效 vi /etc/sysconfig/network 永久修改,重启生效 2) 修改ip 1) 界面修改 2) # vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes //开机自动链接网络 BOOTPROTO=static //设置为静态 dhcp为动态, none为不指定 # service network restart 3) 修改主机映射虚拟机 # vi /etc/hosts 192.168.247.110 centos01 Windows C:\Windows\System32\drivers\etc\hosts windows ping 服务器 ping ip ping 主机名 服务器 ping 网关
用户组:方便管理用户,举例: 学校为了方便管理学生,对学生进行分班node
root :x:0:0:root:/root:/bin/bash
root 用户名
x 密码
0 用户id
0 用户组id
root 用户描述
/root 用户家目录
/bin/bash 用户所用的shelllinux
当建立一个用户,系统会默认建立一个和用户名相同的用户组shell
删除用户
# userdel -r xiefei 完全删除用户编程
-r递归删除用户家目录
#groupadd 用户组windows
#su - 切换为root用户
#su - hadoop 切换为hadoop
su 和 su - 的区别:前者切换用户, 后者切换用户及用户环境
# exit 退出用户centos
drwxr-x--x
d 表明目录
- 表明文件
rwx 所属用户(u)的权限
r-x 所属用户组(g)的权限
--x 其余用户(o)的权限
( 用户是学生, 所属组是班级, 其余学生 举例分析 )api
r 可读
w 可写
x 可执行
rwx 可读可写可执行
r-x 可读可执行安全
rwx 也能够表示为 111 7
rw- 110 6
r-x 101 5
r-- 100 4bash
# chmod 764 test.c 修改成可读可写可执行
# chmod u+x test.c 为所属用户添加执行权限
# chmod g+w test.c 为所属用户组添加写权限
# chmod o-x test 删除其余用户的执行权限
# chomd 777 -R test/ 递归修改test的全部文件权限
# chown hadoop msg.txt 把msg.txt修改成hadoop全部
# chgrp hadoop msg.txt
# chown hadoop:hadoop -R hadoop/
向用户组添加用户及删除用户,查看用户所属用户组
# gpasswd -a hadoop mygroup # gpasswd -d hadoop mygroup # groups hadoop
把前一个命令的输出结果传递给后面的命令处理
# cat /etc/passwd | more
# cat /etc/passwd | grep 'root'
# ll /etc/ | grep 'sysconfig'
# ifconfig | grep 'inet' 查看ip
# ll > test.txt
# ll >> test.txt
-l 统计行
-w 统计word
# wc -l /etc/passwd
# wc -w test.c
# du -sh /lib
# ps -ef
# ps -ef | grep 'java'
语法格式:
find 范围 条件
# find / -name init
模糊查询带有关键字的: $ find /etc/ -name *work
查找关键字开头的文件: $ find /etc/ -name init*
匹配单个字符 $ find /etc/ -name ???work
不区分大小写匹配 $ find /etc/ -iname ???work
选项:-size
指定方式:+大于, -小于,不加符号表示等于
$ # find /etc/ -size +2M
# find /root -user hadoop
# find /root -group hadoop
# find /etc/ -name *work -type f 文件
# find /etc/ -name *s -type d 目录
root ALL=(ALL) ALL
user01 ALL=(root) NOPASSWD: ALL
第一个ALL是指网络中的主机,它指明user01用户能够在此主机上执行后面的命令。
第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。
最后一个ALL是指命令。
windows常见: .rar .zip
linux常见: .tar .tar.gz .gz
tar cvf content.tar Main.java msg.txt 将Main.java msg.txt压缩为 context.tar
tar xvf content.tar -C test 将content解压到test文件夹下
# tar -zcvf test.tar.gz ./ 将当前目录压缩
# tar -zxvf test.tar.gz -C ./ 压缩文件加压到当前目录
压缩
$ gzip hello.mp4
解压
$ gunzip hello.mp4.gz
选项:
-z, --gzip, --gunzip, --ungzip filter the archive through gzip
-c, --create create a new archive
-x, --extract, --get extract files from an archive
-v, --verbose verbosely list files processed
-f, --file=ARCHIVE use archive file or device ARCHIVE
f后面必须跟上要处理的文件名
$ rpm -qa | grep jdk
查看某个文件属于哪一个rpm包安装的
# rpm -qf /etc/ntp.conf
a) 安装:
# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
用法: rpm -ivh 软件名(.rpm)
选项:-i install 表明安装
-vh 显示详细的进度
# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
b) 卸载
选项: -e 表明卸载 --erase
用法: rpm -e 软件名(.rpm) --nodeps (不验证依赖卸载)
# rpm -e tree-1.5.3-3.el6.x86_64 --nodeps
c) 卸载自带jdk
$ sudo rpm -e java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 --nodeps
$ sudo rpm -e java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 --nodeps
//从新生效
$ source /etc/profile
安装jdk
$ sudo mkdir /opt/software //安装包的存放目录
$ sudo mkdir /opt/modules //解压安装的目录
2. 修改目录的所属用户及所属用户组
$ sudo chown user01:user01 /opt/software/ /opt/modules/
3. 上传并解压jdk
$ tar -zxf jdk-7u67-linux-x64.tar.gz -C ../modules/
4. 配置环境变量
# vi /etc/profile
末尾添加
#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
5. 使生效
#source /etc/profile
6. 检查是否成功
java -version
# yum list //查看yum源上拥有的软件
# yum list installed | more //查看系统中已经安装好的rpm包 等同于 rpm -qa
$ sudo yum list installed | grep tree
# yum install httpd-devel.x86_64
选项:install 后缀不须要加.rpm 能够直接使用命令
选项:-y , 表示直接自动确认
# yum -y install httpd-devel.x86_64
$ sudo yum install tree
# yum -y remove httpd-devel.x86_64
$ sudo rpm -qa | grep tree
不通外网,网络质量不佳
每隔3秒更新一次
按q退出浏览状态
选项:-m, 就是以MB格式显示
jps 查看系统正在运行的java进程
选项:-9
kill -9 【pid】
ping 主机名
ip地址
域名
选项:
-t #监控tcp协议的进程
-l #listenning
-n #显示端口号信息
-p # 显示进程的PID
netstat -antp
能够展示给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换状况,IO读写状况
2 表示间隔时间
5 表示采集次数
--》在联机应用(分布式)中,通常会关闭防火墙。防火墙默认状况下,出于安全考虑会限制一些应用的网络访问(好比rpc通讯端口),为了保证多机通讯的稳定,能够选择关闭防火墙
1. 关闭Linux 防火墙 # service iptables stop ##关闭防火墙 # service iptables status ##查看防火墙状态 iptables: Firewall is not running. 2. 设置不开机启动防火墙 # chkconfig iptables off ##不随机启动 设置开机启动使用 on 3. 查看防火墙的开机启动设置 $ sudo chkconfig --list | grep iptables
# vi /etc/sysconfig/selinux
修改下面SELINUX=enforcing为 SELINUX=disabled
声明是什么类型的shell
1)sh hello.sh #执行shell脚本
2)./hello.sh #这种方式要求这个脚本拥有执行权限
shell的变量 num=123;str="hello world"
定义变量没有数据类型
引用变量须要在变量前面添加$符号
保存系统运行时使用的变量
》用户变量
.bash_profile 每一个用户主目录下都有这么这个文件,用来保存每一个用户的环境变量
》系统变量
/etc/profile:系统全局生效的配置文件
将传递给脚本的参数保存在位置变量中
以便于在脚本中引用这些变量
Bash 定义9个位置变量:$1 ... $9
$0:表明的是当前脚本的名称
#! /bin/sh echo "这是第一个变量$1" echo "这是第一个变量$2" echo "这是第一个变量$3" echo "这是第一个变量$4" echo "这是第一个变量$9"
$0:脚本名称
$!:后台运行的最后一个进程的PID号
$$:当前进程的ID号
$#:当前shell的参数个数
$*显示全部的参数内容(总体)
$@:显示全部的参数内容(逐个读取)
$?:判断,表示程序退出的表明(返回0表明成功,非0表明失败)
#! /bin/sh echo "脚本名称: $0" echo "当前进程的ID号: $$" echo "当前shell的参数个数: $#" echo "显示全部的参数内容(逐个读取:$@" aaaaa # 这里会打印一个非0的值, 表示前一行命令执行出错 echo $?
name=value
等号两边不能有空格
变量对大小写敏感
调用变量的值$name
1. 直接赋值 tag1=112
2. tag2=$tag1
3. szie=ls ~/
将命令赋值给变量 飘号或者反引号
shell的字符串/命令(echo ):
#! /bin/sh # 赋值号先后不能有空格 # 变量没有类型 numOfPerson=100; echo $numOfPerson # 取变量numOfPerson赋值给n n=$numOfPerson echo "n=$numOfPerson" # 将ls -l /etc执行的内容赋值给str str=`ls /etc`
echo 能够不加引号 #能够正常输出的输出变量
echo 加单引号 #单引号内容原样输出,单引号将剥夺其中的全部字符的特殊含义
str='hello $num'
echo 加双引号 #双引号能够输出变量,输出"等,需转义
str="hello $num"
shell的字符串拼接
str="hadoop"
a="你好$str"
a="你好"\$str
第一种写法 $(( ))
第二种写法 $[]
第三种写法 expr表达式 只能接受数值,expr自己是shell命令,输出的时使用反引号
a=6;b=5 echo $((a+b)) echo $(( $a * $b )) echo $[a+b] echo $[ $a * $b ] expr $a - $b expr $a \* $b
-》 && 逻辑与 (命令控制符)
cmd1 && cmd2 //前面的命令执行成功才会执行后面的命令
-》 || 逻辑或
cmd1 || cmd2 //前面的命令执行失败才会执行后面的命令
-》 ;无逻辑符号
cmd1 ; cmd2
a=6 b=9 #第一种 变量和比较符之间空格可省略 if test 6 -gt 9 then echo bigger fi #第二种 变量和比较符之间的空格必须 if [ $a -lt $b ] then echo smaller fi
-eq #equal 等于
-ne #not equal 不等于
-gt #greater than 大于
-ge #greater equal 大于等于
-lt #little than 小于
-le #little equal 小于等于
注意:在数值的比较中,不能使用”>“ "<"等符号来进行比较
在test 或 [] 进行测试的时候,必需要有空格
test $1 -gt 60* **-a** *$1 -lt 70 同一个条件内使用
[ $1 -ge 70* **-a** *$1 -lt 80 ]
elif [ $1 -ge 60 ] && [ $1 -lt 70 ]
$ [ "990" -le "995" ] && [ "123" -gt "33" ] 这里要用&&
= 等于
!= 不等于
-z $str 长度为0则为真
-n "$str" 长度不为0则为真
$str 字符串不为空则为真
#!/bin/sh str1="abc" str2="abc" str3="cde" str4= if [ $str1 = $str2 ] then echo str1和str2相等 fi if [ $str1 != $str3 ] then echo str1和str3不相等 fi if [ -z $str1 ] then echo str1长度为0 fi if [ -n "$str3" ] then echo str3长度不为0 fi if [ $str1 ] then echo str1不为空 fi if [ $str4 ] then echo str4不为空 fi
-d (directory) 若是是目录则为true
-f (file) 若是是文件则为true
-r 若是是可读则为true
-w 若是是可写则为true
-x exec 若是是可执行则为true
注意:可读可写可执行是针对于执行脚本的用户而言的权限
#!/bin/sh if [ -d $1 ] then echo 是目录 fi if [ -f $1 ] then echo 是文件 fi if [ -r $1 ] then echo 是可读的 fi if [ -w $1 ] then echo 是可写的 fi if [ -x $1 ] then echo 是可执行 fi
三种:
1.非 !
2.与 -a
3.或 -o
if [ -f $1 -a $2 -gt 5] then echo \$2 is $2 echo "\$2 is bigger than 5 " fi
if 条件判断
then
command
elif 条件判断
then
command
elif 条件判断
then
command
...
else
command
fi
#!/bin/sh echo please type age read age if test $age -ge 0 -a $age -lt 3 then echo baby elif [ $age -ge 3 -a $age -lt 7 ] then echo child elif [ $age -ge 7 ] && [ $age -lt 18 ] then echo teenager elif test $age -ge 18 && test $age -lt 40 then echo youth elif test $age -ge 40 && [ $age -lt 60 ] then echo man else echo older fi
#!/bin/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
1)for 循环
I)
for((初始化变量值;结束循环条件;循环控制语句))
do
循环体
done
#!/bin/sh sum=0 for ((i=0;i<10;i++)) do echo $i sum=$[ $sum + i ] done echo $sum
2)第二种语法格式:
for 变量 in 值1 值2 ...值N
do
循环体
done
#!/bin/sh for MONTH in Jan Feb Mar Apr May Jun July Aug Sep Oct Nov Dec do echo $MONTH done
#!/bin/sh for file in `/bin/ls $1`; do echo $file; done
1.
while [ condition #循环条件 ]
do
#statements
#【循环体】
#【循环控制】
done
#!/bin/sh i=1 while [ $i -le 10 ] do sum=$((sum+i)) i=$[ i + 1 ] done echo $sum
#!/bin/sh i=1 sum=0 while test $i -le 10 do sum=$[ $sum + $i ] i=`expr $i + 1` done echo $sum
while read -r line
do
#【循环体】
done
#!/bin/sh #Read /ect/sysconfig/network-scripts/ifcfg-eh0 and print out FILE=/etc/sysconfig/network-scripts/ifcfg-eh0 while read -r line do echo $line done < $FILE
read中
参数 -r 屏蔽,
若是没有该选项,则做为一个转义字符,有的话 就是个正常的字符了。
command < file 将输入重定向到 file。
第一种语法格式:
#!/bin/sh echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' r'm;; esac
第二种语法格式:
#!/bin/sh echo "input from :one two three ....." read input case $input in one | two) echo "your input is one or two" ;; three | four) echo "your input is three or four " ;; five) echo "your input is five" ;; *) echo your input is $input ;; esac
shell脚本的调用(在一个脚本中去调用另一脚本)
which touch # 查看shell位置
#!/bin/sh source /home/hadoop/shell/hello.sh
1.date CST中央标准时间
Mon Jun 5 15:11:44 CST 2017
2.date -R 带时区的时间
Mon, 05 Jun 2017 15:14:44 +0800
$ date '+%Y-%m-%d %H:%M:%S'
2017-05-02 11:20:10
选项:-s
用法:# date -s "2016-12-08 10:43:00"
ntpdate 命令
用法:# ntpdate 网络时间服务器(182.92.12.11)
sudo ntpdate ntp.api.bz
crontab -l (list ) #查看目前的计划任务列表
crontab -r (remove) #删除计划任务
crontab -e (eidt) #编辑周期性计划任务
ps -ef | grep crond $查看此进程是否开启
默认进程是开启的,若是没有开启,可使用命令手动开启
# service crond status
# service crond start
# service crond stop
# service crond restart
# .---------------- 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 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed * * * * * 分钟 小时 天(of月) 月(of年) 星期(of周)
特殊字符
""表明全部的取值范围内的数字,如月份字段为,则表示1到12个月;
"/"表明每必定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
"-"表明从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
","分散的数字(不必定连续),如1,2,3,4,7,9。
注:因为各个地方每周第一天不同,所以Sunday=0(第一天)或Sunday=7(最后1天)。
实例)
每一分钟执行一次command(因cron默认每1分钟扫描一次,所以全为*便可) */1 * * * * /bin/date >> /root/Desktop/date.txt 每小时的第3和第15分钟执行command 3,15 * * * * /bin/cp /root/Desktop/date.txt /root/date.log 天天上午8-11点的第3和15分钟执行command: 3,15 8-11 * * * command 每隔2天的上午8-11点的第3和15分钟执行command: 3,15 8-11 */2 * * command 每一个星期一的上午8点到11点的第3和第15分钟执行command 3,15 8-11 * * 1 command 每晚的21:30执行command: 30 21 * * * command 天天晚上6点到次日早上6点 每15分钟记录一次时间到/home/uer01/2.log文件中 */15 18-23,0-6 * * * /bin/date >> /home/user01/2.log 0,15,30,45 18-23,0-6 * * * /bin/date -R >> /home/user01/2.log
右击虚拟机-> 快照-> 拍摄快照
从快照中克隆
从虚拟机中克隆
管理-> 克隆->选择从快照(虚拟机当前状态)->完整克隆
克隆出来的虚拟机 要修改主机名,映射,还有ip地址,关键是要修改网卡信息
1) 修改主机名
# vi /etc/sysconfig/network #修改主机名
2) 修改映射
# vi /etc/hosts #修改主机映射(linux,windows都要改)
3) 修改 网卡
# vi /etc/udev/rules.d/70-persistent-net.rules # 网卡的信息(mac地址HWADD)
删除原来的网卡信息(经过mac地址来区分)
并将新的网卡的name信息改成eth0
修改后内容
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="00:0c:29:b6:46:5d", ATTR{type}=="1", KERNEL=="eth", NAME="eth0"
4) 修改ip
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
删除uuid,修改mac地址,IPADDR,ONBOOT,BOOTPROTO
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0c:29:b6:46:5d
IPADDR=192.168.239.201
PREFIX=24
GATEWAY=192.168.239.2
DNS1=192.168.239.2
NAME="System eth0"
# reboot 重启虚拟机(由于修改了主机名)