參考書籍《Linux命令行與shell腳本編程大全》
複製文件
cp 1.sh -i 13.sh
cp -i 在覆蓋前詢問用戶
cp -v 告訴用戶正在做什麼
創建目錄
mkdir
創建多級目錄
mkdir -p New_Dir/Sub_Dir/Under_Dir
刪除文件夾
rmdir (只能刪除空目錄)
查看文件類型
file
file 【文件名】
[newcs@dsszbyz-etl-inf7 day]$ file *
exec_bbzx_agent_work_operate_dd.sh: Bourne-Again shell script, UTF-8 Unicode text executable
exec_bbzx_daducha_day.sh: Bourne-Again shell script, UTF-8 Unicode text executable, with very long lines
查看文件內容
cat
cat -n 【文件名】 空行也有行號
cat -b 【文件名】 只給有效行加行號
[newcs@dsszbyz-etl-inf7 day]$ cat -b exec_bbzx_agent_work_operate_dd.sh
1 #!/bin/bash
2 #功能: 循環跑數據
3 #參數:
4 ##輸入日期,格式:20190101,不帶參數默認前一天
5 cd /home/newcs/kfyy/rpt_src/bash/hour
6 if [ ! -n "$1" ] ;then
7 v_day=`date -d "-1 day" "+%Y-%m-%d"`
8 else
9 inday="$1"
10 v_day="${inday:0:4}-${inday:4:2}-${inday:6:2}"
11 fi
12 gap=3600 #間隔1800秒
more 分頁顯示文件內容
less 功能比moer 更強大("less is moer")
tail 指定顯示最後多行
tail -n 50 【文件名】 顯示末尾50行 (簡寫tail-20)
tail -f 【文件名】 實時顯示文件中的新增內容(多用於實時監測系統日誌)
ctrl +c 退出
head 顯示開頭多行
head -n 20 【文件名】 顯示開頭50行 (簡寫head -20)
查看進程
ps
單獨的ps命令,只會顯示運行在當前控制檯下的屬於當前用戶的進程
[newcs@dsszbyz-etl-inf7 ~]$ ps
PID TTY TIME CMD
4285 pts/66 00:00:00 bash
10616 pts/66 00:00:00 ps
[newcs@dsszbyz-etl-inf7 ~]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2018 ? 00:35:21 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 2018 ? 00:00:12 [kthreadd]
root 3 2 0 2018 ? 00:00:05 [ksoftirqd/0]
UID:啓動這些進程的用戶。
PID:進程的進程ID。
PPID:父進程的進程號(如果該進程是由另一個進程啓動的)。
C:進程生命週期中的CPU利用率。
STIME:進程啓動時的系統時間。
TTY:進程啓動時的終端設備。
TIME:運行進程需要的累計CPU時間。
CMD:啓動的程序名稱。
ps -l 參數 l ,會顯示更多的列。如下
F:內核分配給進程的系統標記。
S:進程的狀態(O代表正在運行;S代表在休眠;R代表可運行,正等待運行;Z代表僵
化,進程已結束但父進程已不存在;T代表停止)。
PRI:進程的優先級(越大的數字代表越低的優先級)。
NI:謙讓度值用來參與決定優先級。
ADDR:進程的內存地址。
SZ:假如進程被換出,所需交換空間的大致大小。
WCHAN:進程休眠的內核函數的地址。
Unix 風格: -ef
BSD 風格: f
GUN長參數 風格:-forest
顯示層級父子關係
掛載、移除其他存儲設備
mount 掛載到某個文件路徑下
umount 卸載移動存儲設備
查看設備上的磁盤剩餘空間
df
df -h 以M、G爲單位顯示剩餘空間
設備的設備文件位置;
能容納多少個1024字節大小的塊;
已用了多少個1024字節大小的塊;
還有多少個1024字節大小的塊可用;
已用空間所佔的比例;
設備掛載到了哪個掛載點上。
du
顯示文件夾目錄、文件夾大小、文件大小
-a #顯示目錄中文件的大小 單位 KB 。
-b #顯示目錄中文件的大小,以字節byte爲單位。
-c #顯示目錄中文件的大小,同時也顯示總和;單位KB。
-k 、 -m 、#顯示目錄中文件的大小,-k 單位KB,-m 單位MB.
-s #僅顯示目錄的總值,單位KB。
-h
顯示文件夾大小
排序 sort
默認按照字符串排序
管道命令 “|”
將du命令的輸出傳給 sort 命令
搜索數據
grep 自動模糊匹配
-v 反向搜索
-n 顯示匹配模式的行所在的行號
-c 有多少行含有匹配
-e 指定多個條件,可用正則表達式代替
例:查詢 包含t 或 f的文件
壓縮文件(.bz2 .Z .gz .zip)
gzip
gzip:用來壓縮文件。
gzcat:用來查看壓縮過的文本文件的內容。
gunzip:用來解壓文件
歸檔數據 tar(較壓縮更常用),
通常文件以'*.tgz' 結尾 '*.tar.gz'
tar 【文件名】.tar.gz
外部命令(文件系統命令)
並不是shell程序的一部分,例如:ps
找到命令路徑
[newcs@dsszbyz-etl-inf7 hour]$ type -a ps
ps is /bin/ps
ps is /usr/bin/ps
[newcs@dsszbyz-etl-inf7 hour]$ which ps
/bin/ps
當外部命令執行時,會創建出一個子進程。這種操作被稱爲衍生(forking)
[newcs@dsszbyz-etl-inf7 hour]$ ps --forest
PID TTY TIME CMD
10083 pts/117 00:00:00 bash
2658 pts/117 00:00:00 \_ ps
內建命令(不用創建子進程)
有些命令有多種實現方式(內建、外部命令)例如:pwd 、 echo
[newcs@dsszbyz-etl-inf7 day]$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
pwd is /usr/bin/pwd
[newcs@dsszbyz-etl-inf7 day]$ which pwd
/bin/pwd
type
which 查找文件的(會在環境變量$PATH設置的目錄裏查找符合條件的文件)
內建命令history(最近使用的命令列表)
環境變量
env printenv
顯示變量
打印 echo $【變量名】 例:echo $JAVA_HOME
直接顯示環境變量,對應的文件夾內容
[newcs@dsszbyz-etl-inf7 day]$ ll $JAVA_HOME
total 25928
drwxr-xr-x 2 root root 4096 Mar 16 2018 bin
-rw-r--r-- 1 root root 3244 Dec 20 2017 COPYRIGHT
drwxr-xr-x 4 root root 147 Mar 16 2018 db
drwxr-xr-x 3 root root 4096 Mar 16 2018 include
-rw-r--r-- 1 root root 5202881 Dec 20 2017 javafx-src.zip
drwxr-xr-x 5 root root 4096 Mar 16 2018 jre
drwxr-xr-x 5 root root 4096 Mar 16 2018 lib
-rw-r--r-- 1 root root 40 Dec 20 2017 LICENSE
drwxr-xr-x 4 root root 60 Mar 16 2018 man
-rw-r--r-- 1 root root 159 Dec 20 2017 README.html
-rw-r--r-- 1 root root 424 Dec 20 2017 release
-rw-r--r-- 1 root root 21095860 Dec 20 2017 src.zip
-rw-r--r-- 1 root root 63933 Dec 20 2017 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root 145180 Dec 20 2017 THIRDPARTYLICENSEREADME.txt
設置局部用戶定義變量
[newcs@dsszbyz-etl-inf7 ~]$ myParm="parm1" //定義變量
[newcs@dsszbyz-etl-inf7 ~]$ echo $myParm
parm1
[newcs@dsszbyz-etl-inf7 ~]$ unset myParm //刪除變量
[newcs@dsszbyz-etl-inf7 ~]$ echo $myParm
[newcs@dsszbyz-etl-inf7 ~]$
定義數組
mytest=("one" "two" "three" "four" "five")
${mytest[1]} //two
//打印數組所有值
echo ${mytest[*]}
parm1=("day_id" "${v_dayid}")
parm2=("hour_id" "${v_hourid}")
parmlist=(${parm1} ${parm2})
追加環境變量 PATH
環境變量的本質是方便運行程序命令。
例如,運行java。沒有配置PATH時會報找不到的錯誤,必須要使用全路徑才能找到。
多個路徑是用“:”分割,追加在末尾時。
PATH = $PATH:【路徑】
PATH變量的修改只能持續到退出或重啓系統
環境變量持久化
/etc/profile.d目錄中創建一個以.sh結尾的文件。把所有新的或修改過的全局環境變
量設置放在這個文件中。
在大多數發行版中,存儲個人用戶永久性bash shell變量的地方是$HOME/.bashrc文件。這一
點適用於所有類型的shell進程。
但如果設置了BASH_ENV變量,那麼記住,除非它指向的是$HOME/.bashrc,否則你應該將非交互式shell的用戶變量放在別的地方
系統權限設置
查看用戶賬號文件
登錄用戶名
用戶密碼
用戶賬戶的UID(數字形式)
用戶賬戶的組ID(GID)(數字形式)
用戶賬戶的文本描述(稱爲備註字段)
用戶HOME目錄的位置
用戶的默認shell
[newcs@dsszbyz-etl-inf7 ~]$ cat /etc/passwd | grep newcs
newcs:x:2007:2007::/home/newcs:/bin/bash
文件權限碼
權限問題,實際應用 java https://www.cnblogs.com/hihtml5/p/6483783.html
改變權限
chmod
安裝軟件
處理損壞的包依賴關係
有時在安裝多個軟件包時,某個包的軟件依賴關係可能會被另一個包的安裝覆蓋掉。這叫作
損壞的包依賴關係(broken dependency)。
如果系統出現了這個問題,先試試下面的命令:
yum clean all
然後試着用yum命令的update選項。有時,只要清理了放錯位置的文件就可以了。
如果這還解決不了問題,試試下面的命令:
yum deplist package_name
這個命令顯示了所有包的庫依賴關係以及什麼軟件可以提供這些庫依賴關係。
在vi 、vim編輯器中,向下翻頁 (ctrl+f) 向上翻頁 (ctrl+b)
查找字符串 斜杆“/”,再輸入查找內容。 “n”下一個。
wc 統計文本
[newcs@dsszbyz-etl-inf7 half_hour]$ wc exec_hlw_agent_call_condition_fh-2.sh
92 417 5850 exec_hlw_agent_call_condition_fh-2.sh
文本的行數
文本的詞數
文本的字節數
重定向
"<" 、">"、 "<<"