<button id="ssm6u"><optgroup id="ssm6u"></optgroup></button>
  • 跳轉至

    文件系統之文件操作02

    0.概述

    本期將帶大家進入Linux文件操作的第二部分.

    我會帶大家使用命令行做如下操作.

    • mkdir 創建文件夾

    • touch 創建一個文件

    • vim /geidt/vscode 編輯文件

    • cat 查看文件

    • cp 復制

    • mv 移動

    • rmdir 刪除文件夾

    • rm 刪除文件/文件夾

    實例教學, 跟著教程的操作 ,自己也同時邊看邊敲命令行.

    這篇文章相比較前幾篇文章比較長一些, 希望大家可以耐心看下去.

    1. mkdir - 創建文件夾

    學習了如何進入一個文件夾(cd)與查看文件目錄(ls)之后, 接下來我們要嘗試創建一個自己的文件夾. 我們暫且稱之為Akai

    這里我們需要一個新的指令叫mkdir 英文全稱叫做make directory 創建一個文件夾/目錄

    • mk: make

    • dir : directory linux常用于表示文件夾

    mkdir Akai
    

    這個時候,我們調用ls指令,就可以看到我們新創建一個文件夾.

    [email protected] ~/D/fange_opencv_tutorial> ls | grep F
    Akai
    Feature特征檢測
    
    因為目錄下文件夾太多, 我使用grep指令, 去篩選F打頭的文件夾/文件.

    我們在這里先不深入介紹grep, 目前只需要知道, 它是用于篩選滿足一些特征(例如開頭字符, 正則表達式等等)的結果的工具.

    好, 看到我們新創建的文件夾之后, 我們進入到里面去.順便回顧一下我們的cd指令.

    [email protected] ~/D/fange_opencv_tutorial> cd Akai/
    [email protected] ~/D/f/Akai> ls
    [email protected] ~/D/f/Akai> pwd
    /home/scorpion/Desktop/fange_opencv_tutorial/Akai
    

    我們可以看到文件夾下空空如也.

    2. touch - 創建一個文件

    在linux里面, 如果我們要創建一個空文件, 我們就需要使用 touch touch后面加文件名稱.

    暫時沒有參透它命名英文的簡寫, 知道的朋友可以給我留言.

    [email protected] ~/D/f/Akai> touch hello.txt
    [email protected] ~/D/f/Akai> ls
    hello.txt
    [email protected] ~/D/f/Akai> 
    
    我們可以看到我們在當前Akai這個目錄下面, 創建了一個名叫hello.txt的文本.

    實際上touch在linux的默認用法是修改當前文件的時間戳timestamp 為系統當前的時間, 如果文件不存在的話, 就會被創建一個空文件. 我們這里只涉及它創建一個文件的用法.

    Update the access and modification times of each FILE to the current time.
    

    3. gedit - 使用圖形化的編輯器

    創建了一個文件之后, 我們總想給這個文件里寫點啥, 例如想留言一首木心先生的溫暖的小詩.

    muxin

    congqianman

    從前慢
        --木心
    記得早先少年時 
    大家誠誠懇懇 
    說一句 是一句 
    清早上 火車站 
    長街黑暗無行人 
    賣豆漿的小店冒著熱氣 
    
    從前的日色變得慢 
    車,馬,郵件都慢 
    一生只夠愛一個人 
    從前的鎖也好看 
    鑰匙精美有樣子 
    你鎖了 人家就懂了
    

    你可以使用命令行版本的編輯器vim, 但是為了不給自己入手添加太多的阻礙, 建議先對基礎的命令行熟悉之后, 再繼續深入學習其他的工具或者編輯器.

    我們還是樸實一點, 用圖形化的編輯器

    gedit hello.txt
    

    運行圖形化界面, 填入我們的文字.

    gedit-gui-editor

    CTRL + S保存我們寫的這段優美的文字.

    4. vscode 一款更好用的編輯器

    使用我們XCore開發板的用戶, 我們為大家預裝了vscode. 大家運行code指令打開單個文件, 或者打開整個工程目錄.

    打開當前的文件夾

    code .
    
    傳入完整路徑,打開文件夾工程
    code /home/scorpion/Desktop/fange_opencv_tutorial/Akai
    
    還可以只打開這個文件
    code hello.txt
    

    vscode-gui-editor.png

    這個圖形化編輯器的更多功能還等大家自己去探索.

    5. cat - 在終端預覽文件內容.

    cat-read.jpg

    cat 這個指令, 它取一個或多個文本文件的名稱,然后將其內容作為一個數據流顯示到標準輸出。

     concatenate files and print on the standard output
    

    例如我們可以執行下面這條指令, 讓文件中的內容打印到終端上面

    cat hello.txt
    
    [email protected] ~/D/f/Akai> cat hello.txt 
    從前慢
        --木心
    記得早先少年時 
    大家誠誠懇懇 
    說一句 是一句 
    清早上 火車站 
    長街黑暗無行人 
    賣豆漿的小店冒著熱氣 
    
    從前的日色變得慢 
    車,馬,郵件都慢 
    一生只夠愛一個人 
    從前的鎖也好看 
    鑰匙精美有樣子 
    你鎖了 人家就懂了
    

    實際上我日常使用的時候, 會加一個箭頭的符號> , <. 它代表數據流的方向.

    cat < hello.txt
    
    這條語句跟上面的語句功能上是一樣的. 箭頭< 代表數據流向是終端. >代表數據流向是文件. 也就是說我們執行linux指令,或者在終端運行某個軟件, 輸出的字符信息或者我們稱之為日志信息都可以導入到文件中.

    還記得我們之前提到過的echo 指令么.

    echo 'MrFange'
    
    echo語句會導出一個數據流, 我們將其存到一個文件中, 這里我們導入到一個名字叫做Akai-echo.txt的文件中. 注意,文件不必提前創建touch, 它會自動生成.

    [email protected] ~/D/f/Akai> echo 'MrFange' > Akai-echo.txt
    [email protected] ~/D/f/Akai> ls
    Akai-echo.txt  hello.txt
    [email protected] ~/D/f/Akai> cat Akai-echo.txt 
    MrFange
    

    再列舉一個例子, 我們在當前目錄下執行ls語句, 并將其結果輸出到ls-record.txt的文件中.

    [email protected] ~/D/f/Akai> ls > ls-record.txt
    [email protected] ~/D/f/Akai> cat < ls-record.txt 
    Akai-echo.txt
    hello.txt
    ls-record.txt
    

    6. cp - 拷貝文件/文件夾

    clone-pig.jpg

    接下來, 我們要將之前寫有小詩的hello.txt復制一份另存為poem.txt 這里我們需要cp指令, 英文全稱是copy是復制的意思.

    [email protected] ~/D/f/Akai> cp hello.txt poem.txt
    [email protected] ~/D/f/Akai> cat < poem.txt 
    從前慢
        --木心
    記得早先少年時 
    大家誠誠懇懇 
    說一句 是一句 
    清早上 火車站 
    長街黑暗無行人 
    賣豆漿的小店冒著熱氣 
    
    從前的日色變得慢 
    車,馬,郵件都慢 
    一生只夠愛一個人 
    從前的鎖也好看 
    鑰匙精美有樣子 
    你鎖了 人家就懂了
    
    就這樣文件就被復制了.

    我們掌握了復制的技能, 那我們可不可以復制整個文件夾呢, 我們試一下.

    我們需要退回到上層目錄.

    cd ..
    

    [email protected] ~/D/fange_opencv_tutorial> cp Akai/ Akai-Copy
    cp: -r not specified; omitting directory 'Akai/'
    

    尷尬, 它提示有錯誤了, 說我們沒有指定拷貝對象.

    這里我們就需要cp指定其中一個參數

    -R, -r, --recursive
    copy directories recursively
    
    遞歸的方法是拷貝文件夾. 沒接觸過算法的同學, 可能對遞歸比較陌生. 這個時候, 你可能需要去百度一下, 或者搜索一下漢娜塔問題.

    簡單來講, 就是我先復制這個文件夾, 然后文件夾內的內容繼續拷貝.

    [email protected] ~/D/fange_opencv_tutorial> cp -r Akai/ Akai-Copy
    

    展示一下結果

    [email protected] ~/D/fange_opencv_tutorial> ls | grep Akai
    Akai
    Akai-Copy
    
    [email protected] ~/D/fange_opencv_tutorial> cd Akai-Copy/
    [email protected] ~/D/f/Akai-Copy> tree
    .
    ├── Akai-echo.txt
    ├── hello.txt
    ├── ls-record.txt
    └── poem.txt
    
    0 directories, 4 files
    

    我們退回原來的文件夾.

    7. mv 移動/重命名

    我們可以使用mv (英文是 move)指令來移動文件夾的位置或者將其重命名(在同一目錄就相當于重命名了)

    例如我們之前創建的那個hello.txt, 現在我想將其重命名為cong-qian-man.txt.

    [email protected] ~/D/f/Akai> mv hello.txt cong-qian-man.txt
    [email protected] ~/D/f/Akai> ls
    cong-qian-man.txt  Akai-echo.txt  ls-record.txt  poem.txt
    

    我們可以將這個文件移動到別的地方去, 例如移動到我們之前創建的Akai-Copy文件夾內.

    [email protected] ~/D/f/Akai> mv cong-qian-man.txt ../Akai-Copy/
    [email protected] ~/D/f/Akai> cd ../Akai-Copy/
    [email protected] ~/D/f/Akai-Copy> tree
    .
    ├── cong-qian-man.txt
    ├── Akai-echo.txt
    ├── hello.txt
    ├── ls-record.txt
    └── poem.txt
    
    0 directories, 5 files
    

    PS: 為啥很嘮叨的去做這么多演示示例, 從的教學理念來講, 輸入決定產出, 你只有看別人的操作樣例多了之后, 你才能熟練掌握這里指令的使用. 多練之前一定要多看. 切記.

    我們可以看到cong-qian-man.txt 已經成功地放置在Akai-Copy這個文件夾內了.

    那接下來要給大家演示一下, 如何移動/重命名文件夾.

    mv指令, 第一個傳入的是源文件夾, 第二個參數是目的文件夾.

    如果Akai-Copy2這個文件夾不存在, 這個語句就相當于rename 重命名

    如果Akai-Copy2這個文件夾存在,提前創建好. 那么這句指令的意思就變成了, 將Akai-Copy這個文件夾, 移動到Akai-Copy2這個目錄下. 也就是Akai-Copy2包含Akai-Copy這個目錄. 大家可以自行實驗一下.

    mv Akai-Copy/ Akai-Copy2/
    
    [email protected] ~/D/fange_opencv_tutorial> pwd
    /home/scorpion/Desktop/fange_opencv_tutorial
    [email protected] ~/D/fange_opencv_tutorial> mv Akai-Copy/ Akai-Copy2/
    [email protected] ~/D/fange_opencv_tutorial> ls | grep Akai
    Akai
    Akai-Copy2
    
    [email protected] ~/D/fange_opencv_tutorial> cd Akai-Copy2/
    [email protected] ~/D/f/Akai-Copy2> tree
    .
    ├── cong-qian-man.txt
    ├── Akai-echo.txt
    ├── hello.txt
    ├── ls-record.txt
    └── poem.txt
    
    0 directories, 5 files
    

    8. rm - 刪除文件/目錄

    delete-icon.jpg

    分別總是難免的, 有些文件創建出來就是為了被刪除的, 因為它的效能已經發揮完畢.

    rmremove的縮寫是刪除的意思. rm后面緊跟文件名, 就是刪除這個文件.

    [email protected] ~/D/f/Akai-Copy2> ls
    cong-qian-man.txt  Akai-echo.txt  hello.txt  ls-record.txt  poem.txt
    [email protected] ~/D/f/Akai-Copy2> rm hello.txt 
    [email protected] ~/D/f/Akai-Copy2> rm ls-record.txt poem.txt 
    [email protected] ~/D/f/Akai-Copy2> ls
    cong-qian-man.txt  Akai-echo.txt
    

    需要提的是, 你可以給rm傳入多個參數, 很多指令都支持傳入多個參數. 可以同時刪除多個文件.

    當然最有效的方式, 我們還是刪除整個文件夾.

    如果你的文件夾是空文件夾的話, 你可以使用rmdir指令(Remove Directory) 刪除文件夾.

    [email protected] ~/D/f/Akai-Copy2> ls
    cong-qian-man.txt  Akai-echo.txt
    
    #創建文件夾 tmp
    [email protected] ~/D/f/Akai-Copy2> mkdir Tmp
    
    [email protected] ~/D/f/Akai-Copy2> ls
    Tmp/  cong-qian-man.txt  Akai-echo.txt
    
    # 刪除空文件夾
    [email protected] ~/D/f/Akai-Copy2> rmdir Tmp/
    [email protected] ~/D/f/Akai-Copy2> ls
    cong-qian-man.txt  Akai-echo.txt
    

    但是, 如果你的文件夾非空, 使用設個指令就會出錯

    [email protected] ~/D/fange_opencv_tutorial> rmdir Akai-Copy2/
    rmdir: failed to remove 'Akai-Copy2/': Directory not empty
    
    報錯說: 文件夾非空, 文件刪除失敗.

    我們只能借助rm指令, 需要填入一個選項-r遞歸操作. 這樣我們就成功刪除了整個Akai-Copy2文件夾里面的內容及其本身.

    [email protected] ~/D/fange_opencv_tutorial> rm -r Akai-Copy2/
    [email protected] ~/D/fange_opencv_tutorial> ls | grep Akai
    Akai
    

    江湖上流傳, 有一個必殺的指令叫

    fear-bear.jpg

    sudo rm -fr /
    
    自己千萬別運行!!!!!

    sudo 是以管理員權限運行該指令. 之前提到過/指的是根目錄. rm刪除 -r代表遞歸, -f force代表強制.

    具體會發生什么, 大家可以腦補一下.

    其實目前很多linux的發行版, 例如Ubuntu是受到保護的, 默認這樣做是被攔截的, 除非添加一些其他選項.

    如果大家感興趣, 可以參照知乎的這篇文章

    在現代的Unix操作系統上執行sudo rm -rf /會發生什么?

    https://www.zhihu.com/question/21682570

    9. Summary小結

    本次帶大家完成了linux使用命令行進行文件操作, 基本上已經覆蓋了常見的需求. 簡單總結一下.

    我們學習了:

    mkdir-創建文件夾

    mkdir + 文件名稱
    

    touch-創建文件

    touch + 文件名
    

    編輯器的使用

    這里主要介紹了geditvscode從命令行的啟動方法.

    gedit

    gedit + 文件名
    
    vscode

    code + 文件名
    code + 文件夾路徑
    

    cat 文件流的輸出

    # 將文件中的內容, 打印到終端
    cat + 文件名
    cat < 文件名
    
    # 將數據存放在文件中
    cat > 文件名
    

    cp 復制

    復制文件

    cp + 源文件名/路徑 + 目的文件名/路徑
    
    復制文件夾 -r表示遞歸

    cp -r 源文件夾名/路徑 + 目的文件夾名/路徑
    

    mv - 移動位置

    移動/重命名文件

    mv + 源文件 + 目的文件
    
    移動/重命名文件夾
    # 刪除空文件夾
    rmdir + 文件夾名稱
    
    # 刪除非空文件夾
    rm -r + 文件夾名稱/路徑
    


    韩国精品无码一区二区三区,精品无码一区二区三区AV,欧洲丰满美熟女乱又伦AV,亚洲午夜久久久影院伊人