首页 > 代码库 > 5.Linux文件和目录相关操作
5.Linux文件和目录相关操作
一、目录管理:
cd, pwd, ls 都是来查看目录的
mkdir: make directory 创建目录
-p: 当指定的目标目录的父目录不存在时,则先创建之
-p, --parents
no error if existing, make parent directories as needed
-v, --verbose
print a message for each created directory 打印创建每个目录的信息
[root@linux_basic tmp]# mkdir hello
[root@linux_basic tmp]# ls
hello
[root@linux_basic tmp]# ls hello/
[root@linux_basic tmp]# mkdir how are
[root@linux_basic tmp]# ls
are hello how
rmdir: remove directory
rmdir - remove empty directories 删除空目录
-p: 删除单传目录路径中各空目录
-p, --parents
remove DIRECTORY and its ancestors; e.g., ‘rmdir -p a/b/c’ is similar to ‘rmdir a/b/c a/b a’
[root@linux_basic tmp]# ls
are hello how
[root@linux_basic tmp]# rmdir are
[root@linux_basic tmp]# ls
hello how
[root@linux_basic tmp]# rmdir how
[root@linux_basic tmp]# ls
hello
[root@linux_basic tmp]# mkdir -pv test/apache/you
mkdir: created directory `test‘
mkdir: created directory `test/apache‘
mkdir: created directory `test/apache/you‘
[root@linux_basic tmp]# ls
hello test you
[root@linux_basic tmp]# ls test/
apache
[root@linux_basic tmp]# rmdir test/apache -p
[root@linux_basic tmp]# ls
hello you
bash的工作特点:没有返回信息通常最好的信息
每个命令执行结束后,会有一个“执行状态返回值”,有效范围0-255
0: 表示执行成功
1-255: 表示执行失败
使用特殊变量$?可以获取最近一条命令的状态返回值
# echo $?
[root@linux_basic tmp]# ls
hello
[root@linux_basic tmp]# echo $? 查看上一条命令的状态返回值
0
[root@linux_basic tmp]# ls
hello
[root@linux_basic tmp]# rmdir are 目录不存在,删除报错
rmdir: failed to remove `are‘: No such file or directory
[root@linux_basic tmp]# echo $?
1 转态返回值不为0
[root@linux_basic tmp]# ls
hello
[root@linux_basic tmp]# mkdir you/are
mkdir: cannot create directory `you/are‘: No such file or directory
[root@linux_basic tmp]# mkdir -p you/are 创建两层的目录
[root@linux_basic tmp]# ls
hello you
[root@linux_basic tmp]# ls you/
are
bash特性之一:命令行展开
~: 用户家目录
~USERNAME: 指定用户的家目录
[root@linux_basic tmp]# echo ~
/root
[root@linux_basic tmp]# ls /home/
cactiuser
[root@linux_basic tmp]# echo ~cactiuser
/home/cactiuser
{}: 有多个的话,每个都会展开到对应项
/tmp/{x,y}
/tmp/x, /tmp/y
/tmp/{x,y}/z
/tmp/x/z, /tmp/y/z
创建/tmp/x/z, /tmp/y/z, /tmp/x/m, /tmp/y/m
mkdir /tmp/{x,y}/{z,m}
练习1:创建/tmp/
a_b, c_b, a_d, c_d
[root@linux_basic tmp]# mkdir -pv {a,c}_{b,d}
mkdir: created directory `a_b‘
mkdir: created directory `a_d‘
mkdir: created directory `c_b‘
mkdir: created directory `c_d‘
练习2:创建/tmp/mylinux/
boot
grub
bin
sbin
etc
rc.d
init.d
sysconfig
network-scripts
lib
modules
lib64
usr
local
bin
sbin
lib
lib64
bin
sbin
lib
lib64
proc
sys
dev
var
log
run
lock
tmp
# mkdir -pv /tmp/mylinux/{boot/grub,bin,sbin,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,usr/{bin,sbin,lib,lib64,local/{bin,sbin,lib,lib64}},proc,sys,dev,var/{log,run,lock},tmp}
用tree可以查看目录的结构,安装tree,yum install tree -y ;此时是需要有网络的
二、文件查看和文件属性信息
ls命令:
list简写
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
ls [option] [file]
常用选项:
-l: long,长格式显示文件的详细属性信息
drwxr-xr-x. 2 root root 4096 Feb 12 09:55 account
左起第一位:文件类型
后面的9位:权限,常称为mode
r: 可读,Read
w: 可写, Write
x:可执行, eXcute
.: 表示文件有隐藏属性
lsattr命令可以查看隐藏属性
数字:此文件被硬链接的次数,目录一般都是2
属主:owner, 文件的拥有者
属组:group, 文件所属的组
4096: 文件大小,单位是字节
-h: human-readable,自动做单位换算,打印大小
-h, --human-readable
with -l, print sizes in human readable format (e.g., 1K 234M 2G)
[root@linux_basic tmp]# ls -lh /tmp/
total 8.0K
drwxr-xr-x. 2 root root 4.0K Dec 20 14:01 hello
drwxr-xr-x. 3 root root 4.0K Dec 20 14:08 you
文件最近一次被修改的时间
文件名
-a: 显示所有文件
-a, --all
do not ignore entries starting with .
[root@linux_basic tmp]# ls -a
. .. hello .ICE-unix you
-d: 通常和-l一起使用,用于仅显示目录自身属性
-d, --directory
list directory entries instead of contents, and do not dereference symbolic links
[root@linux_basic tmp]# ls -ld /tmp
drwxrwxrwt. 5 root root 4096 Dec 20 14:40 /tmp
-r: reverse, 逆序显示 默认是升序显示的
[root@linux_basic tmp]# ls
hello you
[root@linux_basic tmp]# ls -r
you hello
-R: recursive, 递归显示,显示子目录中的内容
[root@linux_basic tmp]# ls -R
.:
hello you
./hello:
./you:
are
./you/are:
文件管理类的命令:
查看:cat, tac, head, tail, less, more
时间戳管理:touch
复制:cp
移动:mv
查看元数据属性:stat
文本编辑器:nano, vi
stat: 显示文件的元数据
时间戳:每个文件都有三个时间戳
atime 访问时间 最近一次被访问的时间
mtime 修改时间 最近一次被修改的时间 文件内容的改变
ctime 改变时间 最近一次改变的时间 文件元数据的改变
[root@linux_basic tmp]# stat hello/
File: `hello/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 524365 Links: 2 被硬连接的次数
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-20 14:01:23.980000639 +0800 最近一次被访问的时间
Modify: 2014-12-20 14:01:19.755999191 +0800 最近一次被修改的时间 文件内容的改变
Change: 2014-12-20 14:01:19.755999191 +0800 最近一次改变的时间 文件元数据的改变
inode(索引节点号,每个文件都有索引节点,也叫元数据元数据条目的编号)
[root@linux_basic tmp]# stat you/ 注意时间戳的改变
File: `you/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 524384 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-20 14:08:57.103000297 +0800
Modify: 2014-12-20 14:08:52.309009173 +0800
Change: 2014-12-20 14:08:52.309009173 +0800
[root@linux_basic tmp]# touch you/
[root@linux_basic tmp]# stat you/
File: `you/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 524384 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-20 14:55:18.363998749 +0800
Modify: 2014-12-20 14:55:18.363998749 +0800
Change: 2014-12-20 14:55:18.363998749 +0800
touch:改变文件的atime和mtime
NAME
touch - change file timestamps
SYNOPSIS
touch [OPTION]... FILE...
DESCRIPTION
Update the access and modification times of each FILE to the current time.
如果FILE不存在,默认会创建一个空文件
-a: 仅改变atime
-a change only the access time
-m: 仅改变mtime
-m change only the modification time
-c: 不创建空文件
-c, --no-create
do not create any files
-t [[CC]YY]MMDDhhmm[.ss] 指定那个时间修改和改变的
-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time
[root@linux_basic tmp]# stat test.txt
File: `test.txt‘
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 524405 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-20 14:57:35.737999993 +0800
Modify: 2014-12-20 14:57:35.737999993 +0800
Change: 2014-12-20 14:57:35.737999993 +0800
[root@linux_basic tmp]# date
Sat Dec 20 15:15:42 CST 2014
[root@linux_basic tmp]# touch -a test.txt
[root@linux_basic tmp]# stat test.txt
File: `test.txt‘
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 524405 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-20 15:15:56.177992895 +0800
Modify: 2014-12-20 14:57:35.737999993 +0800
Change: 2014-12-20 15:15:56.177992895 +0800
[root@linux_basic tmp]# touch -m test.txt
[root@linux_basic tmp]# stat test.txt
File: `test.txt‘
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 524405 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-12-20 15:15:56.177992895 +0800
Modify: 2014-12-20 15:16:53.171995492 +0800
Change: 2014-12-20 15:16:53.171995492 +0800
[root@linux_basic tmp]# touch -a -t 201211091251.36 test.txt
[root@linux_basic tmp]# stat test.txt
File: `test.txt‘
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 524405 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-11-09 12:51:36.000000000 +0800
Modify: 2014-12-20 15:20:31.025993115 +0800
Change: 2014-12-20 15:22:44.780992659 +0800
文件查看类命令:
cat: 连接并显示文本文件内容
NAME
cat - concatenate files and print on the standard output 连接文件和打印到标准输出
SYNOPSIS
cat [OPTION]... [FILE]...
DESCRIPTION
Concatenate FILE(s), or standard input, to standard output.
数据流:stream
-E:显示行结束符
-E, --show-ends
display $ at end of each line
-n: 显示行号
-n, --number
number all output lines
[root@linux_basic tmp]# cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m
[root@linux_basic tmp]# cat /etc/issue -n
1 CentOS release 6.6 (Final)
2 Kernel \r on an \m
3
[root@linux_basic tmp]# cat /etc/issue -E
CentOS release 6.6 (Final)$
Kernel \r on an \m$
$
Linux的换行符是$,windows下的换行符是$和回车符
tac: 逆序显示文件内容
Shift+PageUp/PageDown: 翻屏,在虚拟终端上翻屏
分屏显示:
more 和 less
more到文件尾部时,会自动退出
less到文件尾部时,不会自动退出,用q退出,和man的选项相似
查看首部或尾部的部分内容:
head 默认显示头10行
NAME
head - output the first part of files
SYNOPSIS
head [OPTION]... [FILE]...
tail 默认显示尾部10行
-n #: 指定的行数,head和tail都支持此选项
[root@linux_basic tmp]# tail -5 /etc/inittab
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
S0:12345:respawn:/sbin/agetty ttyS0 115200
tail -f
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent
监控一个尾部不断变化的文件,对于日志文件的查看很方便,可以实时查看新增的信息
本文出自 “快乐就好” 博客,请务必保留此出处http://wdllife.blog.51cto.com/6615958/1591982
5.Linux文件和目录相关操作