一、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 === 执行过程中出现异常或非正常退出,范围是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.178linux.com/48814