linux的文件管理類命令
linux系統下的涉及到目錄管理命令,主要有 mkdir
,rmdir
linux系統下也會用到許多文件查看類命令,包括cat
,tac
,head
,tail
,more
,less
等
linux系統下涉及的文件管理類命令主要有cp
,mv
,rm
本節我們主要說明文件管理類命令的使用方法。
cp命令的使用方法
首先,cp這個命令的作用是可以復制文件或目錄,且支持多個文件同時復制。
cp命令的語法格式:
SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
單源復制:cp [OPTION]…SOURCE DEST
-
如果dest文件不存在則創建文件,并復制源文件數據流到DEST文件中(這里源,目的都是文件)
-
如果dest文件存在,則復制源文件數據覆蓋目標文件(這里源,目標都是文件)
-
如果dest是一個目錄,則在dest目錄中創建相同的文件和內容(這里源是文件,目的是目錄)
-
如果源是目錄,需要加選項-t,這這時候dest必須是目錄,將其源目錄下所有文件復制到目標目錄下!
多源復制:cp [OPTION]… SOURCE… DIRECTORY
-
多源復制的目標必須是目錄
-
可以復制多個文件,到同一個目錄下。
常用選項option:
-
-i:覆蓋之前提醒用戶確認 。cp的別名就是cp -i
-
-f:強制覆蓋目標文件
-
-r:遞歸復制目錄,復制目錄和目錄中的內容到目標位置
-
-d:復制一個符號鏈接本身,不會其指向的真正的源文件。
-
-a: 表示連源文件源文件屬性都復制過去
-
–preserv=
-
mode 權限
-
ownership 屬主屬組
-
timestamps:時間戳
-
context:安全標簽
-
xattr:擴展屬性
-
links:符號鏈接
-
all:所有文件
示例:
[root@localhost ~]# cat cpdoc.txt Are you kidding me ? I 'm angry! [root@localhost ~]# cat cpdoc1.txt no, i am not I'am sorry~ [root@localhost ~]# cp cpdoc1.txt cpdoc2.txt [root@localhost ~]# cat cpdoc2.txt no, i am not I'am sorry~ [root@localhost ~]# cp cpdoc.txt cpdoc1.txt cp: overwrite `cpdoc1.txt'? Y [root@localhost ~]# cat cpdoc1.txt Are you kidding me ? I 'm angry! [root@localhost ~]# cp cpdoc.txt cpdoc1.txt hahaha [root@localhost ~]# ls hahaha cpdoc1.txt cpdoc.txt text.txt [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# cp hahaha -r test [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# tree test test |-- 1p2a |-- 28pa |-- Pa99 |-- hahaha | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 10 files [root@localhost ~]# cp --preserv=mode cpdoc.txt test [root@localhost ~]# ls -l test/cpdoc.txt -rw-r--r-- 1 root root 34 Sep 25 01:05 test/cpdoc.txt [root@localhost ~]# ls -l cpdoc.txt -rw-r--r-- 1 root root 34 Sep 25 00:46 cpdoc.txt [root@localhost ~]#
mv的使用方法
mv和cp使用方式基本一樣,只是mv命令完成cp操作之后,會把原來的source文件刪除。
注意:mv一個目錄時不需要加-r選項即可實現遞歸移動
命令格式:
SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
常用選項:
-
-i:交互式;
-
-f:force
示例:
[root@localhost ~]# tree test test |-- 1p2a |-- 28pa |-- Pa99 |-- cpdoc.txt |-- hahaha | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 11 files [root@localhost ~]# mv test/1p2a test/hahaha [root@localhost ~]# tree test test |-- 28pa |-- Pa99 |-- cpdoc.txt |-- hahaha | |-- 1p2a | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 11 files [root@localhost ~]# mv test/hahaha test/mvtest [root@localhost ~]# tree test test |-- 28pa |-- Pa99 |-- cpdoc.txt |-- mvtest | |-- 1p2a | |-- cpdoc.txt | |-- cpdoc1.txt | `-- text.txt |-- p,a |-- pa |-- pa12 `-- papi 1 directory, 11 files [root@localhost ~]#
rm的用法
rm主要是做命令刪除用的,刪除操作非常危險,linux系統無回收站??梢圆挥眠@個命令,只是將其mv到某個位置。
語法:
SYNOPSIS rm [OPTION]... FILE...
常用選項:
-
-i:交互式
-
-r:遞歸操作
-
-f:強制操作
[root@localhost ~]# rm /tmp/ .esd/ .gdm_socket issue keyring-pDpnGb/ mysysroot/ virtual-root.0ghOid/ .X0-lock .font-unix/ .gdmZYIZNY issue.tee keyring-TNKNhD/ test.1363 virtual-root.pLN0g0/ .X11-unix/ functions grub.conf keyring-0QvdsM/ keyring-VIDgg7/ test.1365 VMwareDnD/ gconfd-root/ hahaha/ keyring-LcHTXN/ mapping-chenjianhang test.1413 vmware-root/ .gdm5PIVNY .ICE-unix/ keyring-nhUcNx/ mapping-root test.etc vmware-root-2084385593/ [root@localhost ~]# rm -r /tmp/hahaha rm: descend into directory `/tmp/hahaha'? y rm: remove regular empty file `/tmp/hahaha/text.txt'? [root@localhost ~]# ls /tmp functions hahaha keyring-0QvdsM keyring-pDpnGb mapping-chenjianhang test.1363 test.etc VMwareDnD gconfd-root issue keyring-LcHTXN keyring-TNKNhD mapping-root test.1365 virtual-root.0ghOid vmware-root grub.conf issue.tee keyring-nhUcNx keyring-VIDgg7 mysysroot test.1413 virtual-root.pLN0g0 vmware-root-2084385593 [root@localhost ~]#
bash的工作特性之命令執行狀態返回值
bash通過狀態返回值來輸入命令的執行結果
成功:0
失?。?-255
命令執行完成后,狀態返回值保存在bash的特殊變量?
中.
演示內容:
[root@localhost ~]# ls 06:13:04 2016 a.out asasx.txt cpdoc2.txt Desktop grep.txt install.log like.txt qq qq.save.1 test Thu 15 anaconda-ks.cfg asas cpdoc1.txt cpdoc.txt grep hahaha install.log.syslog PDT qq.save Sep testdir vimtext [root@localhost ~]# echo $? 0 [root@localhost ~]# lss -bash: lss: command not found [root@localhost ~]# echo $? 127 [root@localhost ~]# cd /xasmxaiosjxo -bash: cd: /xasmxaiosjxo: No such file or directory [root@localhost ~]# echo $? 1 [root@localhost ~]#
需要注意,bash只能獲取最近一次狀態結果。
bash的工作特性之命令行展開
-
~:自動展開為用戶的家目錄,或指定用戶的家目錄
-
{}:可承載一個逗號分隔的路徑列表,并能將其展開為多個路徑
示例:
[root@localhost ~]# cd /tmp [root@localhost tmp]# cd ~ [root@localhost ~]# pwd /root [root@localhost ~]#
創建/tmp目錄下的:a_c,a_d,b_c,b_d
[root@localhost ~]# ls -a /tmp . functions .gdmZYIZNY issue keyring-nhUcNx mapping-chenjianhang test.1365 virtual-root.pLN0g0 .X0-lock .. gconfd-root grub.conf issue.tee keyring-pDpnGb mapping-root test.1413 VMwareDnD .X11-unix .esd .gdm5PIVNY hahaha keyring-0QvdsM keyring-TNKNhD mysysroot test.etc vmware-root .font-unix .gdm_socket .ICE-unix keyring-LcHTXN keyring-VIDgg7 test.1363 virtual-root.0ghOid vmware-root-2084385593 [root@localhost ~]# [root@localhost ~]# [root@localhost ~]# touch /tmp/{a,b}_{c,d} [root@localhost ~]# ls -a /tmp . b_c functions .gdmZYIZNY issue keyring-nhUcNx mapping-chenjianhang test.1365 virtual-root.pLN0g0 .X0-lock .. b_d gconfd-root grub.conf issue.tee keyring-pDpnGb mapping-root test.1413 VMwareDnD .X11-unix a_c .esd .gdm5PIVNY hahaha keyring-0QvdsM keyring-TNKNhD mysysroot test.etc vmware-root a_d .font-unix .gdm_socket .ICE-unix keyring-LcHTXN keyring-VIDgg7 test.1363 virtual-root.0ghOid vmware-root-2084385593 [root@localhost ~]#
創建/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 -pv /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}} mkdir: created directory `/tmp/mylinux' mkdir: created directory `/tmp/mylinux/bin' mkdir: created directory `/tmp/mylinux/boot' mkdir: created directory `/tmp/mylinux/boot/grub' mkdir: created directory `/tmp/mylinux/dev' mkdir: created directory `/tmp/mylinux/etc' mkdir: created directory `/tmp/mylinux/etc/rc.d' mkdir: created directory `/tmp/mylinux/etc/rc.d/init.d' mkdir: created directory `/tmp/mylinux/etc/sysconfig' mkdir: created directory `/tmp/mylinux/etc/sysconfig/network-scripts' mkdir: created directory `/tmp/mylinux/lib' mkdir: created directory `/tmp/mylinux/lib/modules' mkdir: created directory `/tmp/mylinux/lib64' mkdir: created directory `/tmp/mylinux/proc' mkdir: created directory `/tmp/mylinux/sbin' mkdir: created directory `/tmp/mylinux/sys' mkdir: created directory `/tmp/mylinux/tmp' mkdir: created directory `/tmp/mylinux/user' mkdir: created directory `/tmp/mylinux/user/local' mkdir: created directory `/tmp/mylinux/user/local/bin' mkdir: created directory `/tmp/mylinux/user/local/sbin' mkdir: created directory `/tmp/mylinux/var' mkdir: created directory `/tmp/mylinux/var/lock' mkdir: created directory `/tmp/mylinux/var/log' mkdir: created directory `/tmp/mylinux/var/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 24 directories, 0 files [root@localhost ~]#
文件的元數據信息
文件的數據有2類:數據本身和元數據,元數據相當于對文件的一個摘要,通過stat命令可以查看文件的元數據。
例子:
[root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 02:19:22.000000000 -0700 Modify: 2016-09-25 02:19:05.000000000 -0700 Change: 2016-09-25 04:02:05.000000000 -0700 [root@localhost ~]#
主要顯示了以下內容:
-
文件名
-
文件大小
-
文件塊
-
文件類型
-
文件鏈接數
-
文件權限
-
UID
-
GID
-
文件最后一次被查看的時間
-
文件數據最后一次被修改的時間
-
文件數據和元數據最后一次被改動的時間
通過touch命令可以改變文件的時間戳,touch命令的用法如下:
-
-c:指定文件不存在時不予以創建
-
-a:只改訪問時間access time
-
-m:只改更改時間modify time
-
-t:指定改成什么時間,年月日時分.秒
[root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 02:19:22.000000000 -0700 Modify: 2016-09-25 02:19:05.000000000 -0700 Change: 2016-09-25 04:02:05.000000000 -0700 [root@localhost ~]# touch -a /tmp/mylinux [root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 08:12:44.000000000 -0700 Modify: 2016-09-25 02:19:05.000000000 -0700 Change: 2016-09-25 08:12:44.000000000 -0700 [root@localhost ~]# touch -m /tmp/mylinux [root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 08:12:44.000000000 -0700 Modify: 2016-09-25 08:13:26.000000000 -0700 Change: 2016-09-25 08:13:26.000000000 -0700 [root@localhost ~]# touch -mt 201011111111.11 /tmp/mylinux [root@localhost ~]# stat /tmp/mylinux File: `/tmp/mylinux' Size: 4096 Blocks: 16 IO Block: 4096 directory Device: 802h/2050d Inode: 784934 Links: 14 Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-09-25 08:12:44.000000000 -0700 Modify: 2010-11-11 11:11:11.000000000 -0800 Change: 2016-09-25 08:15:31.000000000 -0700 [root@localhost ~]#
注意:文件中任何信息改動了,change time肯定會變動,包括數據本身和元數據。
如何定義一個命令別名
通過alias命令可以定義和查看命令的別名,別名也可以與原名相同,也可以通過/COMMAND運行原名。
如果不想繼續用別名,可以通過unalias取消別名。
這里下面定義的別名只在本次bash進程中有效,如果想永久的定義別名,需要在配置文件/etc/bashrc或者用戶家目錄下的bashrc.d中設置。
[root@localhost ~]# clr -bash: clr: command not found [root@localhost ~]# [root@localhost ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@localhost ~]# alias clr='clear' [root@localhost ~]# alias alias clr='clear' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@localhost ~]# clr [root@localhost ~]#
如何在命令中引用一個命令的執行結果
可以通過$(COMMAND)或者$'COMMAND'方式引用命令的執行結果
[root@localhost ~]# echo $(date +%Y) 2016 [root@localhost ~]# mkdir $(date +%Y) [root@localhost ~]# ls ??。?????? anaconda-ks.cfg asasx.txt cpdoc.txt grep.txt install.log.syslog qq Sep Thu 06:13:04 a.out cpdoc1.txt Desktop hahaha like.txt qq.save test vimtext 2016 asas cpdoc2.txt grep install.log PDT qq.save.1 testdir [root@localhost ~]#
globbing文件通配
顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
[root@localhost ~]# ls /var/1*[[:digit:]]*[[:lower:]] /var/1text2x [root@localhost ~]# ls /var/1*[0-9]*[a-z] /var/1text2x [root@localhost ~]#
顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
[root@localhost ~]# ls /etc/[[:digit:]]*[^[:digit:]] /etc/2xaskm [root@localhost ~]#
顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其它任意長度任意字符的文件或目錄。
[root@localhost ~]# ls /etc/[^[:alpha:]]* /etc/2xaskm [root@localhost ~]#
在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@localhost ~]# touch /tmp/tfile-$(date "+%G-%m-%d-%k-%M-%S") [root@localhost ~]# ls /tmp a_c gconfd-root keyring-0QvdsM keyring-VIDgg7 test.1363 virtual-root.0ghOid a_d grub.conf keyring-LcHTXN mapping-chenjianhang test.1365 virtual-root.pLN0g0 b_c hahaha keyring-nhUcNx mapping-root test.1413 VMwareDnD b_d issue keyring-pDpnGb mylinux test.etc vmware-root functions issue.tee keyring-TNKNhD mysysroot tfile-2016-09-25-19-09-26 vmware-root-2084385593 [root@localhost ~]#
復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
[root@localhost ~]# cp -R /etc/p*[^[:digit:]] /tmp/mytest1
復制/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
[root@localhost ~]# cp -R /etc/*.d /tmp/mytest2
復制/etc/目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。
[root@localhost ~]# cp -R /etc/[1mn]*.conf /tmp/mytest3 [root@localhost ~]#
原創文章,作者:Theo,如若轉載,請注明出處:http://www.www58058.com/49109
總結的非常的詳細