Linux基础知识--3.Linux目录和文件相关命令和Linux基础特性(2)
Linux中有许多基本操作命令,一些基本的操作命令在Linux后期学习中发挥很大的作用,因此能熟练的理解,掌握和应用这些基本的命令是后期学习的关键。在这根据命令的使用情况进行以下分类:
1.目录管理命令;
2.文本文件查看命令;
3.文件的时间戳管理工具;
4.文件管理命令;
5.文本处理工具;
6.系统管理命令;
在将上述基本命令讲述完之后,再来看看Linux基础特性(2)。Linux基础特性将涉及到命令别名的设置、字符通配、快捷键等。接下来详细的介绍这些内容;(自己理解,大神勿喷)
一.基本命令:
1.目录管理命令:
Linux的目录结构是树状目录,目录有相对目录和绝对目录。
linux的绝对目录是从/目录开始写起,到当前目录的全称,利用pwd命令就可以查看当前目录的绝对目录
linux的相对目录是相对于目前工作目录的路径。
其中有一些特殊目录如下:
.表示当前目录
..表示上一级目录
~表示当前登录用户的家目录
cd命令:切换目录命令
pwd命令:显示当前目录
tree命令:列出目录的垂直结构:
常用选项:
-d:只显示出目录,不显示目录下的文件
-L #:指定显示出的层级数
-P pattern:显示出pattern匹配到的内容
目录的创建命令:mkdir
命令格式:
mkdir [OPTION]... DIRECTORY...
常用选项:
-p:创建目录时如果父目录不存在,则连父目录一起创建
-v:详细显示创建目录的过程
eg:
# mkdir -pv /tmp/{kk,zz}/{a,c} mkdir: created directory `/tmp/kk' mkdir: created directory `/tmp/kk/a' mkdir: created directory `/tmp/kk/c' mkdir: created directory `/tmp/zz' mkdir: created directory `/tmp/zz/a' mkdir: created directory `/tmp/zz/c'
-m MODE:创建目录时,指定所创建目录的权限
删除空目录:rmdir(注意:删除空目录)
命令格式:
rmdir [OPTION]... DIRECTORY...
常用选项:
-p:连同上一级的空目录一起删除:
-v:显示删除过程;
rmdir -pv /etc/kk/{a,c} rmdir: removing directory, `/tmp/kk/a' rmdir: removing directory, `/tmp/kk' rmdir: failed to remove directory `/tmp/kk': Directory not empty rmdir: removing directory, `/tmp/kk/c' rmdir: removing directory, `/tmp/kk' rmdir: removing directory, `/tmp' rmdir: failed to remove directory `/tmp': Directory not empty
也可以用命令rm -rf DIRECTORY 删除目录,即使不是目录不是空目录也会删除。但千万不要执行
rm -rf /* 这个命令,我想学习Linux的同学都知道这是什么意思!!
关于执行文件路径的变量:$PATH
用root用户的身份查询$PATH 路径结果:
# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bi n:/root/bin
PATH变量的内容是由一堆目录所组成的,每个目录中间用冒号来隔开,每个目录是由顺序之分的
2.文本文件查看类命令:
文本文件查看类涉及的命令有:cat,tac,more,less,tail,head
cat:从第一行显示文件内容
常用选项:
-n:打印出行号
tac:从最后一行开始显示文件内容
more:成页显示文件内容
在more打开一个文件后,会有一些快捷翻页按键:
1.空格键:向下翻一页
2.Enter键:向下滚动一行
3.b:向前翻一页
4./string:代表在more显示的内容中,向下显示string这个关键字
5.q:退出more
less:与more类似
less的用法比more更有弹性,其中man手册中的操作方法就是利用less命令,也有一些快捷键:
1.空格,Ctrl+V,Ctrl+f,Ctrl+F:向文件尾部翻屏
2.b Ctrl+B:向文件首部翻屏
3.d Ctrl+D:向文件尾部翻半屏
4.u Ctrl+U:向文件首部翻半屏
5.Enter Ctrl+N e j Ctrl+E Ctrl+J:向文件尾部翻一行
6.y k Ctrl+y Ctrl+P:向文件首部翻一行
7.q:退出
8.#:跳转至#行
9.G到行尾,1G到行首
等。详细的选项查看man手册使用方法。
head:默认查看文件的前10行:
命令格式:
head [OPTION]... FILE...
常用选项:
-c #:查看文件的前#个字节
-n #:查看文件的前#行
实例:
#head -n 5 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
tail:默认查看文件的后10行:
命令格式:
tail [OPTION]... FILE...
常用选项:
-c #:查看文件的后#个字节
-n #:查看文件的后#行
-f:一直查看文件新追加的内容:例如查看日志文件。按Ctrl+c退出
实例:
# tail -n 5 /var/log/messages Aug 21 23:27:24 localhost bluetoothd[1542]: HCI dev 0 up Aug 21 23:27:24 localhost bluetoothd[1542]: Starting security manager 0 Aug 21 23:27:24 localhost bluetoothd[1542]: Parsing /etc/bluetooth/serial .conf failed: No such file or directory Aug 21 23:27:24 localhost bluetoothd[1542]: ioctl(HCIUNBLOCKADDR): Invali d argument (22) Aug 21 23:27:24 localhost bluetoothd[1542]: Adapter /org/bluez/1528/hci0 has been enabled
3.文件的时间戳管理工具:
每个文件在linux下面都会记录三个主要修改时间:
access time(atime):最近文件访问时间,读取文件的内容时,此时间就会发生修改,比如使用cat查看文件内容时。
modification time(mtime):当文的内容更改时,就会更新这个时间,而不是文件的属性或权限。
change time(ctime):最近文件改变时间,改变文件元数据,像文件的权限与属性被更改了,这个时间见就会发生变化。
使用touch命令来修改时间戳或者创建一个不存在的文件:
命令格式:
touch [OPTION]... FILE...
常用选项:
-a:仅修改访问时间(atime)
-c:修改文件的时间,假如文件不存在则不创建文件。
-m:修改mtime
-d:使用指定的日期时间,而非现在的时间
当我们去用命令cat 查看一个文件内容时,可用命令stat + filename 查看文件的access time 发生了变化同理,当我们用vim打开一文件内容并做相应的修改,则mtime也会发生改变,ctime和access也会随之变化,当对一个文件进行修改权限和属性时,文件的ctime会发生变化。如以下实例:
有一个文件a.txt 三种初始时间戳为:
# stat a.txt File: `a.txt' Size: 49 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768dInode: 262164 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-18 23:28:19.598932488 +0800 Modify: 2015-08-18 23:28:04.483931823 +0800 Change: 2015-08-18 23:28:04.486931725 +0800
我们使用命令cat来查看文件内容如:cat a.txt。然后使用命令stat来查看a.txt的时间戳
# stat a.txt (在这只给出了时间戳信息) Access: 2015-08-22 08:53:49.724189593 +0800 Modify: 2015-08-18 23:28:04.483931823 +0800 Change: 2015-08-18 23:28:04.486931725 +0800
会发现只有Access的时间发生了改变,其他没有发生变化。我们在修改文件的内容,来查看修改之后时间戳的变化:
# echo hello" > a.txt # stat a.txt Access: 2015-08-22 08:53:49.724189593 +0800 Modify: 2015-08-22 08:59:44.778186361 +0800 Change: 2015-08-22 08:59:44.778186361 +0800
会发现Modify时间发生改变,Change也发生改变。而atime没有发生改变,是因为我们没有打开查看文件,只是通过命令echo向文件追加内容。假如我们使用vim打开文件并做相应的修改,则三种时间都会发生改变我们再用命令chmod修改文件的权限,查看文件a.txt的ctime是否改变:
# chmod +x a.txt # stat a.txt Access: 2015-08-22 09:00:25.013189719 +0800 Modify: 2015-08-22 09:00:25.013189719 +0800 Change: 2015-08-22 09:09:33.291184015 +0800
命令执行后会发现文件a.txt的ctime发生了改变。
4.文件管理命令:
文件管理命令涉及到文件的复制、粘贴和删除,分别是cp、mv、rm命令
1.cp命令:
命令使用格式:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
(1)cp SOURCE DESR
如果目标文件不存在,将会新建DEST,并将SRC中的内容填充至DEST中
如果目标文件存在:
如果DEST是文件:将SOURCE中的内容覆盖至DEST中,为了数据的安全此时
建议使用-i选项
如果DEST是目录:在DEST下新建与源文件同名的文件,并将SOURCE中的内容
填充新的文件中
(2)cp SOURCE... DEST
如果SOURCE为多个文件:则DEST必须存在且为目录。其他情形均会出错。
(3)cp SOURCE DEST
SOURCE 是目录:此时要用-r选项:
如果DEST不存在:则创建指定目录,复制SRC目录中的所有文件至DEST中;
如果DEST不存在;
如果是DEST是文件,报错
如果DEST是目录:直接把SOURCE复制到DEST中.
常用选项:
-i:交互模式,提示覆盖时会有所提示。
-f:强制复制
-r/-R:递归复制目录及文件
-d: --no-dereference --preserve=links复制符号连接
-a/-dr|R:--preserve=all 递归复制并保存源文键的相关属性
-l:对源文件建立硬链接,而非复制源文件
-s:对源文键建立软连接,而非复制源文件
实例:
# cp -r /etc/sysconfig/network-scripts/ /tmp/network/ [root@localhost etc]# ls -l /tmp/network/ total 204 -rw-r--r-- 1 root root 158 Aug 22 10:12 ifcfg-eth1 -rw-r--r-- 1 root root 254 Aug 22 10:12 ifcfg-lo lrwxrwxrwx 1 root root 20 Aug 22 10:12 ifdown -> ../../../sbin/ifdown -rwxr-xr-x 1 root root 627 Aug 22 10:12 ifdown-bnep -rwxr-xr-x 1 root root 5511 Aug 22 10:12 ifdown-eth -rwxr-xr-x 1 root root 781 Aug 22 10:12 ifdown-ippp -rwxr-xr-x 1 root root 4168 Aug 22 10:12 ifdown-ipv6 [root@localhost ~]# cp -s a.txt c.rlink lrwxrwxrwx 1 root root 5 Aug 22 10:08 c.rlink -> a.txt [root@localhost ~]# cp -l a.txt c.link [root@localhost ~]# ll -rw-r--r-- 1 root root 12 Aug 22 10:05 c.link
5.文本处理命令:
文本处理命令有wc、cut、sort、uniq
wc命令:wc - print newline, word, and byte counts for each file
命令格式:
wc [OPTION]... [FILE]...
常用选项:
-l:显示行数
-w:显示单词数
-c:显示字符数
sort命令:对文件内容进行排序
命令格式:
sort [OPTION]... [FILE]...
常用选项:
-r:逆序排列
-n:按数值大小排序
-f:忽略字符大小写
-k#:以指定字段为标准进行排序
-t#:指定分隔符
-u:uniq:排序后去重。相同的只显示一次
cut命令:文本切割命令
命令格式:
cut OPTION... [FILE]...
常用选项:
-d:指定分隔符。默认为空格
-f#:选定定第#字段
使用格式为:
-f#:
-f#,#,..:离线的多个字段
-f#-#:连续多个字段
--output-delimiter=STRING:选定自己指定的分隔符
eg:
cut -d: -f1,7 /etc/passwd --output-delimiter="@" root@/bin/bash bin@/sbin/nologin daemon@/sbin/nologin
uniq命令
注意:连续且完全相同方为重复:
常用选项:
-c:显示每行重复的次数
-d:只显示重复的行
-u:只显示不曾重复的行
二.Linux基础特性二:
1.命令别名(alias)
alias:显示当前shell进程所有可用的命令别名
定义别名:
alias NAME='VALUE'
在命令模式下定义的别名,仅对当前shell进程有效, 要想永远有效需要修改配置文件
对当前用户有效:~/.bashrc
对多有用户有效:/etc/bashrc
然后重新读取配置文件,就会立即生效:source ~/.bashrc
撤销别名:
unalias name
如果在没有撤销别名时,要执行原命令用:/COMMAND
2.glob:字符通配:
man 7 glob
bash 中用于实现文件名通配的通配符有:
*、?、[]
*:任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围之外的字符
专用字符集合:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格字符
[:punct:]:标点符号
练习:
1.显示/var目录下多有l开头,以一个小写字母结尾,中间出现至少一位数字的文件或目录
ls -d /var/l*[0-9]*[[:lower:]]
2.显示/etc/目录下,以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9]*[^[:digit:]]
3.显示/etc/目录下,以非字母开头,后面跟了一个字母及其其他任意长度任意字符的文件或目录
ls -d /etc/[^[:alpha:]][[:alpha:]]*
4.复制/etc/目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中
cp -a /etc/m*[^[:digit:]] /etc/mageedu
5.复制/etc/目录下,所有以.d结尾的文件或目录至/tmp/mageedu目录中;
cp -a /etc/*.d /tmp/magedu.com
6.复制/etc/目录下,所有以.conf结尾的文件,且m,n,r,p开头的文件或目录复制到/tmp/mageedu
cp -a /etc/[mnrp]*.conf /tmp/mageedu.com
3.bash的快捷键:
Ctrl+l:清屏:相当于命令clear
Ctrl+a:跳转到命令行的开始处
Ctrl+e:跳转到命令行的结尾处
Ctrl+u:删除命令行首至光标所在处的所有内容
Ctrl+k:删除光标所在处至命令行尾的所有内容
4.bash的I/O重定向和管道
程序是由指令和数据组成:程序执行时需要读入数据和程序执行后把数据输出
数据的输入和输出一般是从键盘输入数据,在屏幕上输出数据
读入数据:Input,输出数据:Output
打开一个文件都有一个fd:file descriptor:内核来访文件。文件描述符是非负数。打开现存文件或新文件时,内核会返回一个文件描述符。读取文件也需要使用文件描述符来指定待读写的文件。
标准输入:0
标准输出:1
标准错误输出:2
I/O重定向:就是改变标注输入和输出的位置。
1.输出重定向:COMMAND > NEW_POSITON COMMAND >> NEW_POS
>:覆盖重定向,目标文件中的原有内容会被清楚
>>:追加重定向,新内容将会追加至目标文件尾部
set -C:禁止将内容覆盖输出至已有文件中。
强制覆盖:>|
set +C:取消上述操作
2>:覆盖重定向错误输出数据流:
2>>:追加重定向错误输出数据流
标准输出和错误输出各自定向至不同的位置:
COMMAD > /path/to/file.out 2> /path/to/error.out
将标注输出和错误输出至同一个文件中:(有两种方法:)
&>:覆盖重定向
&>>:追加重定向
1.COMMAND &> /path/to/file.out
2.COMMAND > /path/to/file.out 2>&1
2.输入重定向:<
实例:
cat << EOF
cat > /tmp/shell << EOF
3.管道|:把上一个命令的执行结果当做下一个命令的执行参数
tr命令:转换或删除字符:
cat a.txt | tr 'a-z' 'A-Z'
tee命令:
tee [option].. [file]..
把要内容显示在屏幕上又保存到文件中
# echo $PATH | tr 'a-z' 'A-Z' | tee /tmp/path
实例:
1.# head -n 5 /etc/passwd | tr 'a-z' 'A-Z' > /tmp/passed.out
2.# who | tail -n 2 | tr 'a-z' 'A-Z' > /tmp/who.out