more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索...
linux
目錄結構及文件基本操作
linux文件結構:
FHS(英文:Filesystem Hierarchy Standard
中文:文件系統層次結構標準),多數 Linux 版本采用這種文件組織形式,FHS
定義了系統中每個區域的用途、所需要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。
FHS 定義了兩層規范:
第一層是, / 下面的各個目錄應該要放什么文件數據,例如 /etc 應該要放置設置文件,/bin 與 /sbin
則應該要放置可執行文件等等。
第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如 /var/log 放置系統登錄文件、/usr/share
放置共享數據等等。
文件路徑:
命令pwd獲取當前文件路徑
文件基本操作:
創建文件:
touch test
創建目錄(用-p創建多層目錄):
mkdir ?-p
father/son/grandson
復制文件:
cp test father/son/grandson
復制目錄(-r 表示遞歸復制):
cp -r father family
刪除文件:
rm -f test ?(-f 忽略一些提示,強制刪除文件)
刪除目錄
rm -r family
移動文件:
mv file1 Documents
重命名:將文件"file1"重命名為"myfile"mv
舊的文件名 新的文件名
mv file1 myfile
批量重命名:用rename(需要使用到perl正則表達式來作為參數)
# 使用通配符批量創建 5 個文件
$touch file{1..5}.txt
# 批量將這 5 個后綴為 .txt 的文本文件重命名為以 .c 為后綴的文件
$rename 's/\.txt/\.c/' *.txt
# 批量將這 5 個文件,文件名改為大寫
$rename 'y/a-z/A-Z/' *.c
查看文件:
cat -n file1.txt ?(-n 參數可以顯示行號)
使用more和less命令分頁查看文件
如果說上面的 cat
是用來快速查看一個文件內容的,那么這個more和less就是天生用來"閱讀"一個文件的內容的,比如說"man"手冊內部就是使用的
less 來顯示內容。其中more命令比較簡單,只能向一個方向滾動,而"less"為基于"more"和"vi"(一個強大的編輯器,我們有單獨的課程來讓你學習)開發,功能更強大。less
的使用基本和 more 一致,具體使用請查看 man 手冊,這里只介紹 more 命令的使用。
打開后默認只顯示一屏內容,終端底部顯示當前閱讀的進度(百分比)。可以使用Enter鍵向下滾動一行,使用Space鍵向下滾動一屏,按下h顯示幫助,q退出。
使用head和tail命令查看文件
tail -n 5 file.txt ?(看最后5行,head一樣)
環境變量
要解釋環境變量,得先明白變量是什么,準確的說應該是 Shell
變量,所謂變量就是計算機中用于記錄一個值(不一定是數值,也可以是字符或字符串)的符號,而這些符號將用于不同的運算處理中。通常變量與值是一對一的關系,可以通過表達式讀取它的值賦值給其它變量,也可以直接指定數值賦值給任意變量。為了便于運算和處理,大部分的編程語言會區分變量的類型,用于分別記錄數值、字符或者字符串等等數據類型。Shell
中的變量也基本如此,有不同類型(但不用專門指定類型名),可以參與運算,有作用域限定。
示例:
$declare tmp
$tmp=shiyanlou
$echo $tmp
簡單理解了變量的概念,就很好解釋環境變量了,環境變量就是作用域比自定義變量要大,如Shell
的環境變量作用于自身和它的子進程。在所有的 UNIX 和類 UNIX
系統中,每個進程都有其各自的環境變量設置,且默認情況下,當一個進程被創建時,處理創建過程中明確指定的話,它將繼承其父進程的絕大部分環境設置。Shell
程序也作為一個進程運行在操作系統之上,而我們在 Shell中運行的大部分命令都將以 Shell
的子進程的方式運行。
通常我們會涉及到的環境變量有三種:
1、當前Shell進程私有用戶自定義變量,如上面我們創建的temp變量,只在當前shell中有效
2、Shell 本身內建的變量
3、從自定義變量導出的環境變量
關于環境變量,可以簡單的理解成在當前進程的子進程是否有效,有效則為環境變量,否則不是。我們這里用export命令來體會一下,先在
Shell 中設置一個變量temp=shiyanlou,然后再新創建一個子
Shell 查看temp變量的值:
注意:為了與普通變量區分,通常我們習慣將環境變量名設為大寫
添加自定義路徑到“PATH”環境變量
在前面我們應該注意到PATH里面的路徑是以:作為分割符,所以我們可以這樣添加自定義路徑:
$PATH=$PATH:/home/shiyanlou/mybin
注意這里一定要使用絕對路徑
現在你就可以在其他任意目錄執行那兩個命令了。你可能會意識到這樣還并沒有很好的解決問題,因為我給
PATH 環境變量追加了一個路徑,它也只是在當前 Shell
有效,我一旦退出終端,再打開就會發現又失效了。有沒有方法讓添加的環境變量全局有效?或者每次啟動 Shell
時自動執行上面添加自定義路徑到 PATH 的命令?下面我們就來說說后一種方式——讓它自動執行。
在每個用戶的 home 目錄中有一個 Shell
每次啟動時會默認執行一個配置腳本,以初始化環境,包括添加一些用戶自定義環境變量等等。zsh 的配置文件是.zshrc,相應
Bash 的配置文件為.bashrc。它們在etc下還都有一個或多個全局的配置文件,不過我們一般只修改用戶目錄下的配置文件。
我們可以簡單的使用下面命令直接添加內容到.zshrc中:
$echo "PATH=$PATH:/home/shiyanlou/mybin" >>.zshrc
上述命令中>>表示將標準輸出以追加的方式重定向到一個文件中,注意前面用到的>是以覆蓋的方式重定向到一個文件中,使用的時候一定要注意分辨。在指定文件不存在的情況下都會創建新的文件。
變量修改
變量的修改有以下幾種方式:
變量設置方式
說明
${變量名#匹配字串}
從頭向后開始匹配,刪除符合匹配字串的最短數據
${變量名##匹配字串}
從頭向后開始匹配,刪除符合匹配字串的最長數據
${變量名%匹配字串}
從尾向前開始匹配,刪除符合匹配字串的最短數據
${變量名%%匹配字串}
從尾向前開始匹配,刪除符合匹配字串的最長數據
${變量名/舊的字串/新的字串}
將符合舊字串的第一個字串替換為新的字串
${變量名//舊的字串/新的字串}
將符合舊字串的全部字串替換為新的字串
比如要修改我們前面添加到 PATH 的環境變量。為了避免操作失誤導致命令找不到,我們先將 PATH 賦值給一個新的自定義變量
path:
$ path=$PATH
$ echo $path
$ path=${path%/home/shiyanlou/mybin}
# 或使用通配符,*表示任意多個任意字符
$ path=${path%*/mybin}
變量刪除
可以使用unset命令刪除一個環境變量:
$ unset temp
搜索文件
與搜索相關的命令常用的有如下幾個whereis,which,find,locate。
whereis簡單快速
$whereis who
你會看到它找到了三個路徑,兩個可執行文件路徑和一個 man
在線幫助文件所在路徑,這個搜索很快,因為它并沒有從硬盤中依次查找,而是直接從數據庫中查詢。whereis只能搜索二進制文件(-b),man幫助文件(-m)和源代碼文件(-s)。如果想要獲得更全面的搜索結果可以使用locate命令。
locate快而全
通過"/var/lib/mlocate/mlocate.db"數據庫查找,不過這個數據庫也不是實時更新的,系統會使用定時任務每天自動執行updatedb命令更新一次,所以有時候你剛添加的文件,它可能會找不到,需要手動執行一次updatedb命令(在我們的環境中必須先執行一次該命令)。它可以用來查找指定目錄下的不同文件類型,如查找
/etc 下所有以 sh 開頭的文件:
$locate /etc/sh
注意,它不只是在
etc 目錄下查找并會自動遞歸子目錄進行查找
查找 /usr/share/ 下所有 jpg
文件:
$ locate /usr/share/\*.jpg
注意要添加*號前面的反斜杠轉義,否則會無法找到
如果想只統計數目可以加上-c參數,-i參數可以忽略大小寫進行查找,whereis
的-b,-m,-s同樣可以是使用。
which小而精
which本身是 Shell 內建的一個命令,我們通常使用which來確定是否安裝了某個指定的軟件,因為它只從PATH環境變量指定的路徑中去搜索命令:
$ which man
find精而細
find應該是這幾個命令中最強大的了,它不但可以通過文件類型、文件名進行查找而且可以根據文件的屬性(如文件的時間戳,文件的權限等)進行搜索。find命令強大到,要把它將明白至少需要單獨好幾節課程才行,我們這里只介紹一些常用的內容。
在指定目錄下搜索指定文件名的文件:
$ find /etc/ -name interfaces
注意 find
命令的路徑是作為第一個參數的, 基本命令格式為 find [path] [option]
[action]
與時間相關的命令參數:
參數
說明
-atime
最后訪問時間
-ctime
創建時間
-mtime
最后修改時間
下面以-mtime參數舉例:
-mtime n: n 為數字,表示為在n天之前的”一天之內“修改過的文件
-mtime +n: 列出在n天之前(不包含n天本身)被修改過的文件
-mtime -n: 列出在n天之前(包含n天本身)被修改過的文件
newer file: file為一個已存在的文件,列出比file還要新的文件名
列出 home 目錄中,當天(24
小時之內)有改動的文件:
$find ~ -mtime 0
列出用戶家目錄下比Code文件夾新的文件:
$find ~ -newer /home/shiyanlou/Code
總結
以上是生活随笔為你收集整理的more 目录linux,linux(二)目录结构、文件基本操作cat\more\less、环境变量、文件搜索...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查看服务依赖关系图,技术|教你
- 下一篇: 群晖linux怎么进入u盘,黑群辉直接更