解釋: [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 重啓虛擬機(由於修改了主機名)