无论你犯了多少错,或者进步得有多慢,你都走在了那些不曾尝试的人的前面。
关键字: ls 、cd、pwd ;文件增删改:cp、rm、mv
正则表达式字符是计算机图灵实现的根本;
文件类型:Linux一切皆对象;
数据类型:数据 与 元数据;
1. pwd
pwd 判定当前目录在文件系统内的确切位置;
pwd=echo $PWD #显示变量PWD的值
1. 目录连接链接时,pwd -P 显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径
[root@localhost soft]# cd /etc/init.d
[root@localhost init.d]# pwd
/etc/init.d
[root@localhost init.d]# pwd -P
/etc/rc.d/init.d
2.绝对路径与相对路径
绝对路径:以斜线开始的,从/开始的路径。
/etc/syscofnig/network-scrpits
绝对路径分为两段,dirname和basename:
相对路径:不以斜线开始的路径,以 . 开始的命令;
xxx/yyy :当前目录下的xxx子目录的yyy子目录
.:当前目录
..:上级目录
~:用户的家目录,
-:切换上次输入的目录,和命令配合使用
tips:-原理,系统记住上一个工作目录,存储在环境变量OLDPWD,可以用echo $OLDPWD查看到;
相对路径: ./bin #当前目录下的文件夹;
绝对路径: 完整路径;
3. cd:切换目录
change directory
cd:切换到家目录
cd ~:切换到家目录
cd ~USERNAME:切换到用户USERNAME的家目录
cd -:在上一次所在目录与当前目录来回切换(PWD to OLDPWD)
cd ..:切换到上级目录
cd /path/to/directory 切换到一个绝对目录
cd path/to/directory:切换到一个相对目录
/ #左撇 当前目录;
\ #右撇 转义
4. ls \ ll :列出内容
-
:常规文件类型(内部类型是什么,用file
命令)
d:directory,目录文件
b:blobk device,块设备文件,支持以“block”为单位进行随机访问
major number:主设备号,用来表示设备类型,进而确定要加载的驱动程序
minor number:次设备号,用于表示同一类型中的不同设备。
c:字符设备;
l:符号链接文件;
P:管道文件pipe,FIFO(First In,First Out)
S:套接字文件socket
list(用/var目录做例子)
-a:
--all
:列出所有文件包含隐藏文件
-A:--almost all
:列出除.
和..
之蛙所有的文件
-F:-F参数在目录名后加了正斜线(/),以方便用户在输出中分辨它们。类似地,它会在可执行 文件(比如上面的my_script文件)的后面加个星号,以便用户找出可在系统上运行的文件。
-l:--long
:长格式信息,列出文件的详细属性,命令可以简写为ll
,alias ll='ls -l --color=auto'
-h:--human-readable
:size用人类可读的格式表示
-d:--directory
:查看目录本身而非内部的文件详情
-r:--reverse
:反转排序(降序)
-R:--recursive
递归显示(基本不用这个,递归显示用tree
命令更直观)
-t:按修改时间排序
5. stat 查看文件状态
- 每一个文件都有三个时间戳;
- 元数据改变,内容不一定改变;内容改变,元数据一定改变;
- 可以看到atime(Access)、mtime(Modify)、Ctime(Change),还有文件的权限,文件拥有者和拥有组,还有文件大小相关的内容。
[root@centos7 ~]# stat /etc/issue
File: ‘/etc/issue’
Size: 23 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 134320235 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2017-05-22 09:07:34.832999490 +0800
Modify: 2016-11-30 02:12:59.000000000 +0800
Change: 2017-05-17 16:53:20.670996867 +0800
Birth: -
6. 文件通配符(globbing)
- :匹配零个或多个字符
- ? :匹配任何单个字符
- ~ :当前用户家目录
- ~longdream :用户longdream的家目录
- ~+ :当前工作目录
- ~-:前一个工作目录
- [0-9]:匹配数字范围,匹配一个
- [a-z]或[A-Z]:字母,不区分大小写
tips:因为不区分大小写,[a-d]代表的就是匹配AaBbCcDd
中的一个 - [a-z0-9]:字母或数字
- [wang]:匹配列表中的任何的一个字符,匹配
w
或a
或n
或g
- [^wang] 匹配列表中的所有字符以外的字符,除了
w
、a
、n
、g
预定义的字符类:man 7 glob
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]: 任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
练习
练习1:显示/var/log目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录。
练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录。
练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其他任意长度任意字符的文件或目录。
练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录到/tmp/test目录。
练习5:复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/test/man目录下。
练习6:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录到/tmp/conf.d/目录下。
答案:
ls -d /var/l?[[:lower:]]
ls -d /etc/[0-9]*[^0-9]
ls -d /etc/[^a-z][a-z]*
mkdir /tmp/test
cp -r /etc/m*[^0-9] /tmp/test/
mkdir /tmp/test/man
cp -r /usr/share/man/man[0-9] /tmp/test/man
mkdir /tmp/conf.d
cp -r /etc/[mnrp]*.conf /tmp/conf.d/
7. touch
touch [OPTION]... FILE...
-a :仅改变 atime和ctime
-m :仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]:指定atime和mtime的时间戳
-c :如果文件不存在,则不予创建
touch 命令可以修改文件的时间;
!touch #找最近的 touch命令;
!stat #找最近的 stat命令;
ctime指的是当前时间;可以改a\m time,一定会改ctime时间;
9.文件的增删改 cp、mv、rm
9.1 cp:copy
cp使用方法;
cp /etc/fstab /app :复制单个文件到目录下面。
cp /etc/{fstab,issue} /app/dir/,cp /etc/fstab /etc/bashrc /app/dir/:复制多个文件到某目录下。
cp /etc/fstab /app/1.txt:复制并覆盖目标文件(没有则创建)。
参数
-
-f
,--force
:强制覆盖目标文件。 -
-r
,-R
,--recursive:递归复制目录 (
-r==
-R)。
cp -r /var/log /app/log` -
-d
:复制符号链接本身,而不是他指向的文件。cp -d /etc/system-release /app
-
-a
,--archive
:归档,等同于-dr
-
-p
:复制文件的原来属性,等同于下面的--preserv=[mode,ownership,timestamp]
-
--preserv[=ATTR_LIST]
-
mode
:权限 -
ownership
:属主属组 -
timestamp
:时间戳 -
links
:复制链接的源文件 xattr
context
all
-
-
-v
,--verbose
:看到详细信息
练习:
- 定义别名命令baketc,每天将/etc/目录下所有
文件,备份到/testdir独立的子目录下,并要求子目 录格式为 backupYYYY-mm-dd,备份过程可见
- 创建/testdir/rootdir目录,并复制/root下所有 文件到该目录内,要求保留原有权限
解答:1) alias baketc=cp -av /etc/* /testdir/date -u
2)cp -ap /root/* /testdir/rootdir
tips: 小技巧 利用通配符来复制:
cp -a /etc/passwd{,.bak}
相当于 cp -a /etc/passwd /etc/passwd.bak
9.2 mv
mv:move
-f 强制移动或覆盖
移动文件(不在同一目录下),重命名文件(在同一目录下)
移动目录或重命名目录
9.3 rm (生产环境下,任何文件都不要删除)
rm :remove
删除文件
-i:interactive,交互式
-r 递归删除
-f 强制删除
rm -rf /(5是可以删除根的,6和7是不可以删除的)
我们可以留一个习惯:
不用的文件,不要直接删除,可以用mv move到某个专用目录(比如都移动到/tmp下)
10 基本命令tree 、mkdir 、rmdir
10.1 tree
参数:
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径
10.2 mkdir rmdir
mkdir:make directory
-p 递归创建
-v :verbose,创建目录的详情
-m mode,权限
rmdir:remove empty directory(只能删除空目录)
练习1:创建test1/x/y1, test1/x/y2, test1/x/y1/a, test1/x/y1/b
练习2: test2目录下面创建a_c, a_d,b_c, b_d
练习3:在test3目录下创建以下目录结构:
练习3:创建`/testdir/dir1/x`, `/testdir/dir1/y,` `/testdir/dir1/x/a`, `/testdir/dir1/x/b`, `/testdir/dir1/y/a`, `/testdir/dir1/y/b`
练习4:创建`/testdir/dir2/x`, `/testdir/dir2/y`, `/testdir/dir2/x/a`, `/testdir/dir2/x/b`
练习5:创建/`testdir/dir3`, `/testdir/dir4`, `/testdir/dir5`, `/testdir/dir5/dir6`, `/testdir/dir5/dir7`
答案:
mkdir -pv test1/x/{y1/{a,b},y2} #递归创建
mkdir -pv test2/{a,b}{c,d}
mkdir -pv test3/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}
mkdir -pv /testdir/dir1/{x,y}/{a,b}
mkdir -pv /testdir/dir2/{x/{a,b},y}
mkdir -pv /testdir/dir{3,4,5/dir{6,7}}