1、常見文件管理命令分類
1)文件內容查看(cat、tca、more、less、head、tail)
2)文件字符替換(tr、sed、awk等)
3)文件創建、移動、復制和刪除(touch、mv、cp、scp、rm)
4)文件權限修改(chown,chmod,chgrp)
5)文件元數據查看和文件屬性(stat、file)
6)文件查找(find、locate)
文件內容查看
cat
使用方式:cat <file1>[file2…]
查看文件內容全文
[root@localhost ~]# cat anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable
tac
使用方式:tac <file1>[file2…]
查看文件內容全文(逆向顯示)
[root@localhost ~]# tac anaconda-ks.cfg %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end kexec-tools @core
more
more <file1>[file2…]
以當前終端大小為單位顯示文件內容。如果當前終端不能全部顯示,則顯示第一頁內容,使用空格鍵進行翻頁,q鍵退出。
[root@localhost ~]# more anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$KI37O.HrF6QsdogV$FarNU1T5m7MJU7AZL66Dsr8YtEBmj9YeXYg8.lbUWAIo0osZcfGNgO7KiKyTRboAbHGNuA42EKfJ2s66hHIR30 # System timezone timezone America/New_York --isUtc --More--(68%)
less
less <file1>[file2…]
以當前終端大小為單位顯示文件內容。如果當前終端不能全部顯示,則顯示第一頁內容,使用空格鍵進行翻頁,可使用方向鍵進行上下進行行級翻動、使用Pageup,PageDown按鍵進行頁面翻動,q鍵退出。
[root@localhost ~]# less anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto network --hostname=localhost.localdomain # Root password rootpw --iscrypted $6$KI37O.HrF6QsdogV$FarNU1T5m7MJU7AZL66Dsr8YtEBmj9YeXYg8.lbUWAIo0osZcfGNgO7KiKyTRboAbHGNuA42EKfJ2s66hHIR30 # System timezone timezone America/New_York --isUtc :
head
head [-n] <file1>
顯示文件的前幾行,不加參數默認顯示頭10行,-n參數指定顯示n行。
[root@localhost ~]# head anaconda-ks.cfg #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media cdrom # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts
tail
tail [-n|f] <file1>
顯示文件的后幾行,不加參數默認顯示后10行,-n參數指定顯示n行,-f顯示后10行后不退出持續顯示新增加的內容。
[root@localhost ~]# tail anaconda-ks.cfg %packages @^minimal @core kexec-tools %end %addon com_redhat_kdump --enable --reserve-mb='auto' %end
文件字符替換(tr、sed、awk等)
tr
tr [option] [set1] [set2]
option
-c或–complerment 取代所有不屬于第一字符集([set1])的字符
-d或–delete 刪除所有屬于第一字符集([set1])的字符
-s或–squeeze-repeats 把連續重復的字符單獨一個字符表示
-t或–truncate-set1 先刪除第一字符集比第二符集多出的字符
不加參數時,使用第二字符集中的字符替代第一字符集中的字符使用較多的是 [a-z] [A-Z] 替換文本中的字母的大小寫
注:tr 命令不能直接操作文件故需要將文件內容讀取后通過管道 | 或者使用輸入重定向 < 輸出給tr命令,tr命令也不會直接修改原文件。
特殊字符集
[:space:] 所有空白字符
[:alnum:]:字母和數字
[:alpha:]:字母 (包含大小寫)
[:cntrl:]:控制(非打?。┳址?nbsp;
[:digit:]:數字
[:graph:]:圖形字符
[:lower:]:小寫字母
[:print:]:可打印字符
[:punct:]:標點符號
[:space:]:空白字符
[:upper:]:大寫字母
[:xdigit:]:十六進制字符
示例1:刪除anaconda-ks.cfs中的字母
[root@localhost ~]# tr -d [:alpha:] < anaconda-ks.cfg #= # -- --=512 # # # -- # --= --='' # _.-8 # --= --=16777736 --= --6=
示例2 將anaconda-ks.cfs中的字母替換成大寫
root@localhost ~]# tr [a-z] [A-Z] < anaconda-ks.cfg #VERSION=DEVEL # SYSTEM AUTHORIZATION INFORMATION AUTH --ENABLESHADOW --PASSALGO=SHA512 # USE CDROM INSTALLATION MEDIA CDROM # USE GRAPHICAL INSTALL GRAPHICAL # RUN THE SETUP AGENT ON FIRST BOOT FIRSTBOOT --ENABLE # KEYBOARD LAYOUTS KEYBOARD --VCKEYMAP=US --XLAYOUTS='US' # SYSTEM LANGUAGE LANG EN_US.UTF-8 # NETWORK INFORMATION NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777736 --ONBOOT=OFF --IPV6=AUTO NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN # ROOT PASSWORD ROOTPW --ISCRYPTED $6$KI37O.HRF6QSDOGV$FARNU1T5M7MJU7AZL66DSR8YTEBMJ9YEXYG8.LBUWAIO0OSZCFGNGO7KIKYTRBOABHGNUA42EKFJ2S66HHIR30 # SYSTEM TIMEZONE TIMEZONE AMERICA/NEW_YORK --ISUTC # SYSTEM BOOTLOADER CONFIGURATION BOOTLOADER --APPEND=" CRASHKERNEL=AUTO" --LOCATION=MBR --BOOT-DRIVE=SDA AUTOPART --TYPE=LVM # PARTITION CLEARING INFORMATION CLEARPART --NONE --INITLABEL %PACKAGES @^MINIMAL @CORE KEXEC-TOOLS %END %ADDON COM_REDHAT_KDUMP --ENABLE --RESERVE-MB='AUTO' %END 123123
sed命令和awk命令使用比較復雜,在此不提。
文件創建、移動、復制和刪除
文件創建
touch [option] <filename1> [filename2]
創建一個普通的空文件
option
-a 修改文件的change time
-m 修改文件的modify time
-d或–date=STRING 創建時文件使用字符串指定的時間而非當前時間
-r或–reference=FILE 創建文件時使用引用文件的時間而非當前時間
-t STAMP 或–time=WORD 使用指定時間而非當前時間
示例1 創建文件 123.txt
[root@localhost ~]# touch 123.txt [root@localhost ~]# ll 123.txt -rw-r--r-- 1 root root 0 Jan 30 18:17 123.txt
示例2 修改文件的change time
[root@localhost ~]# stat 123.txt File: ‘123.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 68046578 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-30 18:17:01.353846432 -0500 Modify: 2017-01-30 18:17:01.353846432 -0500 Change: 2017-01-30 18:17:01.353846432 -0500 Birth: - [root@localhost ~]# touch 123.txt [root@localhost ~]# stat 123.txt File: ‘123.txt’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 68046578 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-01-30 18:18:10.357844376 -0500 Modify: 2017-01-30 18:18:10.357844376 -0500 Change: 2017-01-30 18:18:10.357844376 -0500 Birth: -
文件移動
mv
mv [option] file1 file2
移動file1 到file2位置,在同一目錄使用mv時是重命名效果,如移動的到的目錄有同名文件將會覆蓋已有文件。
option
-i 移動時如果有同名文件提示是否覆蓋(默認選項)
-f 移動時如果有同名文件直接覆蓋
實例:
[root@localhost ~]# mv anaconda-ks.cfg /usr/local/ [root@localhost ~]# ls /usr/local/ anaconda-ks.cfg bin etc games include lib lib64 libexec sbin share src
文件刪除
rm
rm [option] <filename>[filename_n]
刪除單個、多個文件或目錄。
option(常用)
-r 遞歸刪除
-f 強制刪除
示例:刪除文件anaconda-ks.cfg.1
[root@localhost ~]# ls anaconda-ks.cfg anaconda-ks.cfg.1 [root@localhost ~]# rm -rf anaconda-ks.cfg.1 [root@localhost ~]# ls anaconda-ks.cfg
文件復制
cp
cp [option] file1 file2
復制文件或目錄,如果復制到的目錄有同名文件將會覆蓋掉該文件
option(常用)
-i 覆蓋前提示是否覆蓋(默認選項)
-f 強制覆蓋沒有提示信息
-R|r 遞歸復制目錄
-d 復制符號鏈接本身而非符號鏈接指向的源文件
-p 復制時同時復制源文件的權限
示例:復制文件anaconda-ks.cfg為anaconda-ks.cfg.1
[root@localhost ~]# cp anaconda-ks.cfg anaconda-ks.cfg.1 [root@localhost ~]# ls anaconda-ks.cfg anaconda-ks.cfg.1
scp
scp [option] file1 username@address:/path/file2
跨系統復制文件或目錄
option
-r 遞歸復制目錄
[root@localhost ~]# scp anaconda-ks.cfg root@192.168.241.10:/root/anaconda-ks.cfg.1 The authenticity of host '192.168.241.10 (192.168.241.10)' can't be established. ECDSA key fingerprint is 64:d4:58:c7:00:70:f0:98:2d:76:9c:fb:ed:ef:5c:6f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.241.10' (ECDSA) to the list of known hosts. root@192.168.241.10's password: Permission denied, please try again. root@192.168.241.10's password: anaconda-ks.cfg
文件權限修改
linux系統中相對于文件有三種身份分別是 文件屬主,文件屬組和其他(既不是文件屬主也不是文件屬組)
修改文件的屬主
chown [option] username[:groupname] file
option
-R 遞歸處理目錄下的所有目錄或文件
示例:修改文件 anaconda-ks.cfg的屬主為ftp
[root@localhost ~]# chown ftp anaconda-ks.cfg [root@localhost ~]# ll 總用量 8 -rw-------. 1 ftp root 1116 11月 1 22:58 anaconda-ks.cfg
修改文件的屬組
chgrp [option] groupname file
option
-R 遞歸處理目錄下的所有目錄或文件
示例1:修改文件 anaconda-ks.cfg的屬組為ftp
[root@localhost ~]# chgrp ftp anaconda-ks.cfg [root@localhost ~]# ll 總用量 8 -rw-------. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg
示例2:修改文件 anaconda-ks.cfg的屬組為ftp
[root@localhost ~]# chown :ftp anaconda-ks.cfg [root@localhost ~]# ll 總用量 8 -rw-------. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg
linux系統中有3種權限讀(r) 、寫 (w)、執行(x),這三種權限轉換成8進制對應的數字為 4 2 1
文件的權限修改
chown
chown [option] MODE file1
修改文件的屬主,屬組,或其他權限
option
-r 遞歸修改
示例:修改文件 anaconda-ks.cfg屬組權限為讀寫執行
[root@localhost ~]# ll 總用量 8 -rw-------. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg -rw-------. 1 root root 1116 12月 6 20:52 anaconda-ks.cfg.1 [root@localhost ~]# chmod g+rwx anaconda-ks.cfg [root@localhost ~]# ll 總用量 8 -rw-rwx---. 1 ftp ftp 1116 11月 1 22:58 anaconda-ks.cfg
文件元數據查看和文件屬性
stat
stat [option] file
查看文件的元數據
option
-f 查看文件在文件系統中的信息
示例:顯示文件anaconda-ks.cfg的文件所在文件系統信息和元數據信息
[root@localhost ~]# stat -f anaconda-ks.cfg 文件:"anaconda-ks.cfg" ID:80300000000 文件名長度:255 類型:xfs 塊大?。?096 基本塊大小:4096 塊:總計:4926720 空閑:4686159 可用:4686159 Inodes: 總計:19717120 空閑:19689072 [root@localhost ~]# stat anaconda-ks.cfg 文件:"anaconda-ks.cfg" 大?。?116 塊:8 IO 塊:4096 普通文件 設備:803h/2051d Inode:67404352 硬鏈接:1 權限:(0670/-rw-rwx---) Uid:( 14/ ftp) Gid:( 50/ ftp) 環境:system_u:object_r:admin_home_t:s0 最近訪問:2016-12-06 20:36:13.086316361 +0800 最近更改:2016-11-01 22:58:52.158040304 +0800 最近改動:2016-12-06 21:26:25.225548862 +0800 創建時間:-
file
file [option] filename
查看文件屬性類型
option
-L 查看軟連接文件對應的源文件類型
示例:查看文件anconda-ks.cfg
[root@localhost ~]# file anaconda-ks.cfg anaconda-ks.cfg: ASCII text
文件查找
locate
locate [option] pattern
基于 /var/lib/slocate/slocate.db內的數據查找系統中的匹配關鍵字的文件或目錄(使用update命令可更新該數據庫)
option
-b 只查找基名匹配的文件或目錄
示例:查找文件名中包含anac的文件或目錄
[root@localhost ~]# locate -b anac /etc/anacrontab /etc/cron.hourly/0anacron /etc/selinux/targeted/modules/active/modules/anaconda.pp /root/anaconda-ks.cfg /usr/sbin/anacron /usr/share/anaconda
find
find [options] [查找起始路徑] [查找條件] [找到后的操作]
實時查找當前系統中匹配的文件或目錄(此命令較為復雜,此刻只做簡單示范)
示例:查找文件名中包含anac的文件或目錄
[root@localhost ~]# find / -name anac* /root/anaconda-ks.cfg
命令執行返回值
linux中命令執行后的狀態返回值保存在bash的$?變量中,可在命令執行后執行echo $? 命令來查看該值。
示例,查看上一個命令的命令執行返回值
[root@localhost ~]# find / -name anac* /root/anaconda-ks.cfg [root@localhost ~]# echo $? 0
該值為0 命令執行成功
1 命名執行錯誤
127 命令不存在
命令行展開
linux命令行中可使用{}對列表進行承載,并將其展開為多個路徑
示例1:創建/tmp目錄下的:a_c, a_d, b_c, b_d
[root@localhost ~]# mkdir /tmp/{a,c}_{b,d} [root@localhost ~]# ls /tmp/ a_b a_d c_b c_d
示例2 :創建/tmp/mylinux目錄下的:
mylinux/
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
[root@localhost ~]# mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,user/local/{bin,sbin},var/{lock,log,run}} [root@localhost ~]# tree /tmp/mylinux/ /tmp/mylinux/ ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rc.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── user │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run
命令別名使用
alias
linux中可使用alias定義一個命令的別名,常用來講一個復雜命名用一個簡單別名的方式進行使用,此方法定義的別名只在當前shell中生效,如果需要在全局或者重啟服務器依然生效需要將該命令聲明為環境變量并寫入/etc/bashrc 中。
alias new_name='command option'
示例:給命令 ls -al 定義一個別名 lsl
[root@localhost ~]# alias lsl='ls -ll' [root@localhost ~]# lsl total 28 -rwxr-xr-x 1 root root 271 Dec 24 11:18 1.sh -rw-r--r-- 1 root root 72 Dec 24 12:00 2.sh -rw-r--r-- 1 root root 90 Dec 24 12:08 3.sh -rw-r--r-- 1 root root 0 Feb 1 15:54 4 -rwxr-xr-x 1 root root 135 Dec 24 12:22 4.sh -rw-------. 1 root root 932 Oct 27 18:30 anaconda-ks.cfg -rw-r--r-- 1 root root 465 Dec 24 12:19 fstab -rw-r--r-- 1 root root 1040 Dec 24 12:19 passwd1
命令執行結果引用
linux中有兩種方式可直接引用命令執行結果
1、 在反引號中執行命令 `command`
2、$(command)
示例:顯示當前用戶家目錄的文件
[root@localhost ~]# echo `ls` 1.sh 2.sh 3.sh 4 4.sh anaconda-ks.cfg fstab passwd1 [root@localhost ~]# echo $(ls) 1.sh 2.sh 3.sh 4 4.sh anaconda-ks.cfg fstab passwd1
linux系統中的時間
date
用于顯示當前系統的時間
date "+option"
option
%Y : 完整年份 (0000-9999)
%m : 月份 (01-12)
%d : 日 (01-31)
%H : 小時(00-23)
%M : 分鐘(00-59)
%T : 直接顯示時間 (24 小時制)
%S : 秒(00-60)
%s : 時間戳(從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數)
示例:在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost ~]# touch /tmp/tfile-$(date "+%Y-%m-%d-%H-%M-%S") [root@localhost ~]# ls /tmp/ tfile-2017-02-01-16-59-50
bash中的特殊符號
linux中有一些特殊符號在使用中有特殊意義
* 通配符,代表任意字符(0到多個)
? 通配符,代表一個字符
# 注釋
/ 跳轉符號,將特殊字符或通配符還原成一般符號
| 分隔兩個管線命令的界定
; 連續性命令的界定
~ 用戶的根目錄
$ 變量前需要加的變量值
! 邏輯運算中的"非"(not)
/ 路徑分隔符號
>, >> 輸出導向,分別為"取代"與"累加"
' 單引號,不具有變量置換功能
" 雙引號,具有變量置換功能
` quote符號,兩個“中間為可以先執行的指令
() 中間為子shell的起始與結束
[] 中間為字符組合
[:space:] 所有空白字符
[:alnum:]:字母和數字
[:alpha:]:字母 (包含大小寫)
[:cntrl:]:控制(非打?。┳址?nbsp;
[:digit:]:數字
[:graph:]:圖形字符
[:lower:]:小寫字母
[:print:]:可打印字符
[:punct:]:標點符號
[:space:]:空白字符
[:upper:]:大寫字母
[:xdigit:]:十六進制字符
[^] 對中間字符組合取反
{} 中間為命令區塊組合
示例1:顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
ls -d /var/l*[[:digit:]]*[[:lower:]] /var/l2a
示例2:顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
[root@localhost ~]# ls /etc/[0-9]*[^0-9] /etc/12d
示例3:顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
[root@localhost ~]# ls /etc/[^[:alpha:]][[:alpha:]]* /etc/5a2345 /etc/5awww
示例4:復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
[root@localhost ~]# cp -a /etc/p*[^[:digit:]] /tmp/mytest1/ [root@localhost ~]# ls /tmp/mytest1/ pam.d passwd passwd- pki plymouth pm popt.d postfix ppp prelink.conf.d printcap profile profile.d protocols python
示例5:復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄
[root@localhost ~]# cp -a /etc/*.d /tmp/mytest2 [root@localhost ~]# ls /tmp/mytest2 bash_completion.d depmod.d init.d modules-load.d prelink.conf.d rc2.d rc6.d statetab.d xinetd.d binfmt.d dnsmasq.d ld.so.conf.d my.cnf.d profile.d rc3.d rc.d sudoers.d yum.repos.d chkconfig.d dracut.conf.d logrotate.d pam.d rc0.d rc4.d rsyslog.d sysctl.d cron.d grub.d modprobe.d popt.d rc1.d rc5.d rwtab.d tmpfiles.d
示例6:復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
[root@localhost ~]# cp -a /etc/[l,m,n]*.conf /tmp/mytest3 [root@localhost ~]# ls /tmp/mytest3 ld.so.conf libaudit.conf libuser.conf locale.conf logrotate.conf man_db.conf mke2fs.conf nsswitch.conf
原創文章,作者:胡安慧,如若轉載,請注明出處:http://www.www58058.com/67294