Linux系統基礎(二)

一、Linux文件管理命令及其常用方法

1、cd(切換目錄)這個命令應該是Linux中用的最頻繁的一個命令之一了,因為我們經常需要進行目錄的切換。在詳解這個命令之前,首先得補充一個重要的知識,就是我們常用的一些比較特殊的目錄:
.        代表當前目錄
..        代表上一層目錄
-        代表前一個工作目錄
~        代表【目前用戶身份】所在的自家目錄
~account  代表 account 這個用戶的自家家目錄
通過下面的示例看下具體的用法:
[root@baoman ~]# cd /home         # 此時我們進入到了home目錄下
[root@baoman home]# cd .          # .表示當前目錄,所以當前還是在home目錄下
[root@baoman home]# cd ..         # ..表示上一層目錄,所以此時就進入到了 / 目錄下
[root@baoman /]# cd ~             #~表示【目前用戶身份】所在的自家目錄,當前用戶就是root,所以就進入到了root這個目錄下
[root@baoman ~]# cd ~baoman       #~account表示 account 這個用戶的自家家目錄 ,我如果想進入 baoman 這個用戶的主目錄,輸入 cd ~xiaoluo即可
[root@baoman baoman]# cd -/root   #-表示前一個工作目錄,我們的前一個工作目錄就是在root下,所以此時又會進入到root這個目錄下
[root@baoman ~]# cd ../usr        #如果我們需要進入到usr目錄下,這里可以寫成相對路徑形式也可以寫成絕對路徑形式
2.pwd (顯示當前所在的目錄)

這個命令對于我們來說也是一個很重要的命令,因為在Linux下我們都是通過在命令行輸入命令,所有如果進入到了一個目錄下,就不會像windows那樣直觀的顯示出當前所在的路徑,此時我們就可以輸入 pwd 這個命令來顯示我們當前所在的目錄。
[root@baoman ~]# pwd [-P]參數:
-P  :顯示出確實的路徑,而非使用鏈接 (link) 路徑。(P是大寫)
范例:
[root@baoman ~]# pwd/root   <== 顯示出當前所在的目錄
[root@baoman ~]# cd /var/mail
[root@baoman mail]# pwd
/var/mail
[root@baoman mail]# pwd -P /var/spool/mail   <== 怎么回事?有沒有加 -P 差很多
[root@baoman mail]# ls -l /var/mail
lrwxrwxrwx.  1 root root   10 3月  30 10:37 mail -> spool/mail    #看到這里應該知道為啥了吧?因為 /var/mail 是連結文件,連結到 /var/spool/mail # 所以,加上 pwd -P 的參數后,會不以連結文件的數據顯示,而是顯示正確的完整路徑!
3、mkdir(建立新目錄)
[root@baoman ~]# mkdir [-mp] 目錄名稱參數:
-m :配置文件目錄的權限!我們可以自己設定自己想要的權限,而不需要使用umask定義的默認權限
-p :幫助你直接將所需要的目錄遞歸建立起來!
范例:
[root@baoman ~]# cd /home
[root@baoman home]# mkdir test    <== 建立一名為 test 的新目錄
[root@baoman home]# mkdir test1/test2/test3/test4mkdir: 無法創建目錄"test1/test2/test3/test4": 沒有那個文件或目錄
[root@linux tmp]# mkdir -p test1/test2/test3/test4    # 加了這個 -p 的參數,可以自行幫我們建立多層目錄!
[root@baoman home]# mkdir -p test1/test2/test3/test4
[root@baoman home]#  mkdir -m 711 test2
[root@baoman home]#  ls -ldrwxr-xr-x.  2 root    root         4096 4月  21 13:08 test
drwxr-xr-x.  3 root    root         4096 4月  21 13:10 test1
drwx--x--x.  2 root    root         4096 4月  21 13:11 test2# 仔細看上面的權限部分,如果沒有加上 -m 來強制設定屬性,系統會使用默認屬性。如果加上了-m 這個參數,我們就可以自己定義權限了
4、rmdir(刪除“空”目錄)
[root@baoman ~]# rmdir [-p] 目錄名稱參數:
-p :連同上層『空的』目錄也一起刪除
范例:
[root@baoman home]# ls -l
drwxr-xr-x.  2 root    root         4096 4月  21 13:08 test
drwxr-xr-x.  3 root    root         4096 4月  21 13:10 test1
drwx--x--x.  2 root    root         4096 4月  21 13:11 test2
[root@baoman home]# rmdir test
[root@baoman home]# rmdir test1rmdir: 刪除 "test1" 失敗: 目錄非空
[root@baoman home]# rmdir -p test1/test2/test3/test4/
[root@baoman home]# ls -ldrwx--x--x.  2 root    root         4096 4月  21 13:11 test2# 利用 -p 這個參數,立刻就可以將 test1/test2/test3/test4 一次刪除~# 不過要注意的是,這個 rmdir 僅能【刪除空的目錄】!
5、ls(查看文件和目錄)
[root@baoman ~]# ls [-aAdfFhilRS] 目錄名稱
[root@baoman ~]# ls [--color={none,auto,always}] 目錄名稱
[root@baoman ~]# ls [--full-time] 目錄名稱
參數:
-a  :全部的文件,連同隱藏文件( 開頭為 . 的目錄) 一起列出來~
-A  :全部的文件,連同隱藏文件,但不包括 . 與 .. 這兩個目錄,一起列出來~
-d  :僅列出目錄本身,而不是列出目錄內的文件數據
-f  :直接列出結果,而不進行排序 (ls 預設會以文件名排序!)
-F  :根據文件、目錄等信息,給予附加數據結構,例如:      *:代表可執行文件; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 文件;
-h  :列出文件的打小(例如GB、KB等等)
-i  :列出 inode 位置,而非列出文件屬性;
-l  :長數據串行出,包含文件的屬性等等數據;
-n  :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在賬號管理提到!)
-r  :將排序結果反向輸出,例如:原本文件名由小到大,反向則為由大到小;
-R  :連同子目錄內容一起列出來;
-S  :以文件容量大小排序!
-t  :依時間排序
   --color=never  :不要依據文件特性給予顏色顯示;
   --color=always :顯示顏色--color=auto   :讓系統自行依據設定來判斷是否給予顏色
   --full-time    :以完整時間模式 (包含年、月、日、時、分) 輸出
   --time={atime,ctime} :輸出 access 時間或 改變權限屬性時間 (ctime) 
                       而非內容變更時間 (modification time)
