首頁  >  文章  >  運維  >  分享一些linux維運的基礎知識

分享一些linux維運的基礎知識

零下一度
零下一度原創
2017-06-27 10:10:322250瀏覽
1、回顾基础命令
2、脚本
3、变量
4、别名
5、条件判断
6、test判断
 
一、回顾基础命令
shutdown --关机/重启
exit --退出当前shell
rmdir --删除空目录
du --查看目录占用的存储空间
df --查看已 经挂载的文件系统的空间使用情况
ln --创建链接
cat --显示文件的所有内容
head --显示文件的头部
tail --显示文件的尾部
less --分屏/分页 显示文件内容
dirname --取出目录
basename --取出文件名
history --历史命令
1、ln
# ln -s [目标] [源 -- 创建软链接 (symbolic link)
# ln [目标] [源] -- 创建硬链接
2、cat
concatinate,把文件的内容按顺序连接起来,输出到标準输出。目前,只需要简单理解成显示文件的内容即可
# cat f1 -- 显示文件 f1 的内容到屏幕上
# cat -n f1 -- 显示文件的内容,并且加上行号
# cat -A f1 -- 打印出一些不可见的字符和位置标记
3、head
读取文件的头部
# head -n 3 /etc/passwd --读取文件前面三行
# head -n -3 /etc/passwd --讀取檔案時,丟掉檔案的後三行;
# head -c 3 /etc/passwd --讀取檔案的前面三個位元組
# 頭 -c 10m /dev/zero > f1 --建立一個10M的檔案
4、tail
讀取檔案的尾部
# tail -n 3 /etc/passwd -- 讀取檔案的後面三行
# tail -c 3 /etc/passwd -- 讀取檔案的後面三個位元組
# tail -n +28 /etc/passwd -- 讀取檔案中從第28行開始直到結尾的所有行
# tail -f /etc/passwd -- 追蹤檔案尾部內容的變化,常用觀察日誌檔案的變化
#5、history
# set -o history --啟用指令歷史功能,預設記錄在檔案~/.bash_history 中
# set +o history --關閉指令歷史功能
# history --顯示最近n條歷史指令
註:以下三個變數用於控制指令歷史的數量,以及是否記錄時間戳記
# vim /etc/bashrc --一般配置在該檔案當中,使用者層級可配置在~/. bashrc
HISTSIZE=1000000 --儲存多少筆記錄
HISTFILESIZE=2000000 --指令歷史檔案的最大尺寸
HISTTIMEFORMAT='[%Y-%m- %d %H:%M:%S] ' --指令歷史的時間戳格式
export HISTSIZE HISTFILESIZE HISTTIMEFORMAT --把他們定義成環境變數
 
#二、腳本
1、如何執行腳本
   # vim test.sh
#    #!/bin/bash
  echo 'hello world'
