linux字符雨,linux周记
shell腳本基礎(chǔ)
格式要求:首行shebaang機(jī)制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
shell腳本用途:
自動(dòng)化常用命令
執(zhí)行系統(tǒng)管理和故障排除
創(chuàng)建簡(jiǎn)單的應(yīng)用程序
處理文本或文件
bash中變量的種類
局部變量:生效范圍為當(dāng)前shell進(jìn)程;對(duì)當(dāng)前shell之外的其他shell進(jìn)程,包括當(dāng)前shell的子shell進(jìn)程均無(wú)效
環(huán)境變量:生效范圍為當(dāng)前shell進(jìn)程及其子進(jìn)程
本地變量:生效范圍為當(dāng)前shell進(jìn)程中某代碼片段,通常指函數(shù)
位置變量:$1,$2,$3,...來(lái)表示,用于讓腳本在腳本代碼中調(diào)用通過(guò)命令行傳遞給它的參數(shù)
特殊變量:$?,$0,$,$@,$#,$$,$!
變量賦值:? name=root ??變量疊加name="$name"hello
變量引用:? $name 或者 ${name}
弱引用:?? " " 其中的變量引用會(huì)被替換為變量值
強(qiáng)引用:?? ' ' 其中的變量引用不會(huì)被替換為變量值,而保持原字符串
set:????顯示已定義的所有變量
unset name:?刪除變量
例:編寫腳本顯示當(dāng)前主機(jī)信息
#!/bin/bash
aa=$[RANDOM%7+31]
bb="\e[1;${aa}m"
cc="\e[0m"
ipv4=$(ifconfig|sed -n '2p'|sed -r "s/.inet //"|sed -r "s/ .//")
echo "當(dāng)前主機(jī)系統(tǒng)信息如下:"
echo -e 主機(jī)名: $bb$(hostname)$cc
echo -e ipv4地址:$bb$ipv4$cc
echo -e 操作系統(tǒng)版本: $bb$(cat /etc/redhat-release|cut -d. -f1-2)$cc
echo -e 內(nèi)核版本 $bb$(uname -r)$cc
echo -e CPU型號(hào):$bb$(lscpu |grep "Model name"|tail -n1|tr -s " "|cut -d ":" -f2)$cc
echo -e 內(nèi)存大小:$bb$(free -mh|head -n2|tail -n1|tr -s " "|cut -d " " -f2)$cc
echo -e 硬盤容量:$bb$(fdisk -l|head -n2|tail -n1|cut -d, -f1|cut -d " " -f2-4)$cc
環(huán)境變量的聲明、賦值:
export name=VALUE
顯示所有環(huán)境變量:
env、printenv、export、declare -x
刪除變量:
unset name
BASH內(nèi)建的環(huán)境變量:
PATH、SHELL、USER、UID、HOME、PWD、SHLVL、LANG、MAIL、HOSTNAME、HISTSIZE、_下劃線
只讀變量:只能聲明,但不能修改和刪除
聲明只讀變量:
readonly name 、declare -r name
查看只讀變量:
readonly -p
$1,$2,$3,..對(duì)應(yīng)第1、第2、第3的參數(shù)
$0,???代表命令本身
$,???傳遞給腳本的所有參數(shù),全部參數(shù)合為一個(gè)字符串
$@,??傳遞給腳本的所有參數(shù),每個(gè)參數(shù)為獨(dú)立字符串
$#,? ? 傳遞給腳本的參數(shù)的個(gè)數(shù)
set -- ??清空所有位置變量
$? ??? 進(jìn)程使用退出狀態(tài)來(lái)報(bào)告成功或失敗,0代表成功,1-255代表失敗
bash有內(nèi)建的隨機(jī)數(shù)生成器變量:$RANDOM(0-32767)
例:計(jì)算/etc/passwd文件中第10和第20個(gè)用戶的uid之和
##!/bin/bash
id1=$(cat /etc/passwd|head -n10|tail -n1|cut -d: -f3)
id2=$(cat /etc/passwd|head -n20|tail -n1|cut -d: -f3)
sum=$(($id1+$id2))
echo $sum
邏輯運(yùn)算
true 1 , false 0
與:
1 與 1 = 1
1 與 0 = 0
0 與 1 = 0
0 與 0 = 0
或
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
非
!
測(cè)試命令: test EXPRESSION、[ EXPRESSION ] 、[[ EXPRESSION ]]
bash的數(shù)值測(cè)試
-v VAR 變量VAR是否設(shè)置
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
bash的字符串測(cè)試
= 是否等于
> ascii碼是否大于ascii碼
< 是否小于
!= 是否不等于
=~ 左側(cè)字符串是否能夠被右側(cè)的PATTERN,此表達(dá)式一般用于[[]]中;擴(kuò)展的正則表達(dá)式。
-z 字符串是否為空,空為真
-n 字符串是否不為空,不空為真 (用于字符串比較時(shí)用到的操作都應(yīng)該使用引號(hào))
bash的文件測(cè)試
-e 判斷文件是否存在,存在為真
-b 判斷是否為塊設(shè)備文件
-c 判斷是否為字符設(shè)備文件
-d 判斷是否為目錄文件
-f 判斷是否為普通文件
-L或-h判斷是否為符號(hào)連接文件
-p 判斷是否為管道文件
-S 判斷是否為套接字文件
bash的文件權(quán)限測(cè)試
-r 判斷是否可讀
-w 判斷是否可寫
-x 判斷是否可執(zhí)行
-u 判斷是否擁有suid權(quán)限
-g 判斷是否擁有sgid權(quán)限
-k 判斷是否擁有sticky權(quán)限
bash的文件屬性測(cè)試
-s 是否存在并且非空
-t 文件描述符是否在某終端已經(jīng)打開
-N 文件自從上一次被讀取之后是否被修改過(guò)
-O 當(dāng)前有效用戶是否為文件屬主
-G 當(dāng)前有效用戶是否為文件屬組
file1 -ef file2 ??file1是否是file2的硬鏈接
file1 -nt file2 ??file1是否比f(wàn)ile2新
file1 -ot file2 ??file1是否比f(wàn)ile2舊
bash的組合測(cè)試條件
EXPRESSION1 -a EXPRESSION2 ?并且
EXPRESSION1 -o EXPRESSION2 ?或者
COMMAND1 && COMMAND2 ?并且,短路與
COMMAND1 || COMMAND2 ?或者,短路或
!COMMAND 非
如 :[ -f "$FILE" ]&&[[ "$FILE" =~ .*.sh$ ]]
read輸入命令
-p 指定要顯示的提示
-s 靜默輸入,一般用于密碼
-n 指定輸入的字符長(zhǎng)度
-d ‘字符’ 輸入結(jié)束符
-t 等待輸入的時(shí)間
echo abc | { read x y z;echo $x$y$z;} ?使用管道 read會(huì)開啟子shell
條件選擇if語(yǔ)句
單分支
if 判斷條件;then
條件為真的分支代碼
fi
例:
#!/bin/bash
sda5=$(df -h|grep /dev/sda5|awk '{print$5}'|tr -d "%")
if [ $sda5 -ge 80 ]
then
echo "warning! /dev/sda5 is full"
fi
雙分支
if 判斷條件;then
條件為真的分支代碼
else
條件為假的分支代碼
fi
例:
#!/bin/bash
date=$(date "+%y%m%d")
size=$(du -sh /etc)
if [ -d /tmp/back ]
then
echo "date:$date">/tmp/back/info.log
echo "size:$size">>/tmp/back/info.log
cd /tmp/back
tar -zcvf etc-$date.tar.bz2 /etc info.log &>/dev/null
rm -rf /tmp/back/info.log
else
mkdir /tmp/back
echo "date:$date">/tmp/back/info.log
echo "size:$size">>/tmp/back/info.log
cd /tmp/back
tar -zcvf etc-$date.tar.bz2 /etc info.log &>/dev/null
rm -rf /tmp/back/info.log
fi
多分支
if 判斷條件1;then
條件為真的分支代碼
elif 判斷條件2;then
條件2為真的分支代碼
elif 判斷條件3;then
條件3為真的分支代碼
else
以上條件都為假的分支代碼
fi
條件判斷;case語(yǔ)句
case $變量 in
"選項(xiàng)1")
命令1
;;
"選項(xiàng)2")
命令2
;;
*)
命令3
;;
esac
bash的配置文件
全局配置:
/etc/profile
/etc/profile.d/.sh
/etc/bashrc
個(gè)人配置:
~/.bash_profile
~/.bashrc
shell 登錄兩種方式
交互式登錄:
執(zhí)行順序:/etc/profile --> /etc/profile.d/.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登錄:
執(zhí)行順序:/etc/profile.d/*.sh --> /etc/bashrc --> ~/.bashrc
profile類:為交互式登錄的shell提供配置
bashrc類:為非交互式和交互式登錄的shell提供配置
local命令
-i 不區(qū)分大小寫的搜索
-n N 只列舉前N個(gè)匹配項(xiàng)目
-r 使用基本正則表達(dá)式
find 路徑 條件 動(dòng)作
-maxdepth 最大搜索深度
-mindepth 最小搜索深度
-depth 先處理目錄里文件,再處理目錄
-regex 正則表達(dá)式
-path 不搜索目錄里文件
-perm 600 精準(zhǔn)權(quán)限查找
-perm -444 u g o 三者都有讀權(quán)限
-perm + centos7改為/
-perm /222 u g o 三者有一個(gè)有寫權(quán)限就可以
-ok-exec {} \; 對(duì)查找的結(jié)果進(jìn)行處理
-empty 空
參數(shù)替換 xargs
echo {1..100}|xargs -n1
echo user{1..10}|xargs -n1 useradd
壓縮、解壓縮
compress
-d 解壓縮
-c 結(jié)果輸出至標(biāo)準(zhǔn)輸出,不刪除源文件
-v 顯示詳情
zcat file.z? zcat file.gz ?bzcat file.bz2 ?xzcat file.xz ?不顯示解壓縮的前提下查看文本文件內(nèi)容
cat m | gzip > m.gz
lscpu | gzip > cpu.gz
bzip2 -k 保留原文件
tar -zcvf ??.tar.gz
tar -jcvf ??.tar.bz2
tar -Jcvf ??.tar.xz
split 分割一個(gè)文件為多個(gè)文件
rpm2cpio 包路徑 | cpio -idv ./路徑
-t預(yù)覽
ldd 查看依賴的庫(kù)
文本處理工具sed
選項(xiàng):
-n 不輸出模式空間內(nèi)容到屏幕,即不自動(dòng)打印
-e 多點(diǎn)編輯
-r 支持使用擴(kuò)展正則表達(dá)式
-i 原文編輯
-i.bak 備份文件并原處編輯
編輯命令:
d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)
p 打印當(dāng)前模式空間內(nèi)容,追加到默認(rèn)輸出之后
a\ 在指定行后面追加文本,
i\ 在前面插入文本
c\ 替換行為單行或多行文本
w 保存至指定文件
s/// 替換查找 ?g 行內(nèi)全局替換 ?p顯示替換成功的行 ? w將替換成功的行保存至文件中
rpm包管理
rpm -ivh 安裝并顯示詳細(xì)信息
rpm -qa 顯示所有包
rpm -qf 查詢指定文件在哪個(gè)包里
rpm -ql 查詢安裝位置
rpm -qR 查詢依賴
rpm -e 卸載
rpm -V 包校驗(yàn)
yum 管理rpm包
yum源支持文件服務(wù)器 http、https、ftp、file
yum配置文件 /etc/yum.repos.d/.repo
yum -y install 包名 ?安裝軟件
yum search 包名 ? 查詢軟件
yum -y reinstall 重新安裝
yum repolist 顯示倉(cāng)庫(kù)列表
yum remove 卸載程序包
yum update 升級(jí)程序包
yum info 查看程序包
yum clean all 清除緩存
ym history 查看安裝歷史
yum history info
yum history undo 撤銷
yum history redo 重裝
createrrepo 生成repodate
curl IP 查看網(wǎng)頁(yè)內(nèi)容
yum groupinstall......
dnf 新一代rpm軟件包管理器
安裝所需軟件包
dnf-conf-0.6.4-2.sdl7.noarch.rpm
dnf-0.6.4-2.sdl7.noarch.rpm
python-dnf-0.6.4-2.sdl7.noarch.rpm
配置文件:/etc/dnf/dnf.conf
倉(cāng)庫(kù)文件:/etc/yum.repos.d/.repo
日志:/var/log/dnf.rpm.log
編譯安裝
C語(yǔ)言源代碼編譯安裝三步驟:
1、./configure
2、make 根據(jù)Makefile文件,構(gòu)建應(yīng)用程序
3、make install 復(fù)制文件到相應(yīng)路徑
開發(fā)工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的linux字符雨,linux周记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 建行金卡储蓄卡会被降为普通卡吗?
- 下一篇: linux的ctrl alt f6的作用