6、cp(復制)
[root@baoman ~]# cp [-adfilprsu] 源文件(source) 目的文件(destination)
[root@baoman ~]# cp [options] source1 source2 source3 .... directory
參數:
-a  :相當于 -pdr 的意思;
-d  :若來源文件為鏈接文件的屬性(link file),則復制鏈接文件屬性而非檔案本身;
-f  :為強制 (force) 的意思,若有重復或其他疑問時,不會詢問使用者,而強制復制;
-i  :若目的文件(destination)已經存在時,在覆蓋時會先詢問是否真的動作!
-l  :進行硬式連結 (hard link) 的連結文件建立,而非復制文件本身;
-p  :連同文件的屬性一起復制過去,而非使用默認屬性;
-r  :遞歸持續復制,用于目錄的復制行為;
-s  :復制成為符號鏈接文件 (symbolic link),亦即『快捷方式』文件;
-u  :若 destination 比 source 舊才更新 destination !
最后需要注意的,如果來源檔有兩個以上,則最后一個目的文件一定要是『目錄』
cp的常用用法:
實例一:將家目錄下的 .bashrc 復制到 /tmp 下,并更名為 bashrc
[root@baoman home]# cd /tmp
[root@baoman tmp]# cp ~/.bashrc bashrc
[root@baoman tmp]# cp -i ~/.bashrc bashrc cp:是否覆蓋"bashrc"? n# 重復作兩次動作,由于 /tmp 底下已經存在 bashrc 了,加上 -i 參數,# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y !# 但是,反過來說,如果不想要詢問時,則加上 -f 這個參數來強制直接覆蓋!實例二:將 /var/log/wtmp 復制到 /tmp 底下
[root@baoman tmp]# cp /var/log/wtmp 
[root@baoman tmp]# ls -l /var/log/wtmp wtmp 
-rw-rw-r--. 1 root utmp 204288 4月  21 11:22 /var/log/wtmp
-rw-r--r--. 1 root root 204288 4月  21 13:33 wtmp         #注意到了嗎?!在不加任何參數的情況下,文件的所屬者會改變,連權限也跟著改變了# 這是個很重要的特性!要注意!還有,連文件建立的時間也不一樣了!# 如果您想要將文件的所有特性都一起復制過來,可以加上 -a 參數即可![root@baoman tmp]# cp -a /var/log/wtmp wtmp2[root@baoman tmp]# ls -l /var/log/wtmp wtmp2-rw-rw-r--. 1 root utmp 204288 4月  21 11:22 /var/log/wtmp
-rw-rw-r--. 1 root utmp 204288 4月  21 11:22 wtmp2        #此時我們看到在加上 -a 這個參數以后,文件的所有屬性都會被復制過來。
實例三:復制 /etc/ 這個目錄下的所有內容到 /tmp 底下
[root@baoman tmp]# cp /etc/ /tmpcp: 略過目錄"/etc/"    -->> 如果我們復制的是目錄,此時必須要加上 -r 這個參數才行
[root@baoman tmp]# cp -r /etc/ /tmp# 還是要再次的強調! -r 是可以復制目錄,但是,檔案與目錄的權限會被改變# 所以,也可以利用 cp -a /etc /tmp 來下達指令!    使用-a 參數相當于同時使用了 -pdr 參數
7、rm(刪除)
[root@baoman ~]# rm [-fir] 文件或目錄
參數:
-f  :就是 force 的意思,強制移除;
-i  :互動模式,在刪除前會詢問使用者是否動作
-r  :遞歸刪除!最常用在目錄的刪除了

