-x
參數運行 bash 腳本時,會顯示執行的語句# 也能夠在 demo.sh 中加上 set -x bash -x demo.sh
export PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '
參考php
輸入關鍵詞以後,連續使用ctrl+r
快速切換html
Ctrl+p/n
向上/向下 顯示緩存命令linux
須要遠程到其餘節點上執行一些 shell 命令,示例:git
#! /bin/sh set -x ssh root@192.168.3.43 > /dev/null 2>&1 << EOF cd /tmp touch test.txt exit EOF echo done
參考:github
echo "Start Datetime:" $(date +"%Y-%m-%d %H:%M:%S") for i in {1..3} do echo $i git pull --all if [ $? -ne 0 ] then echo "不成功" # 睡眠2s sleep 2 else break fi done echo "End Datetime:" $(date +"%Y-%m-%d %H:%M:%S")
參考:shell
判讀字符串(\(str)是否包含另外一個字符串(\)str1):centos
方法1:緩存
if [ `echo $str | grep -e '$str1'` ] ; then echo yes fi
方法2(若是$str1
在判斷中直接使用字符串而不是變量,則不能加引號,如if [[ $str =~ ^dx ]]
判讀字符串$str
是否以dx
開頭,^dx
不能加引號):bash
if [[ $str =~ $str1 ]] ; then echo yes fi
比較兩個字符串是否相等的辦法是:ssh
if [ "$test"x = "test"x ]; then
這裏的關鍵有幾點:
"$test"x
最後的x
,這是特地安排的,由於當$test爲空的時候,上面的表達式就變成了x = testx
,顯然是不相等的。而若是沒有這個 x
,表達式就會報錯:[: =: unary operator expected
參考:
默認去除url的最後斜線:
url=http://xxx/patch/xxx/xxxx/ tar_name=$(echo ${url%*/}|awk -F '/' '{print $NF}')
if [[ $tar =~ tar.gz ]];then echo "包含";fi
-xe
表示什麼意思-e
使shell當即退出,某些東西會返回一個錯誤(這一般在shell腳本中用做故障保護機制),
-x
容許詳細執行腳本,你能夠看到發生了什麼
https://blog.csdn.net/miyatang/article/details/8077123
var='pwd' # 或者 var=$(pwd)
echo -n "Enter var:";read var
符號 | 意義 |
---|---|
* | 表明0個到無窮多個任意字符 |
? | 表明必定有一個任意字符 |
[] | 一樣是表明必定有一個在中括號內的字符(非任意字符)。例如,[abcd]表明必定有一個字符,多是這四個中的一個 |
[-] | 若減號在括號內,表明在編碼順序內的全部字符。例如,[0-9]表明0-9之間全部數字,由於數字的語系編碼是連續的 |
[^] | 若中括號第一個字符是^ ,表示原向選擇,例如[^abc]表明必定有一個字符,只要是非a,b,c的其餘字符就接收 |
/etc/
目錄下文件夾名字恰好有5個字母的文件名:ll -d /etc/?????
/etc/
下面文件名含有數字的的文件名:ll -d /etc/*[0-9]*
/etc/
下面文件名開頭非小寫字母的文件名:ll -d /etc/[^a-z]*
/tmp
中:`符號 | 內容 |
---|---|
# | 註釋符號 |
\ | 轉義符號,將特殊字符或通配符還原成通常字符 |
豎線 | 管道 |
; | 連續命令執行分隔符,連續命令的界定 |
~ | 用戶的主文件夾 |
$ | 使用變量的前導符 |
& | 做業控制,將命令變成背景下工做 |
! | 邏輯運算意義上的「非」 |
>,>> | 數據流重定向,輸出導向,分別是「替換」與「累加」 |
<,<< | 數據流重定向,輸入導向 |
'' | 單引號,不具備變量置換的功能 |
"" | 具備變量置換的功能 |
`` | 兩個重音符中間爲能夠先執行的命令,也可使用$() |
() | 中間爲子shell的起始與結束 |
{} | 中間爲命令塊的組合 |
fdisk -l #查看磁盤狀況,發現有磁盤沒有分區,好比是/dev/xvde fdisk /dev/xvde #進行磁盤分區的操做
fdisk
磁盤分區時,能夠輸入m
,會有提示:
Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
我依次這麼輸入的:
add a new partition:n partion type:p Partion number:分區個數 1 First sector默認值:Enter Lase sector默認值:Enter print the partion table:p write table to disk and exit:w
分區完成以後,須要格式化
mkfs -t ext4 /dev/xvde1
將新建分區掛載到/data目錄下:
mkdir /data mount /dev/xvde /data
掛載完畢,輸入df -hT
能夠查看到新建的分區
設置文件系統的自動掛載
vi /etc/fstab
添加/dev/xvde1 /data ext4 defaults 0 1
在 fstab 配置文件中加入掛載點以後其實就已是開機自動掛載了,不須要用 mount 命令掛載。可是仍是用 mount 實在,由於最後仍是須要寫入/etc/fstab
第一段能夠用分區名,也能夠用 blkid
的方式獲取 UUID
的值
參考:
只將不帶註釋的內容提取出來,做爲配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
-v 參數表示反選
lsb_release -a # 適用於全部Linux系統 cat /etc/os-release #推薦 cat /etc/redhat-release # 僅適用於Redhat系列的Linux系統 uname -a # 查看Linux內核 cat /proc/version # 查看Linux內核
set -x
若是想隱藏某一行的內容:
set -x xxxx set +x yyyy set -x
[root@centos7.4 software]# netstat -apn 查看當前運行的全部進程的端口使用狀況 [root@centos7.4 software]# netstat -apn | grep 端口號 查看指定端口使用狀況 [root@centos7.4 software]# kill 指定端口的pid號 殺死指定進程(端口號對應的pid)
head -n X | tail -n 1
顯示你的環境變量PATH,一個目錄一行:
echo $PATH | tr : \\n
ls -l
查看文件是,顯示的就是 mtime;利用 stat file_name
能夠查看文件 「amc」time 。
echo "hello" >> issue
寫文件操做(>>
方式)不會致使 atime(訪問時間)的修改,可是 mtime 和 ctime 會發生修改。mtime 修改了咱們能夠理解的,畢竟咱們修改了文件的,
那爲什麼ctime也修改了呢, 仔細能夠發現咱們文件的大小發生了變化,也就是元數據發生了變化,因此ctime也是要變化的
參考:
/dev/xvda1
佔滿