Linux 基礎學習2

来源:https://www.cnblogs.com/guokaifeng/archive/2019/08/27/11415237.html
-Advertisement-
Play Games

Linux 基礎學習2 [TOC] 文件目錄結構 文件和目錄被組織成一顆倒置的樹狀結構 文件系統從根開始,“/” 文件名稱嚴格區分大小寫 隱藏文件以"."開頭 路徑的分隔符為"/" 文件命名規範 文件字元最長為255個字元 包括路徑在內文件名稱最長為4095個 顏色表示 藍色文件 目錄 綠色文件 可 ...


目錄

Linux 基礎學習2

文件目錄結構

  • 文件和目錄被組織成一顆倒置的樹狀結構
  • 文件系統從根開始,“/”
  • 文件名稱嚴格區分大小寫
  • 隱藏文件以"."開頭
  • 路徑的分隔符為"/"

文件命名規範

  • 文件字元最長為255個字元
  • 包括路徑在內文件名稱最長為4095個
  • 顏色表示
    • 藍色文件 --> 目錄

  • 綠色文件 --> 可執行文件,可執行的程式

  • 紅色文件 --> 壓縮文件或者包文件

  • 淺藍色文件 --> 鏈接文件,主要是使用ln命令建立的文件

  • 白色文件 --> 一般性文件,如文本文件,配置文件,源碼文件等
  • 紅色閃爍:表示鏈接的文件有問題
  • 黃色:表示設備文件
  • 灰色文件 -->其他文件
  • 除了斜杠和NULL,其他所有字元都可以使用
  • 對大小寫敏感

文件系統結構

  • /boot 引導文件的存放位置,內核文件、引導載入器都在此目錄
  • /bin 所有的用戶都可以使用的命令
  • /sbin 管理類的命令
  • /lib 啟動時程式使用的基本庫文件 .so結尾
  • /lib64 專門存放X86_64系統上得輔助庫文件
  • /etc 存放配置文件
  • /home/USERNAME 普通用戶的家目錄
  • /root 管理員的家目錄
  • /media 攜帶型移動設備的掛載點
  • /mnt 臨時文件的掛載點
  • /dev 設備文件和特殊文件的存放位置
  • /opt 第三方的應用的安裝位置
  • /tmp 臨時文件的存放位置
  • /usr 存放安裝程式
  • /var 存放經常變化的文件,比如日誌
  • /proc 存放內核啟動和進程相關的虛擬文件
  • /sys 輸出當前系統上的硬體相關的文件
  • /srv 系統上允許的服務用到的數據

linux應用程式的組成

  • 二進位文件
    • /bin
    • /sbin
    • /usr/bin
    • /usr/sbin
    • /usr/local/bin
    • /usr/local/sbin
  • 庫文件
    • /lib
    • /lib64
    • /usr/lib
    • /usr/lib64
    • /usr/local/lib
    • /usr/local/lib64
  • 配置文件
    • /etc
    • /etc/name
    • /usr/local/etc
  • 幫助文件
    • /usr/share/man
    • /usr/share/doc
    • /usr/local/share/man
    • /usr/local/share/doc

絕對路徑和相對路徑

  • 絕對路徑
    • 以根開始
    • 完整的文件的存放位置
    • 可以讀取到任何一個文件或者文件夾
  • 相對路徑
    • 不以根開始
    • 相對當前的位置來決定
    • 可以簡短的表示一個文件或者文件夾
    • . 當前目錄
    • .. 父級目錄

目錄名和基名

[root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33 
ifcfg-ens33
[root@localhost log]#basename /etc/sysconfig/network-scripts
network-scripts
[root@localhost log]#dirname /etc/sysconfig/network-scripts
/etc/sysconfig
[root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 
/etc/sysconfig/network-scripts

切換目錄

cd 切換目錄 change directory

  • 可以使用相對路徑
  • 可以使用絕對路徑

切換到家目錄

[root@localhost log]#cd 
[root@localhost ~]#

切換到上一次的目錄

[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cd -
/root
[root@localhost ~]#cd -
/etc/sysconfig/network-scripts

顯示當前的工作目錄

pwd print working directory

[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts
# 查看鏈接的真正目錄
[root@localhost /]#cd lib
[root@localhost lib]#pwd -P
/usr/lib

列出目錄或者文件

ls list

命令格式:Usage: ls [OPTION]... [FILE]...

ls -a 顯示所有文件
[root@root ~]# ls -a
.                .cshrc  file15  file3  .passwd.swo
..               file1   file16  file4  .tcshrc
anaconda-ks.cfg  file10  file17  file5  teaching_plan.zip

ls -l 以長格式顯示文件列表
[root@root ~]# ls -l
total 8
-rw-------. 1 root root 1414 Aug 22  2019 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 Mar  1 18:28 file1

-rw-r--r--.    1        root     root      0    Aug 22 17:21  10
許可權      硬碟的引用次數  屬主      屬組     大小  訪問時間    文件名稱

ls -R 遞歸顯示目錄
[root@root ~]# ls -R
.:
anaconda-ks.cfg  file12  file16  file2   file5  file9
file1            file13  file17  file20  file6  teaching_plan.zip

ls -d 顯示目錄本身
[root@root ~]# ls -d
.

ls -1(數字1) 文件分行顯示
[root@root ~]# ls -1
anaconda-ks.cfg
file1
file10
file11
file12


ls -S 安裝文件大小排序
[root@root ~]# ls -S
teaching_plan.zip  file11  file15  file19  file4  file8

ls -r 倒序顯示
[root@root ~]# ls -r
teaching_plan.zip  file6  file20  file17  file13  file1

ls -t 按照時間來排序
[root@root ~]# ls -t
file18  file11  file15  file3  file7  teaching_plan.zip

ls -lh 顯示人類易讀的方式
[root@root ~]# ls -1h
anaconda-ks.cfg
file1
file10
file11
file12
file13

ls -d */ 顯示當前目錄下的文件夾
l. 只顯示隱藏文件

linux下的目錄類型

  • - 用來表示文件
  • d 用來表示目錄
  • b 塊設備
  • c 字元設備
  • l 表示符號鏈接文件
  • s socket套接字

查看文件狀態

  File: ‘anaconda-ks.cfg’
  Size: 1747        Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33574992    Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-08-22 12:09:03.288000381 +0900 # 訪問時間
Modify: 2019-08-22 11:47:12.262947345 +0900 # 修改時間
Change: 2019-08-22 11:47:12.262947345 +0900 # 改動時間
atime 訪問時間  查看文件內容就會改變
mtime 修改時間  改變內容發生變化
ctime 改動時間  元數據發生變化

touch

創建空文件和刷新時間,如果文件存在,則刷新時間,如果文件不存在,則創建文件

-a 只修改atime和ctime

-m 只修改mtime和ctime

文件通配符

  • * 所有
  • ? 匹配的是任意單個字元
  • ~ 表示用戶的家目錄
  • [123] 其中一個
  • [^123] 取反
  • [0-9] 表示數字
  • file[a-z] 字母(有坑)缺少Z
  • file[A-Z] 字母(有坑)缺少a
  • [:lower:] 小寫字母
  • [:upper:] 大寫字母
  • [:alpha:] 所有字母 a-zA-Z
  • [:alnum:] 表示字母和數字
  • [:digit:] 表示數字

創建目錄

mkdir 創建目錄

  • -p 遞歸創建
  • -v 顯示詳細過程

顯示目錄樹

安裝:yum install -y tree

tree 顯示目錄樹

[root@root ~]# tree
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip

0 directories, 22 files

-d 只顯示文件夾

[root@root ~]# tree -d
.

0 directories

-L # 只顯示#層

[root@root ~]# tree -L 1
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip

0 directories, 22 files

刪除目錄

rmdir 只能刪除非空目錄

-p 遞歸刪除空父目錄

-v 顯示刪除過程

rm -rf 刪除非空目錄

複製文件和文件夾

cp copy 預設情況下是別名,原來本身命令是不提示覆蓋的

Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE... 
  -i 顯示提示信息
  -n 不覆蓋
  -r -R 遞歸複製
  -d 只複製鏈接文件,不複製源文件
  -a 歸檔
  -v 顯示過程
  -b 備份原來的文件
  --backup=number 備份文件加上數字
  -p 保留原來的屬性
 
  • 如果源文件是文件的話
    • 目標是文件
      • 目標文件如果不存在的話,則新建目標文件,並把內容寫到目標文件中
      • 如果目標文件存在的話,本來的命令是直接覆蓋,建議使用-i來提示用戶
    • 目標是文件夾
      • 在文件夾中新建一個同名的文件,並把文件內容寫到新文件中
  • 如果源文件為多個文件的話
    • 目標必須是文件夾,文件夾必須存在,其他情況都會報錯
  • 如果源文件是文件夾的話
    • 目標文件是文件: 不可以
    • 目標文件必須是文件夾,必須使用-r選項
    • 如果目標文件不存在:則直接創建目標文件夾,並把源文件夾的數據都複製到目標文件夾
    • 如果目標文件存在:
      • 如果是文件的話,則報錯
      • 如果是文件夾:則在目標文件夾中創建同名文件夾,並把所有數據都複製到新文件夾

移動、重命名

mv move

Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...
-i 提示
-f 強制
-b 備份
--backup=number 備份後面加數字
-v 顯示過程

刪除

rm remove

Usage: rm [OPTION]... FILE...
-i 提示
-r -R 遞歸刪除
-f 強制刪除
rm -rf 慎用
rm -rf /*
cd /
rm -rf *

鏈接

  • 軟鏈接

  • 相當於windows的快捷方式
  • 創建命令 ln -s 源文件 目標文件
  • 可以對目錄做軟鏈接
  • 指向另外的一個文件或者目錄的路徑,大小是路徑的長度的字元
  • 對磁碟引用次數沒有影響
  • 可以跨分區
  • 源文件發生改變,軟鏈接會跟著發生變化
  • 源文件刪除,軟鏈接不能訪問

  • 硬鏈接

  • 磁碟引用次數會發生變化
  • 指向的是硬碟上的同一塊區域
  • 磁碟的引用數會隨著硬鏈接次數來增加
  • 不能對目錄做硬鏈接
  • 不能跨越分區
  • 源文件發生改變,硬鏈接也會跟著變化
  • 源文件刪除以後,硬鏈接可以訪問

查看文件類型

file

輸入和輸出

  • 標準輸入 預設是來自鍵盤的輸入 stdin 0
  • 標準輸出 預設輸出到終端視窗 stdout 1
  • 標準錯誤輸出 預設輸出到終端視窗 stderr 2

I/O重定向

> 覆蓋

  • > 將標準輸出重定向到文件中
  • 2> 將錯誤輸出重定向到文件中
  • &> 將所有的輸出都重定向到文件中

禁止、允許覆蓋

  • 禁止覆蓋 set -C
  • 允許覆蓋 set +C

>> 追加

>> 將標準輸出追加到文件中

2>> 將錯誤輸出追加到文件中

&>> 將所有輸出追加到文件中

標準輸入和錯誤輸入分開保存

[root@localhost ~]#ls f 45yuio > log.log 2> error.log
[root@localhost ~]#cat log.log 
f
[root@localhost ~]#cat error.log 
ls: cannot access 45yuio: No such file or directory

合併所有的輸出

  • &> 覆蓋重定向
  • &>> 追加重定向
  • command > file 2>&1
  • command >> file 2>&1
  • ():合併多個文件的輸出
  • /dev/null 黑洞

從文件導入stdin

tr 字元替換

-t 截斷
-d 刪除
-s 壓縮,去重
-c 取反
[root@localhost ~]#tr 'a-z' 'A-Z' < /etc/issue
\S
KERNEL \R ON AN \M
[root@localhost ~]#tr 'a-z' 'A-Z' 
qwertyy
QWERTYY
12345678
12345678
ASDFGHJ
ASDFGHJ
qwertyuio
QWERTYUIO
^C
[root@localhost ~]#tr ab 12
ab
12
abb
122
asdfghjkl
1sdfghjkl
^C
[root@localhost ~]#tr abc 12
ab
12
abc
122
abc
122
^C
[root@localhost ~]#tr ab 123
ab
12
abb
122
avc
1vc
qbc
q2c
abc
12c
[root@localhost ~]#tr -t abc 12
abc
12c
ab
12
[root@localhost ~]#tr -d abc
qwertyui
qwertyui
an^H^H
n

abc

artyibrtyuiocrtyuiop
rtyirtyuiortyuiop
^C
[root@localhost ~]#tr -d abc < /etc/issue
\S
Kernel \r on n \m

[root@localhost ~]#cat /etc/issue
\S
Kernel \r on an \m
[root@localhost ~]#tr -s a
abc
abc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
abc
^C
[root@localhost ~]#tr -sc a 
aasdaaaaaaa
aasdaaaaaaa
^[[A^H^H^C
[root@localhost ~]#tr -sc a 
aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
aaaaaaaaabcd
[root@localhost ~]#tr -dc a
aaaaaaaaaaaabbbbbbbbbb
asdfghjkqwertyuiozxcvbnmxcvbnm,.
aaaaaaaaaaaaa
ctrl+d 結束
[root@localhost ~]#tr -dc "a\n"
asdfghjk
a
wertyujk;l'



asdfghj
a
[root@localhost test]#tr -d a < issue > issue  處理完成以後不能寫會到源文件,要寫到新的文件中
[root@localhost test]#seq 1 10 > b
[root@localhost test]#cat b
1
2
3
4
5
6
7
8
9
10
[root@localhost test]#tr -d "\n" < b
12345678910[root@localhost test]#tr -d "\n" < b
[root@localhost test]#tr "\n" " " <b
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "\n" " " <b >c
[root@localhost test]#cat c
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "\n" <c
1
2
3
4
5
6
7
8
9
10

多行發送給stdin

# 第一種方式
[root@localhost test]#cat > f1
qwert
wertyui
wertyui
wertyuiopasdfghjk
sdfghjkl
sdfyhjkl;sdfghjkl;xcvb

# 第二種方式
[root@localhost test]#cat > f2 <<EOF
> qwerty
> qwertyu
> wertyui
> qwertyu
> EOF
EOF 不是必須得,只要兩個相同就可以

管道

管道使用“|”來表示

命令1|命令2|命令3

  • 把命令1的輸出結果當做命令2的輸出結果,把命令2的輸出結果當成命令3的輸入結果
  • 預設情況下,管道只能傳送標準輸出
  • 如果需要把錯誤輸出也傳遞,則需要|&
  • 一般用來組合多個命令
  • 有一些命令是不接受管道的
[root@localhost test]#ls f1|tr 'a-z' 'A-Z'
F1
[root@localhost test]#ls f
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|tr 'a-z' 'A-Z'
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|&tr 'a-z' 'A-Z'
LS: CANNOT ACCESS F: NO SUCH FILE OR DIRECTORY
[root@localhost test]#echo file{1..20}|touch 
touch: missing file operand
Try 'touch --help' for more information.


作 者:郭楷豐
出 處:https://www.cnblogs.com/guokaifeng/
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角 推薦一下。您的鼓勵是博主的最大動力!
自 勉:生活,需要追求;夢想,需要堅持;生命,需要珍惜;但人生的路上,更需要堅強。帶著感恩的心啟程,學會愛,愛父母,愛自己,愛朋友,愛他人。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 想到了兩種方法來實現,分別利用了List.Sort()和Dictionary.OrderBy()方法,代碼如下: 輸出正常! 總覺得應該有很方便的方法來實現,奈何想不出來。。。 ...
  • 目前知道的情況被調用的C/C++函數只能是全局函數 不能調用類中的成員方法 被調用的C函數必須使用extern “C“包含,保證採用的導出函數名生成規則和.NET一致 函數調用約定通常使用WINAPI也就是__stdcall,.net預設也是__stdcall .net可以和c++同時用cdecl調 ...
  • 場景 Winform控制項-DevExpress18下載安裝註冊以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243 在上面安裝完DevExpress的基礎上使用其Treelist控制項。 然後就可以新 ...
  • .Net Core + Vue + IdentityServer4 + Ocelot ...
  • 什麼是非同步 舉個例子:小明的媽媽讓小明燒一壺水,水燒開後要倒進水壺裡,同時還需要把家裡打掃一下. 小明的操作流程一:燒水 >等待至水燒開 >水倒進水壺裡 >打掃家務 小明的操作流程二:燒水 >打掃家務 >等水燒開了就將水倒進水壺裡 >繼續打掃家務. 第二種方式就是非同步. 非同步的使用 一.以委托方式調 ...
  • .NET Core 公從號開發零基礎系列,包括服務號,小程式所有功能,適用於未接觸過公眾號的同學。 ...
  • 1965 年開始 Multics 工程計劃,該計劃由貝爾實驗室、美國麻省理工學院和通用電氣公司聯合發起,(目標是開發一種互動式的、具有多道程式處理能力的分時操作系統,以取代當時廣泛使用的批處理操作系統。最終失敗)。 UNIX 操作系統由肯•湯普森(Ken Thompson)和丹尼斯•里奇(Denni ...
  • Linux(常用)命令 [TOC] 系統信息 關機 (系統的關機、重啟以及登出 ) 文件和目錄 文件搜索 掛載一個文件系統 磁碟空間 用戶和群組 文件的許可權 使用 "+" 設置許可權,使用 " " 用於取消 打包和壓縮文件 RPM 包 (Fedora, Redhat及類似系統) shell rpm i ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...