示例:

[root@baoman tmp]# rm bashrc 
rm:是否刪除普通文件 "bashrc"?y
[root@baoman tmp]# rm wtmp wtmp2   
rm:是否刪除普通文件 "wtmp"?yrm:是否刪除普通文件 "wtmp2"?y
[root@baoman tmp]# rm -rf etc/  -->> 這個就會強制將etc這個目錄以及里面的所有子目錄、文件刪除掉
8、mv(移動文件與目錄、文件重命名)
[root@baoman ~]# mv [-fiu] source destination
[root@baoman ~]# mv [options] source1 source2 source3 .... directory參數:
-f  :force 強制的意思,強制直接移動而不詢問;
-i  :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
-u  :若目標文件已經存在,且 source 比較新,才會更新 (update)

實例一:復制一檔案,建立一目錄,將檔案移動到目錄中
[root@baoman tmp]# cp ~/.bashrc bashrc
[root@baoman tmp]# mkdir mvtest
[root@baoman tmp]# mv bashrc mvtest/
[root@baoman tmp]# cd mvtest/
[root@baoman mvtest]# lsbashrc     # 將某個檔案移動到某個目錄去,就是這樣做!
實例二:將剛剛的目錄名稱更名為 mvtest2
[root@baoman tmp]# mv mvtest mvtest2  <== 這樣就更名了!
# 其實在 Linux 底下還有個命令令,名稱為 rename ,# 該命令就是專門用來對文件或者目錄進行重命名的鎮明路!可以參閱 man rename 了解其更多的用法 !
9、basename(獲取路徑的文件名)dirname(獲取路徑的目錄名)
[root@baoman ~]# basename /etc/inittab inittab  -->>這個就是我們的文件名
[root@baoman ~]# dirname /etc/inittab /etc    -->>這個就是我們的目錄名

二、bash命令狀態返回值

Linux下一條命令或一個進程執行完成會返回一個一個狀態碼。

0   ===   成功執行

非0   ===  執行過程中出現異?;蚍钦M顺?,范圍是1-255

在Shell腳本中 最后執行的一條命令將決定整個shell腳本的狀態. 此外 shell的內部命令exit也可以隨時終止shell腳本的執行,返回Shell腳本的狀態碼

當shell腳本執行結束前 的最后一個命令是不帶參數的exit ,那么 shell腳本的最終返回值 就是 exit 語句前一條語句的返回值,根據這個值可以判斷腳本成功執行與否。

查看緊鄰的上一條命令執行狀態的命令是:echo $?

三、命令行展開 在非引號內的內容,如果用花括號包括,而且里面用逗號分隔(至少包含一個逗號,可以是空內容),這樣花括號里的內容會被展開成用空格分開的一個列表,花括號前后可以緊隨前綴和后綴(前后綴都是可選的)。

[root@localhost usr]# echo {a,b,c}a b c
[root@localhost usr]# echo a{b,c}
ab ac
[root@localhost usr]# echo {a,b}{c,d}
ac ad bc bd
[root@localhost usr]# echo a{,,,,,}b
ab ab ab ab ab ab

四、命令行展開示例:

[root@baoman ~]# mkdir /tmp/{a,b}_{c,d}[root@baoman ~]# ls /tmpa_c  a_d  b_c  b_d

[root@baoman ~]# mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr,var/{lock/{bin,sbin},log,run}}[root@baoman ~]# tree /tmp/mylinux//tmp/mylinux/
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib│   └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
└── var
    ├── lock
    │   ├── bin
    │   └── sbin
    ├── log
    └── run23 directories, 0 files

五、文件的元數據信息查看及修改 1、任何文件系統中的數據分為數據和元數據。數據是指普通文件中的實際數據,而元 數據指用來描述一個文件的特征的系統數據,諸如訪問權限、文件擁有者時間戳以及文件數據 塊的分布信息(inode…)等等

[root@baoman ~]# stat /tmp/mylinux/
  文件:"/tmp/mylinux/"
  大?。?096      	塊:8          IO 塊:4096   目錄
設備:fd00h/64768d	Inode:3298        硬鏈接:14權限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:user_tmp_t:s0
最近訪問:2016-09-24 17:48:51.122124573 +0800最近更改:2016-09-24 17:48:25.770123626 +0800最近改動:2016-09-24 17:48:25.770123626 +0800創建時間:-
3、修改
touch命令:
touch - change file timestamps

touch [OPTION]... FILE...
-c: 指定的文件路徑不存在時不予創建;
-a: 僅修改access time;
-m:僅修改modify time;
-t STAMP
[[CC]YY]MMDDhhmm[.ss]

六、定義別名,引用另一個命令的執行結果

[root@baoman ~]# alias grep='grep --auto'  #創建別名,也可以把命令寫入環境變量中
[root@baoman ~]# alias   #查看當前shell下的別名alias cp='cp -i'alias egrep='egrep --color=auto'alias fgrep='fgrep --color=auto'alias grep='grep --auto'alias l.='ls -d .* --color=auto'alias ll='ls -l --color=auto'alias ls='ls --color=auto'alias mv='mv -i'alias rm='rm -i'alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'引用一個命令的執行結果有兩種方法:
    方法一:``:反斜線
    方法二:$()
    [root@baoman ~]# ifconfig 
                eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.10.10  netmask 255.255.255.0  broadcast 172.16.10.255
        inet6 fe80::20c:29ff:fe3c:5102  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:3c:51:02  txqueuelen 1000  (Ethernet)
        RX packets 23046  bytes 29348499 (27.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8983  bytes 806119 (787.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 4  bytes 340 (340.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 340 (340.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
        [root@baoman ~]# ifconfig | awk 'NR==2{print$2}'
            172.16.10.10
        [root@baoman ~]# echo `ifconfig | awk 'NR==2{print$2}'`
            172.16.10.10
        [root@baoman ~]# echo $(ifconfig | awk 'NR==2{print$2}')
            172.16.10.10

七、顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間至少出現一個數字(可以有其他字符)的文件或目錄:

[root@baoman ~]# touch /var/123abc
[root@baoman ~]# mkdir /var/1pam2c
[root@baoman ~]# ls  -d /var/1*[0-9]*[[:lower:]]
/var/123abc  /var/1pam2c

八、顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄;

[root@baoman ~]# touch /etc/1a
[root@baoman ~]# mkdir /etc/22222zZ
[root@baoman ~]# ls /etc/[0-9]*[^0-9]/etc/1a

/etc/22222zZ:
[root@baoman ~]# ls -d /etc/[0-9]*[^0-9]
/etc/1a  /etc/22222zZ

九、顯示/etc目錄下,以非字母開頭,后面跟一個字母以及其他任意長度任意字符的文件或目錄;

[root@baoman ~]# ls -d /etc/[^a-z][a-z]*
/etc/1a

十、在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名如:tfile-2016-05-27-09-32-22;

[root@baoman ~]# mkdir /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
[root@baoman ~]# ls /tmp/
tfile-2016-09-24-18-17-18

十一、復制/etc目錄下所有以P開頭,以非數值結尾的文件或目錄到/tmp/mytest1目錄下;

[root@baoman tmp]# mkdir mytest1
[root@baoman tmp]# cp -r /etc/p*[^0-9] /tmp/mytest1/
[root@baoman tmp]# ls /tmp/mytest1/
pam.d  passwd  passwd-  pki  plymouth  pm  popt.d  postfix  ppp  prelink.conf.d  printcap  profile  profile.d  protocols  python

十二、復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中;

[root@baoman tmp]# mkdir mytest2
[root@baoman tmp]# cp -r /etc/*.d /tmp/mytest2/
[root@baoman tmp]# ls /tmp/mytest2/
bash_completion.d  cron.d     dracut.conf.d  init.d        logrotate.d     my.cnf.d  prelink.conf.d  rc1.d  rc4.d  rc.d       statetab.d  tmpfiles.dbinfmt.d           depmod.d   gdbinit.d      latrace.d     modprobe.d      pam.d     profile.d       rc2.d  rc5.d  rsyslog.d  sudoers.d   xinetd.dchkconfig.d        dnsmasq.d  grub.d         ld.so.conf.d  modules-load.d  popt.d    rc0.d           rc3.d  rc6.d  rwtab.d    sysctl.d    yum.repos.d

十三、復制/etc目錄下所有以1或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

[root@baoman tmp]# cp  /etc/{1,m,n}*.conf /tmp/mytest3/
cp: 無法獲取"/etc/1*.conf" 的文件狀態(stat): 沒有那個文件或目錄
[root@baoman tmp]# ls /tmp/mytest3/
man_db.conf  mke2fs.conf  nsswitch.conf

原創文章,作者:jbm,如若轉載,請注明出處:http://www.www58058.com/48814

(0)
jbmjbm
上一篇 2016-09-23 21:45
下一篇 2016-09-24 15:21

相關推薦

  • ps常用命令

    Linux上進程有5種狀態: 1. 運行(正在運行或在運行隊列中等待) 2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號) 3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生) 4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用后釋放) 5. …

    Linux干貨 2017-07-02
  • 建立dns服務

    一 、環境 兩臺機器,一臺LINUX,機器名為LINUX,域名為tongqiang.cnIP地址為192.168.0.5,另一臺機器為WIN98,機器名為tongqiang,IP地址從LINUX上DHCP服務器上獲得。 二 、建立DNS服務器(假設你的DNS軟件包已經安裝好了,而且是在安裝LINUX是選擇安裝DNS服務器的) 建立DNS服務器只需要修改以下幾…

    2017-10-09
  • Linux發展史

    1、Linux是什么     Linux 是一套 Unix-like 的作業系統,是 Unix 的一種,它控制整個系統基本服務的核心程式 (kernel) 是由 Linus 帶頭開發出來的,「Linux」這個名稱便是以「Linus's Minix」來命名,Linus 選擇用「大眾公有版權」 (GPL)的方式來發行這份程…

    Linux干貨 2016-10-19
  • 第一周作業

    # 1.計算機的基本組成和功能: – **存儲器**:  實現記憶功能的部件用來存放計算程序及參與運算的各種數據 – **運算器**:  負責數據的算術運算和邏輯運算即數據的加工處理 – **控制器**:  負責對程序規定的控制信息進行分析,控制并協調輸入,輸出操作或內存訪問 – **輸入設備**: 實現計算程…

    Linux干貨 2016-12-04
  • redis-cli的一些有趣也很有用的功能

    redis-cli我們最常用的三個參數就是-h、-p、-a選項,分配用來指定連接的redis-server的host、port和登錄密碼。通過redis-cli –help發現,redis-cli還提供了其他很多的參數和功能。 1)-x-x選項從標準輸入(stdin)讀取最后一個參數。 比如從管道中讀取輸入: echo -en &quot…

    Linux干貨 2016-04-13
  • N26-第一周博客作業

    一:計算機的組成及其功能  1.運算器(CPU) 對數據進行各種運算;  2.控制器(CPU) 用來控制整個計算機操作系統;  3.存儲器 內存(RAM)存儲程序和各種數據信息;  4.輸入裝置 (Input)下達指令,提供數據,常見的輸入裝置有鼠標,鍵盤等;  5.輸出設備 (Output)輸出數據加工后的…

    Linux干貨 2016-12-31
欧美性久久久久