# bash test.sh
## bash test.sh
# bash -x test.sh --顯示腳本執行程序的資訊
# sh test.sh
source test.sh### ########## . test.sh#######
--上述兼為非標準執行腳本,腳本檔案可以沒有可執行權限;下列為標準執行:
## head -n 1 test.sh
!/bin /bash
# chmod a+x test.sh
# ./test.sh
可直接將腳本放到PATH 路徑下,直接當指令運行
注意:shell 必須以#! 開頭,讀作sha-bang,這兩個字元用來標識文件類型,#! 用來告訴系統,這個文件裡的內容將要用指定的解釋器來解釋,#! 之後的字串將會被解釋成一個程序,該程序用來解釋當前文件。如果沒有提供sha-bang這一行,當前 shell 將會自主猜測一個,但結果並不保證和預期一致;所以最好明確指定。 ./test.sh 的運作流程:
1、核心讀取該腳本,檢查檔案類型標記,取得解釋氣得路徑;
#2 、核心運行解釋器;
3、解釋器運行起來後,就打開腳本文件,解釋其執行
linux 自帶的諸多解釋器:#!/bin/ bash;#!/bin/sh;#!/usr/bin/perl;#!/bin/sed;#!/bin/awk
2、四則運算子
+ - * /
$(()) $[] expr let
# echo $(( 38%5)) --取餘
# echo $[38/5] --求商
## echo $((10**2)) --10的平方
2.1、expr
# expr 14 % 9 --取餘
# expr 34 / 9 --求商
# expr 30 \* 3 --使用乘號時,必須用反斜線屏蔽其特定意義
# expr index "sarasara" a --抓取第一個字元數字字串出現的位置
# expr substr "this is a test" 3 5 --抓取字符串
# expr length "this is a test" --計算字符串長度
# 2.2、let
let計算工具用於執行一個或多個表達式,變數計算中不需要加上$ 來表示變數。如果表達式中包含了空格或其他特殊字符,則必須引起來
# no=20
# let no++ --自增
# let no-- --自減
# let no+=10 --自增10
# let no=no+10 --同上
# let no-=15 --自減15
# let a=5+4 --變了a無須加$ 符號
# echo $a
3、shell設定檔
/etc/profile --全域設定文件,
/etc/bashrc --全域設定文件,一般用來定義環境變了
~/.bash_profile --使用者設定檔
~/.bashrc --使用者配置文件
~/.bash_logout --使用者設定文件,login shell 退出時會讀取該文件
4、shell種類
根據shell的啟動方式不同,可以大致將shell分成以下幾種:
login shell --在文字介面登錄,如su -;讀取shell設定檔順序如下:
/etc/profile——~/.bash_profile——~/.bashrc——/etc/bashrc
interactive shell --gnome-terminal 中預設的shell;讀取shell設定檔順序如下:
~/.bashrc —— /etc/bashrc
non-interactive shell --用來執行腳本的shell
4.1、在~/.bashrc 中設定變數v,要求變數只出現在互動shell中
# vim ~/.bash_profile --標識shell 是否登入shell
LOGINSHELL=1
vim ~/.bashrc --不是登入shell 時,才設定變數
if [ "$LOGINSHELL" != 1 ]; then
v="interactive shell only"
fi
#5、指令優先權
##別名> 函式>內部命令> 外部命令
6、shell特殊字元
對於shell來說,有些字元除了它本身的意義之外,還有特殊的意義,如果要在字串中包含特殊字符,就必須透過引用(quoting)的方法來去除特殊字符的特殊意義。以下列出的是部分特殊字元:
~ --不被引用的話將會被shell 替換成家目錄
& --把程式放到後台執行
$ --dollar 符,可用來參數展開
${} --變數處理,可對變數的內容做替換,刪除,抽取等操作
* --星號,通配符,匹配所有字元
? --問號,通配符,匹配任一字元
() --指令組
{} --指令組
#"" --雙引號,引用符號;可以去除大多數特殊字元的特殊意義,除$;`;!;\ 外
'' --單引號,引用符號;可以移除所有特殊字元的特殊意義,除自己本身
#. --相當於source指令;可用於設定隱藏檔案;用於目錄名稱時,代表目前目錄
#/ --斜杠,路徑分隔符,根目錄
\ --反斜杠,可用來去除單個字符的特殊意義,也就是所謂的“轉義“,也可用於表示特殊字符,如換行符(\ n)
`` --反撇號,指令優先執行,和$()意義是一樣的;如果有嵌套那麼不能用``號
#$(())和$[] --運算子
#: --空指令
; --指令分割;不考慮上一條指令所執行的結果
;; --case 選項的結束符號
# - -註解
&& --邏輯與;可對指令進行分割;但是需要考慮上一條指令所執行的結果
#
|| --邏輯或;可分割指令;不需要考慮上一條指令執行結果
----------- -------------------------------------------------- ---
# echo 'hello world;' "hello world;" hello\ world; --用三種引用符合去除空格的特殊意義
 
#三、變數
1、本地變數
#目前使用者自訂的變數;目前進程有效,其他行程或目前進程的子程序無效
# a=123
# echo $a
## unset a --取消變了定義
2、環境變量
目前進程有效,且能被子進程呼叫;
# env --檢視目前系統所有環境變數
# set --檢視目前系統所有環境變數與臨時變數
# echo $PATH -- 顯示PATH變數的內容
## export hi=hello --定義環境變數;工作當中一般喜歡把即用的環境變了寫在~/.bash_profile
幾個常見環境變數:
#PATH --影響命令的搜尋
##PS1 --命令提示字元
TMOUT --逾時時間,單位為S,時間一到,自動退出interactive shell ;所以最好將其設為唯讀變數
# declare -r TMOUT=60
#HISTSIZE, HISTFILESIZE, HISTTIMEFORMAT --指令歷史
 
