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/"
  大小:4096      	塊: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
下一篇 2016-09-24

相關推薦

  • Linux基礎與命令解釋

    Linux基礎與命令 Linux起源     ? 1984 年:Richard Stallman 發起GNU 項目和自由軟件基金會 創建開源的UNIX 實用工具版本 創建通用公共許可證(GPL) ) 開源軟件許可實施原則 ? 1991 年:Linus Torvalds 發布Linux 創建開放源碼,類Unix 的內核,在GPL 下發布 下…

    Linux干貨 2017-03-17
  • Linux任務計劃及內核管理

    作業管理:     前臺作業:通過終端啟動,且啟動后一直占據終端;     后臺作業:通過終端啟動,但啟動后隨即轉入后臺運行(釋放終端) 將作業放入后臺的操作     1)運行中的作業:ctrl+z     2)還未執行的作業:command &   …

    Linux干貨 2016-09-09
  • 運維工程師技能需求排行

    這是我今天在拉勾網搜索運維,翻完了4四頁也招聘信息之后得到的,我的目的是想要看看之后的學習,哪個更應該成為重點,有些在我意料之中,有些還真的沒想到,算是努力了一個小時的收獲吧,分享給大家。
    注意:其中的看法僅代表個人觀點,很多都是依靠我自己的學習經驗和工作經驗累積的

    Linux干貨 2017-12-12
  • 馬哥教育網絡班21期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@itop ~]# fdisk /dev/sda&nbsp…

    Linux干貨 2016-08-30
  • CA和證書

    A與B雙方通信,需要通過簽證機構CA頒發證書,才可以互相信任,從而安全的進行數據傳輸。想要獲取證書,除了付費購買認證機構的證書,還可以自簽名獲取證書。 openssl命令可以搭建CA,實現自簽名證書。下面以三臺主機為例,模擬根CA、子CA的搭建,以及客戶端申請證書的過程。 一、搭建根CA /etc/pki/tls/openssl.cnf文件是openssl的…

    2017-09-10
  • 編譯安裝MariaDB源碼包

        因為MySQL的發展趨勢不甚樂觀,MariaDB已替代MySQL被CentOS 7做為默認組件,如果想在CentOS 6中使用最新的MariaDB,則需要我們手動安裝,其安裝方式有三種:     1、RPM包安裝     2、二進制…

    Linux干貨 2015-06-08
欧美性久久久久