~- 上一個工做目錄node
~+ 當前工做目錄linux
touch f{1..100} 建立名爲f1~f100的文件git
touch f{a..z} 建立名爲fa~fz的文件bash
[:lower:] 任意小寫字母ide
[:upper:] 任意大寫字母spa
[:digit:] 任意數字,至關於0-9操作系統
[:alpha:] 任意大小寫字母指針
[:alnum:] 任意數字或字母orm
[:space:] 空格blog
[:punct:] 標點符號
1.顯示/var目錄下全部以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄
ls /var/l*[[:digit:]]*[[:lower:]]
2.顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄
ls /etc/[0-9]*[^0-9]
3.顯示/etc目錄下以非字母開頭,後面跟了一個字母及其餘任意長度任意字符的文件或目錄
ls /etc/[^[:alpha:]][[:alpha:]]*
4.顯示/etc目錄下全部以m開頭以非數字結尾的文件或目錄
ls /etc/m*[^0-9]
5.顯示/etc目錄下全部以.d結尾的文件或目錄
ls -da /etc/*.d
6.顯示/etc目錄下,全部的.conf結尾,且以m,n,r,p開頭的文件或目錄
ls -da /etc/[mnrp]*.conf
touch命令
-a 僅改變atime
-m 僅改變mtime
-c 文件存在則刷新,不存在也不會建立
-t [YY]MMDDhhmm[.ss] 改變atimemtime
touch -t 201605051010.30 file1
cp命令
-a 歸檔,至關於-dR --preserv=all
-d --no-dereference --preserv=links 不復制原文件,只複製連接名
-p 等同--preserv=mode,ownership,timestamp
-r recursive 遞歸
-v verbose
cp -r /etc/sysconfig/ /testdir/xxx
沒有xxx目錄,則把sysconfig目錄複製到testdir下並重命名爲xxx
cp -r /etc/sysconfig/ /testdir/xxx
已存在xxx目錄,則sysconfig複製爲xxx目錄中的子目錄
1.定義別名命令baketc,天天將/etc目錄下全部文件,備份到/testdir獨立的子目錄下,並要求子目錄格式 爲backupYYYY-mm-dd,備份過程可見
alias baketc='cp -rpv /etc/ /tmp/testdir1/backup-`date +%F`'
2.建立/testdir/rootdir目錄並複製/root全部下文件到該目錄內,要求保留原有權限
cp -R --preserve=mode /root/ /testdir/rootdir
建多層目錄,例
mkdir -pv /testdir/dir1/{x,y}/{a,b} mkdir -pv /testdir/dir2/{x/{a,b},y} mkdir -pv /testdir/dir{3,4,5/{dir{6,7}}}
mv 移動並重命名文件a.txt,不影響文件的用戶數據及 inode 號
它們的inode和data block是同樣的,改其中一個的內容,另外一個的內容也隨之變化,說明它們是同一個文件,至關於一個文件兩個名字 -rw-r--r-- 2 2是連接數。還能夠繼續作硬連接如ln bb cc,連接數隨之增長爲3。
刪除如bb文件,aa和cc依然存有數據,連接數減小爲2。
建立硬連接不能跨分區或文件系統
不能對目錄進行建立,只可對文件建立
有時候磁盤空間未滿,但不能建立文件,多是inode耗盡
實驗耗盡inode號
for id in {1..204800};do touch f$id;echo f$id is created;done
watch -n1 'df -i' // df -i 查看inodes大小,wathc -n1 每秒查看執行結果
建立的文件即便爲空,自己的元數據也會佔用磁盤空間
ls -i // inode 不一樣分區的節點號有可能相同
ln -s source softlink
原始文件相對路徑:相對於軟連接文件路徑,而不是相對於當前工做目錄
find /testdir/ -samefile /testdir/aa // 查看路徑/testdir有相同inode的全部硬連接
find /testdir/ -lname aa // 查找在路徑/testdir下的文件aa的軟連接
file descriptor 文件描述符
ps aux 看到某個進程的pid
cd /proc/PID/fd 看到有文件
當前tty0
ls > /dev/pts/1 // 將ls命令的結果發送到tty1終端上了
stdinput 0
stdouput 1
stderr 2
BADCOMMAND 2> file 記錄錯誤信息
正確錯誤信息都輸出在同一個文件,例:
ls /etc/issue xxx &> file1
等價於
ls /etc/issue xxx > file1 2>&1
(ls;pwd)>f3 //多條命令(用括號引發來)同時執行輸出到一個文件
ls /testdir/ xxx 1> right.txt 2> fail.txt
set+C 容許覆蓋
set-C 禁止覆蓋,能夠追加
echo cenotos | passwd --stdin wang &> /dev/null
mail -s hello user1
hi
how are you
. //以點結束
EOT
cat /var/spool/mail/user1 能夠讀到郵件
或者user1登陸 敲命令 mail 能夠收到郵件
羣發郵件,將郵件內容保存到一個文件mail.txt
mail -s tongzhi user1 < mail.txt 每次將user1更改用戶便可
練習題
一、將/etc/issue文件中的內容轉換爲大寫後保存至/tmp/issue.out文件中
cat /etc/issue|tr 'a-z' 'A-Z' > /tmp/issue.out
二、將當前系統登陸用戶的信息轉換爲大寫後保存至/tmp/who.out文件中
echo `who`|tr 'a-z' 'A-Z' > /tmp/who.out
三、一個linux用戶給root發郵件,要求郵件標題爲」help」,郵件正文以下:
Hello, I am 用戶名,the system version is here,pleasehelp me to check it ,thanks!
操做系統版本信息
echo -e "I am `whoami`.\nThe system is `cat /etc/redhat-release `."|mail -s help root
四、將/root/下文件列表,顯示成一行,並文件名之間用空格隔開
ls -1 /root/ |tr '\n' ' ' //方法一 echo $(ls -a) //方法二
五、file1文件的內容爲:」1 2 3 4 5 6 7 8 9 10」 計算出全部數字的總和
cat file1 |tr ' ' '\n'|awk '{sum+=$1}END{print sum}' //方法一 i=$((`tr " " "+" < file1`));echo $i //方法二 echo '1 2 3 4 5 6 7 8 9 10'|tr ' ' '+'|bc //方法三 echo $[`echo '1 2 3 4 5 6 7 8 9 10'|tr ' ' '+'`]
六、刪除Windows文本文件中的'^M'字符
sed -i "s/\^M//g" wintxt //方法一 cat a.txt|tr -d '\015' > f2 再cat -A f2 看到沒^M了 // ^M對應十進制13,八進制015 //方法二
七、處理字符串「xt.,l 1 jr#!$mn2 c*/fe3 uz4」,只保留其中的數字和空格
cat string1|tr -d [[:alpha:]][[:punct:]] 或 echo 'xt.,l 1 jr#!$mn2 c*/fe3 uz4'|tr -d -c '[:digit:] \n'
八、將PATH變量每一個目錄顯示在獨立的一行
echo $PATH|tr ':' '\n'
九、刪除指定文件的空行
sed /^$/d file2 或 sed /^[[:space:]]*$/d file2 //方法一 cat b.txt|tr -s '\n' //方法二
十、將文件中每一個單詞(字母)顯示在獨立的一行,並沒有空行
cat /etc/init.d/functions |tr -cs '[:alpha:]' '\n'