3、系統變數
又叫bash中內建的變數;shell本身已經固定好的一些變數
$# --腳本後面接參數個數
$* --腳本後面所有的參數(被雙引號包含則被當成一個字串輸出)
$@ --腳本後面所有的參數(被雙引號包含還是保留各參數的邊界)
#$? --上一條指令執行後傳回的狀態
# $$ --目前進程的進程編號
$! --後台運行的最後一個進程號
!$ --最後一條指令或參數
!! --最後一條指令的歷史記錄
#$0 --目前程式的程式名稱或流程
$1~$n --位置參數變數
#!/bin/bash
echo "\$0 = $0 "
echo "\$# = $#"
echo "\$* = $*"
echo "\$1 = $2"
echo "\$7 = $7"
echo "\$11 = ${11}"
# chmod a+x test.sh
# ./test.sh a b c
4、變數定義
a、預設下,變數類型沒啥要求。可以給變數賦任何值,但是等號兩邊不能有任何的空格
b、變數名區分大小寫
c、變數名不能以數字或特殊符號開頭
d、將指令執行的結果儲存到變數
5、呼叫變數
## a=$(hostname)
# A =123456789
# echo $A
# echo ${A:2:3}
6、陣列
#陣列的定義:用小括號擴大定義數組,括號裡的元素用空格隔開
# array[0]=var1
# array[1]=var2
# # array[2]=var3
# array=(var1 var2 var3) --等同於上述三行,定義數組
# echo ${array[0]} --取數組第一個值
# echo ${array[*]} --取陣列所有值
## echo ${array[@]} --同上
7、declare 定义有类型的变量
-i --将变量看成整数
-r --定义只读变量
-x --将变量导出到环境变量
-a --将变量看成数组
8、read 交互式定义变量
-p --提示信息
-n --字符数
-t --超时
-s --不显示
 
四、別名
命令的別名,顾名思义,就是可以通过別的名字来执行命令。通常用于简化命令的输入,或者为命令增加一些参数,或者是单纯地为命令添加多个访问名称。
# alias cp mv rm --查看cp, mv, rm这三个命令是不是別名
# unalias rm -- 删除别名 rm
# alias cdyum='cd /data/yum' -- 简化输入
# alias rm='rm -i' -- 为命令增加参数
-- 通常別名是在配置文件~/.bashrc 中设置的
1、验证别名、函数、内部命令、外部命令的优先级别
# alias pwd='echo it is an alias' --创建一个 pwd 别名
# function pwd() { echo "this is a function"; } --创建一个 pwd 函数
# pwd --运行pwd,发现输出是别名
# unalias pwd --删除别名,再运行 pwd,发现输出是函数内容
# unset pwd --删除函数,再运行 pwd,才是输出当前所在路径
所以:别名 > 函数 > 内部命令 > 外部命令
 
五、条件判断
# vim test
----------------------
if [ 条件 ];then
command...
fi
----------------------
if [ 條件];then
# command...
else
command...
fi
---------------- ------
if [ 條件1 ];then
command1...
elif [ 條件2 ];then
command2. ..
else
command3...
fi
------------------ ----
if [ 條件1 ];then
command1...
if [ 條件2 ];then
command2...
fi
else
if [ 條件3 ];then
command3...
elif [ 條件4 ];then
command4...
else
command5...
fi
fi
 
六、test判斷
test == [ judge ]
1、檔案存在與否的判斷
# vim test.sh
#!/bin/bash
if test -e $1;then --是否存在;還有-p;-c;-b;-L
##if [ -f $1 ];then --使用[ judge ] 替換
#if test
-f $1;then --是否存在並且為普通文件
if test
-d $1;then --是否存在並且為目錄
if test
-S $1;then --是否存在並且套接字檔案
echo 'YES'
fi
# chmod a+x test.sh
# ./test.sh [path]
2、檔案權限相關判斷
-r;-w;-x --是否有讀,寫,執行權限
-u --是否有suid
-g --是否有sgid
-k --是否有t位元
-s --是否為空白文件,-s表示非空;! -s 空檔
3、字串判斷
= --等於則為真,等於號兩邊必須有空格;也可以是:==
!= --不相等則為真
-z 字串--字串的長度為零則為真
-n 字串--字串的長度零則為真
if test $num1 = $num2;then
#if [ $num1 = $num2 ];then
############################################## ########if [ -n $num1 ];then############4、數值判斷#########-eq --等於則為真######-ne --不等於則為真######-gt --大於則為真######-ge --大於等於則為真###### -lt --小於則為真######-le --小於等於則為真####
if test $[num1] -eq $[num2];then
#if [ $[num1] -eq $[num2] ];then
5、邏輯判斷
-a 和&& --邏輯與
-o 和|| --邏輯或
#! --非
優先權:與>或>非
#if test -e $1 -o -e $2;then --判斷是否有一個檔案存在
if [ -e $1 -o -e $2 ];then --同上
if test ! -e $1 -o ! -e $2;then --判斷兩個檔案沒有同時存在
if [ ! -e $1 -o ! -e $2 ];then --同上
 

以上是分享一些linux維運的基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn