linux之文件目錄,輸入及輸出


文件目錄結構

ls 查看文件
ll 查看詳細文件
  • 文件和目錄被組織成一顆倒置的樹狀結構
  • 文件系統從根開始,'/'
  • 文件名嚴格區分大小寫
  • 隱藏文件以.開頭
  • 文件的分隔符為'/'

文件命名規范

  • 文件字符最長的字符為255
  • 包括路徑在內文件名稱最長為4095個
  • 顏色
    • 藍色 --> 文件夾
    • 綠色 --> 可執行文件
    • 紅色 --> 壓縮文件
    • 晴朗藍 --> 鏈接文件(windows中快捷方式)
    • 灰色 --> 其他文件
    • 白色 --> 文件
  • 除了 '/'和NULL.其他所有字符都可以使用
  • 對大小寫敏感

文件系統結構

/boot # 引導文件的存放位置,內核文件,引導加載器都在此目錄
/bin  # 所有用戶都可以使用的命令.
/sbin # 管理類命令,即root用戶可以使用的命令. system 管理
/lib  # 啟動時程序使用的基本庫文件,windows庫文件以.dll結		  尾,linux庫文件以.so結尾
/lib64 # 存放x86-64系統上的輔助庫文件,windows系統中	 program files/program files(x86)
/etc   # 存放配置文件的目錄
/home  # 普通用戶家目錄
/root  # 管理員家目錄
/media # 便攜式移動設備的掛載點
/mnt   # 臨時文件的掛載點
/dev   # 設備文件(硬件設備)和特殊文件存放位置
/opt   # 第三方的應用安裝位置
/tmp   # 重啟之后清空此文件夾下文件,臨時文件的放置點,類似於windows回收站
/usr   # 存放安裝程序
/var   # 存放經常變化的文件,比如目錄.  /var/log
/proc  # 存放內核啟動和進程相關的虛擬文件,(進程被表示文件)
/sys   # 輸出當前系統上的硬件相關文件
/srv   # 系統上允許永達ode數據

linux應用程序的組成

  • 二進制文件
    • /bin
    • /sbin
    • /usr/bin
    • /usr/sbin
    • /usr/local/bin
    • /usr/loacl/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

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

切換家目錄

cd # 切換家目錄
cd - # 回到上一次目錄

顯示當前的工作目錄

