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

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

Jun 27, 2017 am 10:10 AM
basic shell

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在 Windows 11 上安裝經典 Shell? 如何在 Windows 11 上安裝經典 Shell? Apr 21, 2023 pm 09:13 PM

如何在 Windows 11 上安裝經典 Shell?

探險家.exe 在系統啟動時不啟動 [修復] 探險家.exe 在系統啟動時不啟動 [修復] Jun 03, 2023 am 08:31 AM

探險家.exe 在系統啟動時不啟動 [修復]

PowerShell 部署失敗並出現 HRESULT 0x80073D02 問題修復 PowerShell 部署失敗並出現 HRESULT 0x80073D02 問題修復 May 10, 2023 am 11:02 AM

PowerShell 部署失敗並出現 HRESULT 0x80073D02 問題修復

在 Windows 上執行 shell 腳本檔案的不同方法 在 Windows 上執行 shell 腳本檔案的不同方法 Apr 13, 2023 am 11:58 AM

在 Windows 上執行 shell 腳本檔案的不同方法

Linux快速刪除檔案末尾行的操作步驟 Linux快速刪除檔案末尾行的操作步驟 Mar 01, 2024 pm 09:36 PM

Linux快速刪除檔案末尾行的操作步驟

超硬核! 11個非常實用的 Python 和 Shell 拿來就用腳本實例! 超硬核! 11個非常實用的 Python 和 Shell 拿來就用腳本實例! Apr 12, 2023 pm 01:52 PM

超硬核! 11個非常實用的 Python 和 Shell 拿來就用腳本實例!

以下是 Open Shell Windows 11 無法正常運作問題的修復 以下是 Open Shell Windows 11 無法正常運作問題的修復 Apr 14, 2023 pm 02:07 PM

以下是 Open Shell Windows 11 無法正常運作問題的修復

如何安裝 Open Shell 以恢復 Windows 11 上的經典開始功能表 如何安裝 Open Shell 以恢復 Windows 11 上的經典開始功能表 Apr 18, 2023 pm 10:10 PM

如何安裝 Open Shell 以恢復 Windows 11 上的經典開始功能表

See all articles