pwd # 顯示當前工作目錄 print working directory
[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts

pwd -p # 查看鏈接的真正目錄
[root@localhost /]# cd lib
[root@localhost lib]# pwd -p
/usr/lib

列出目錄或者文件

-rw-r--r--. 1 root root 0 Aug 22 17:21 10
權限 硬盤引用次數 屬主 屬組 大小 訪問時間 文件名稱
ls list
ls -a  # 顯示所有文件
ls -l  # 以長格式顯示文件列表
-rw-r--r--. 1       root root  0  Aug 22 17:21    10
權限    硬盤引用次數  屬主 屬組  大小   訪問時間   文件名稱
ls -R  # 遞歸顯示目錄
ls -d  # 顯示目錄本身
ls -1  # 文件分行顯示
ls -S  # 按照文件大小排序
ls -r  # 倒序顯示
ls -t  # 按照時間排序
ls -lh # 顯示人類易讀方式
ls -d */ # 顯示當前目錄下文件夾
ls l.  # 只顯示隱藏文件
ls -lut # 時間倒敘排列

# 這里全是段命令可以自由組合

linux下的目錄類型

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

stat查看文件狀態

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
# Size   磁盤大小 Blocks 塊大小  IO Block Io塊大小
# Access 權限     Uid    用戶   
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 # 改動時間

Access # 最近訪問時間 atime 查看cat文件內容就會改變
Modify # 最近修改時間 mtime 改變內容時發生變化
Change # 最近改動時間 ctime 元數據發生變化就會改變

touch

創建空文件和刷新時間,如果文件存在,則刷新時間,不存在則創建文件
touch -a 修改atime和ctime
touch -m 修改mtime和ctime
# 無論是-a 還是-m ctime都會改變

文件通配符

*           # 表示0-多個字符
?           # 匹配任意單個字符
~           # 表示家目錄
[123]       # 表示其中一個
[-]         # 范圍
# 根據ascii碼 
file[a-z]   # 字母(有坑) 缺少Z   
file[A-Z]   # 字母(有空) 缺少a
[^]         # 取反
[:lower:]   # 小寫字母
[:upper:]   # 大寫字母
[:alpha:]   # 所有字母
[:alpha:]   # 所有字母
[:alnum:]   # 表示字母和數字
[:digit:]   # 表示數字

創建目錄

mkdir    # 創建目錄
-p a/b/c   # 遞歸創建
-v         # 顯示創建詳細過程

顯示目錄樹

yum install-y tree  # 安裝目錄樹
tree                # 顯示目錄樹
tree -d             # 僅顯示文件夾
-L num              # 僅顯示num層,排除當前目錄

刪除目錄

rmdir   # 只能刪除非空目錄
-p      # 遞歸刪除空父目錄
-v      # 顯示刪除過程
rm -rf  # 刪除非空目錄

復制文件和文件夾

cp copy默認情況下是別名,原來本身命令(\cp)是不提示覆蓋

使用方法:
Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE

cp              # copy
-i              # 顯示覆蓋提示信息
-n              # 不覆蓋
-f              # 非強制的
-R -r           # 遞歸復制,如果復制文件夾,不加遞歸復制會報錯
-s              # 拷貝一個鏈接文件
-d              # 只復制鏈接文件不復制原文件
-a              # 歸檔
-v              # 顯示復制過程
-b              # 覆蓋之前,備份原來的文件
--backup=number # 備份
-p              # 復制時保留原來的屬性

  • 如果源文件是文件
    • 目標文件是文件
      • 目標文件如果不存在,則新建目標文件,並把內容寫到目標文件中
      • 如果目標文件存在,本來的命令是直接覆蓋.建議使用-i提示用戶.
    • 目標是文件夾
      • 在文件夾中新建一個同名的文件,並把文件內容寫到新文件中
  • 如果原文件為多個文件
    • 目標必須是文件夾,而且文件夾必須存在.其他情況都會報錯
  • 如果原文件是文件夾
    • 目標文件是文件:不可以
    • 目標文件必須是文件夾,必須使用-r選項
    • 如果目標文件不存在:則直接創建目標文件夾,並把原文件夾的數據都復制到目標文件夾
    • 如果目標文件存在:
      • 如果是文件,則報錯
      • 如果是文件夾:則在目標文件夾中創建同名文件夾,並把目標放在新的文件夾中.

移動,重命名

mv move

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 *

# 這里需要提前用VMware 提前快照,然后恢復快照
# 右擊里面點擊拍攝快照

鏈接

軟鏈接

ln -s 源文件 目標文件	 # 創建命令 
1.相當於windows快捷方式
2.可以對目錄做軟鏈接,執行另外的一個文件或者目錄的路徑,大小是路徑的長度的字符
3.對磁盤引用次數沒有影響
4.可以跨分區
5.源文件發生改變,軟鏈接會跟着發生變化
6.源文件刪除,軟鏈接不能訪問,再添加相同名字時,即可引用

硬鏈接

ln 原文件 目標文件 	# 創建硬鏈接
1.磁盤引用次數發生變化
2.指向的是硬盤上的同一塊區域
3.硬盤的引用數會隨着硬鏈接的次數而增加
4.不能對目錄做硬鏈接
5.不能跨越分區
6.源文件發生改變,硬鏈接會發生改變
7.源文件刪除,硬鏈接可以訪問,磁盤引用數減少

CP

查看文件類型

file

輸入和輸出

1.標准輸入      默認是來自鍵盤的輸入  stdin      0
2.標准輸出      默認輸出到終端窗口    stdput     1
3.標准錯誤輸出  默認輸出到終端窗口    stderr      2

I/O重定向

> 覆蓋
1.  >    將>標准輸出重定向到文件中
2.  2>   將錯誤輸出重定向到文件中
3.  &>   將所有的輸出都重定向到文件中
禁止,允許覆蓋
1.  禁止覆蓋set -C
2.  允許覆蓋set +C
>> 追加
1.  >>    將標准輸出追加到文件中
2.  2>>   將錯誤輸出追加到文件中
3.  &>>   將所有的輸出都重定向到文件中

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

[root@localhost ~]# ls f 45yu > 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
  • ():合並多個文件的輸出 (錯誤1;錯誤2) 2> file
  • &> /dev/null(類似於黑洞,無限制接收)
  • /dev/zero

從文件導入stdin\

tr 字符替換

# 參數
-t 截斷
-d 刪除
-s 壓縮,去重
-c 取反

tr字符替換
tr 'a-z' 'A-Z' < /etc/issue

# 按字符順序替換
tr ab 12
ab
12
abb
122
# 分贓不均則默認取最后
tr abc 12
abc
122
# 解決分贓不均問題(截斷)
tr -t abc 12
abc
12c
# 刪除
tr -d abc
a1b1c
11
# 去重
tr -s a
aaaaabc
abc
# 取反
tr -sc a
aasdaaaa
# tr -d a 默認會把回車刪掉,要ctrl+d刪除
# 解決辦法 tr -dc 'a\n'

讀入文件和輸出文件不能是同一文件,要寫到新的文件中
tr -d <issue>issue

多行發送給stdin

1. cat > f1
# ctrl c可以結束
2. cat > f2 <<EOF 
# <<后面的值隨便寫,但是必須以它結束,約定俗成EOF
> EOF 
# 結束,結束之后,才能顯示.

管道

管道使用 "|" 來表示

命令1|命令2|命令3

  • 把命令1的輸出結果當做命令2的輸出結果,把命令2的輸出結果當做命令3的輸入結果
  • 默認情況下,管道只能傳送標准輸出
  • 如果需要把錯誤輸出也傳遞,則需要|&
  • 一般用來組合多個命令
有一些命令是不接受管道的
# 如touch,cat等 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM