linux文件系统及bash基础特性
linux文件系统
一、根文件系统
linux被识别的第一个被称为根之间关联的文件系统叫做根文件系统(rootfs),其他分区要想被读到,需要挂载到根目录的某个挂载点(根的子目录)上。根文件系统至关重要,整个文件系统统一访问入口。
Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括这样一些子目录:
/boot 系统引导文件存放目录
/bin 供所有用户使用的命令(不能关联到独立分支)不能关联到独立分区,os启动即会用到的程序。
/sbin 管理员使用特权命令。root-only使用的命令。不能关联到独立分区,os启动即会用到的程序。
/lib 基本共享库文件(启动就需要的库文件),以及内核模块文件。
/lib64 专用于64位系统上的辅助库文件
/etc 配置文件目录(大多纯文本文件)
(1)/etc/opt 为opt启动文件存放配置目录
(2)/etc/sgml /etc/xml两种标记语言。
/home用户主目录约定俗成在/home/username(普通用户)管理员家目录就是/root
/media 挂载光盘u盘等设备
/mnt 挂载临时文件系统
/dev 设备文件目录(特殊文件)
b block device(可随机访问设备,三个电影,想看那个随机点那个都可以) c character device(县信访设备,按顺序访问)
/opt 附件,第三方应用程序安装目录系统安装完,额外安装的其他程序
/srv 当前系统某些服务程序运行时,使用的中间数据。
/tmp 临时文件存放位置
注:除了/boot和/home是不能关联到独立分区的,必须在根上
/usr 独立分区上的目录(全局共享只读数据)注:这可不是user的简写呦(拥有独立的文件系统结构)
(1)/usr/bin 所有程序可使用
(2)/usr/sbin 管理员使用
他的配置文件还是在/etc下
include,c语言头文件的标准库(头文件是描述库文件打开调用接口方式的)
(3)/usr/share只读的 ,结构化独立数据
(4)/usr/local第三方应用程序安装位置
/var 通常独立分区,可变数据文件
其中cache:应用程序缓存数据目录
常用管理命令
1.使用pwd和cd命令来确定和切换目录
[root@localhost ~]# pwd /root [root@localhost ~]# cd / [root@localhost /]# pwd /
[root@localhost /]# pwd / [root@localhost /]# cd [root@localhost ~]# cd
2.使用ls命令列出目录中的内容
-a 显示所有的文件,包括隐藏文件,.开头的为隐藏文件
-all 显示所有文件的详细信息,
-l 显示文件详细信息,不包括隐藏文件
[root@localhost ~]# ls -a . anaconda-ks.cfg .bash_logout .bashrc .lesshst Python-3.6.1 .tcshrc .. .bash_history .bash_profile .cshrc .pki Python-3.6.1.tgz .viminfo [root@localhost ~]# ls -all total 22084 dr-xr-x---. 4 root root 223 Aug 28 03:04 . dr-xr-xr-x. 22 root root 4096 Jul 23 06:59 .. -rw-------. 1 root root 1669 May 13 10:16 anaconda-ks.cfg -rw-------. 1 root root 19956 Jul 24 11:01 .bash_history -rw-r--r--. 1 root root 18 Dec 28 2013 .bash_logout -rw-r--r--. 1 root root 176 Dec 28 2013 .bash_profile -rw-r--r--. 1 root root 176 Dec 28 2013 .bashrc -rw-r--r--. 1 root root 100 Dec 28 2013 .cshrc -rw-------. 1 root root 35 May 15 10:53 .lesshst drwxr----- 3 root root 19 May 25 09:38 .pki drwxr-xr-x 18 501 501 4096 Jun 12 09:15 Python-3.6.1 -rw-r--r-- 1 root root 22540566 May 23 11:21 Python-3.6.1.tgz -rw-r--r--. 1 root root 129 Dec 28 2013 .tcshrc -rw------- 1 root root 9062 Aug 28 03:04 .viminfo [root@localhost ~]# ls -l total 22024 -rw-------. 1 root root 1669 May 13 10:16 anaconda-ks.cfg drwxr-xr-x 18 501 501 4096 Jun 12 09:15 Python-3.6.1 -rw-r--r-- 1 root root 22540566 May 23 11:21 Python-3.6.1.tgz
3.使用cp命令复制文件和目录
cp -r 递归复制
cp -p 保留原文件的用户权限
[root@localhost /]# cp a.txt /tmp/ [root@localhost /]# ls /tmp/ a.txt etc.conf etc.test maxusers.txt test.txt [root@localhost /]# cp -r /dj /tmp/ [root@localhost /]# ls /tmp/ a.txt dj etc.conf etc.test maxusers.txt test.txt [root@localhost /]# cp -rpf /dj /tmp/ [root@localhost /]# ls /tmp/ a.txt dj etc.conf etc.test maxusers.txt test.txt
4.使用mv命令移动及修改文件和目录名
[root@localhost /]# mv a.txt b.t [root@localhost /]# ls bin b.t dj home lib64 mnt oo Packages root sbin sys tt var boot dev etc lib media mylinux opt proc run srv tmp usr [root@localhost /]# mv b.t /tmp/ [root@localhost /]# ls /tmp/ a.txt b.t dj etc.conf etc.test maxusers.txt test.txt
5.使用mkdir命令创建目录
[root@localhost /]# mkdir -p /a/b/c/d [root@localhost /]# ls /a/b/c/ d
[root@localhost /]# mkdir -p /tmp/a/b/c/d
[root@localhost /]# ls /tmp/
a a.txt b.t dj etc.conf etc.test maxusers.txt test.txt
6.使用touch命令创建文件
[root@localhost /]# touch a.txt [root@localhost /]# ls a bin dev etc lib media mylinux opt proc run srv tmp usr a.txt boot dj home lib64 mnt oo Packages root sbin sys tt var
7.使用rm命令删除文件
[root@localhost /]# rm -rf a.txt
bash的基础特性:
一、命令历史
history;history的环境变量:
(1)HISTSIZE:命令历史的条数;
[root@localhost ~]# echo $HISTSIZE 1000
(2)HISTFILE:持久保存命令历史的文件,当退出登录的时候,此次的命令历史才会被写入到HISTFILE中
[root@localhost ~]# echo $HISTFILE /root/.bash_history
命令历史存在~/.bash_history里。
(3)HISTFILESIZE:命令历史文件记录的历史条数。
[root@localhost ~]# echo $HISTFILESIZE 1000
二、history常用命令用法
-c:清空命令历史
-d offset:删除指定命令历史,offset为指定的行数
-r:从文件读取命令历史至历史列表中
-w:把历史列表中的命令追加至历史文件中
history #:显示最近的#条命令
-a:手动追加当前会话缓冲区的命令历史至历史文件中
调用命令历史列表中的命令:
!#:再次执行历史列表中第#条命令
!!:再一次执行上一条命令
!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令
调用上一条最后一个参数方法:!$;ESC,.;ALT+.。
控制命令历史的记录方式:环境变量:HISTCONTROL;
ignoredups:忽略重复命令,连续且相同才算重复。
ignorespace:忽略以空白开头的命令。
ignoreboth:以上两者皆忽略。
修改环境变量值得方式为export 变量名=‘值’;变量赋值就是把赋值符号后面的数据存储于变量名指向内存空间。
[root@localhost ~]# echo $HISTCONTROL ignoredups [root@localhost ~]# export HISTCONTROL=ignoreboth [root@localhost ~]# echo $HISTCONTROL ignoreboth
三、命令、路径补全
命令补全:
shell程序在接受到用户执行命令的请求时,最左侧的字符串会被当做命令
命令查找机制:根据PATH环境变量中设定的目录($PATH),自左而右逐个搜索目录下的文件名
按Tab可直接补全命令,若给定字符开头的命令不唯一,再次Tab给出以给定字符作为开头的文件列表
路径补全: 在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下每个文件
四、命令行展开
~:展开为用户家目录;
~username:展开为指定用户的家目录
{}:展开为多个路径。例:/tmp/{a,b} = /tmp/a,/tmp/b;/tmp/{a,b}/{c,d} =/tmp/a/c,/tmp/a/d,/tmp/b/c,/tmp/b/d。
五、命令的执行结果
命令执行的状态结果有两种:成功(0),失败(1-255),可用$?查看最近一条命令的执行状态结果。
程序执行有两类结果:程序返回值和程序执行状态结果。
六、命令别名(alias)
alias:显示当前shell进程所有可用别名。
[root@localhost tmp]# 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=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'
alias name=‘value’:定义别名,使用alias相当于执行value。
注:在命令行定义别名,仅对当前shell有效,永久有效需要定义在配置文件中。
对当前用户:~/.bashrc
对所有用户:/etc/bashrc
并且编辑配置不会立即生效。
撤销别名(unalias)
七、glob(bash中用于实现文件通配)
通配符:*,?,[]
*任意长度的任意字符
?任意单个字符
[]匹配指定范围的单个字符[0-9],[a-z]:所有字母,不区分大小写[A-Z]:大写字母
[^]取反
专用字符集:
[[:upper:]]:所有大写字母
[[:lower:]]:所有小写字母
[[:alpha:]]:所有字母
[[:digit:]]:所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有空白字符
[[:punct:]]:所有标点符号
八、bash的I/O重定向及管道
打开文件都有一个fd:file descriptor(文件描述)
标准输入:0
标准输出:1
错误输出:2
I/O重定向就是改变标准位置。
输出重定向:
> 覆盖输出
>> 追加输出
set -C:禁止覆盖输出重定向至已存在的文件
set +C:开启覆盖输出重定向至已存在的文件(默认)
错误输出重定向:
2> 覆盖输出
2>> 追加输出
合并正常输出流和错误输出流
&> 覆盖输出
&>> 追加输出
COMMADN > /PATH/TO/somefile 2>&1 :如果命令执行成功则覆盖输出至somefile,执行不成功也覆盖输出至somefile
COMMAND >> /PATH/TO/somefile 2>&1:如果命令执行成功则追加覆盖至somefile,执行不成功也追加输出至somefile
注:特殊设备:当不需要命令的执行结果,只需要知道命令的执行状态,则可以重定向至/dev/null,/dev/null相当于一个垃圾桶。
输入重定向:<
Here Document:<<,可以作为指定文件的结束符,常用于shell编程
[root@localhost tmp]# cat <<EOF > how are you > EOF how are you
tr [OPTION]... SET1 [SET2]
把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,不修改原文件
tr -d SET1 < /PATH/FROM/SOMEFILE 删除SET1中的字符,区分大小写
管道
连接程序,最后一个命令会在当前shell进程的子进程中执行。
COMMAND1 | COMMAND2 | COMMAND3 ...
[root@localhost tmp]# echo 'abcdefg' | tr 'a-z' 'A-Z' | tr -d 'AD' BCEFG
tee
显示程序的输出并将其复制到一个或多个文件中。
目录管理类命令
一、mkdir
make directories 创建目录
mkdir [OPTION]... DIRECTORY...
常用选项:
-p:存在不报错,逐级生成目录;
-v:显示详细信息;
-m:mode,创建目录时直接指定权限。
mkdir一次可创建多个目录:
[root@localhost tmp]# mkdir -v {a,b}/{c,d} mkdir: cannot create directory ‘a/c’: No such file or directory mkdir: cannot create directory ‘a/d’: No such file or directory mkdir: cannot create directory ‘b/c’: No such file or directory mkdir: cannot create directory ‘b/d’: No such file or directory
[root@localhost ~]# mkdir -p /mylinux/{bin,boot/grub,dev,etc/{rd.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}} [root@localhost ~]# tree /mylinux /mylinux ├── bin ├── boot │ └── grub ├── dev ├── etc │ ├── rd.d │ │ └── init.d │ └── sysconfig │ └── network-scripts ├── lib │ └── modules ├── lib64 ├── proc ├── sbin ├── sys ├── tmp ├── usr │ └── local │ ├── bin │ └── sbin └── var ├── lock ├── log └── run
二、rmdir
remove empty direcories
移除空目录
常用选项:
-p:删除某目录后,如果其父目录为空,则一并删除之
-v:显示过程
[root@localhost b]# rmdir -pv /tmp/a/b/c/ rmdir: removing directory, ‘/tmp/a/b/c/’ rmdir: removing directory, ‘/tmp/a/b’ rmdir: removing directory, ‘/tmp/a’ rmdir: removing directory, ‘/tmp’ rmdir: failed to remove directory ‘/tmp’: Device or resource busy
三、tree:
-d:只显示目录
-L:level:指定显示的层级数目
-P:pattern只显示由指定pattern匹配到的路径。
快捷操作
ctrl+a:跳转至命令行行首
ctrl+e:跳转至命令行行尾
ctrl+u:删除行首至光标所在处之间的所有字符
ctrl+k:删除光标所在处至行尾的所有字符
ctrl+l:清屏,相当于clear
文本文件查看类命令
cat
cat [OPTION]... [FILE]...
查看文件内容,直接显示到文件底部
常用选项:
-n:可以显示行数;
tac与cat类似,可反向查看文件内容
head
与cat类似,常用选项:
-c #:指定获取前#字节;
-n # / -#:指定获取前#行。
tail
与head相似,除了-c与-n以外,-f可跟踪显示文件新追加的内容。
文件的时间戳管理工具:
一、stat
display file or file system status
文件:两类数据
元数据:metadata,文件的状态,创建时间,修改时间,大小,权限等
数据:文件里面的内容
stat显示的就是文件的元数据,包含文件路径,大小,blocks数目,IO block,文件类型,inode号,权限,uid,gid和三个时间戳等
三个时间戳:
access:最近一次访问的时间,即atime
modify:最近一次修改文件的时间,即mtime
change:文件最近一次改变的时间,即改变元数据的时间即ctime
二、touch
change file timestamps 修改时间戳
touch [OPTION]... FILE...
文件不存在则创建文件,当直接使用命令去touch一个文件的时候,修改的是所有的时间戳
常用选项:
-c:指定的文件路径不存在时不予以创建
-a:仅修改access time
-m:仅修改modify time
-t STAMP
[[CC]YY]MMDDhhmm[.ss]
文件管理工具
一、cp
复制文件或者目录
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
SRC是文件
如果DEST不存在,则先创建DEST,并复制源文件的数据流至DEST文件中
如果DEST存在:DEST是非目录文件,则覆盖DEST文件
DEST是目录文件,则在DEST目录下创建一个与源文件同名的文件,并复制其数据
常用选项:
-i:交互式复制
-f:强制覆盖目标文件
-r,-R:递归复制目录
-d:复制符号链接文件本身,而非指向的源文件
-a:-dR --preserve=all, archive,用于实现归档;
--preserv[=ATTR_LIST]
mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
二、mv
移动文件,可用来重命名文件
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i:交互式
-f:强制覆盖文件
三、rm
移除文件
rm [OPTION]... FILE...
常用选项:
-i:交互式移除文件
-f:强制删除文件
-r:递归删除
注:所有不用的文件建议不要直接删除,可以移动至某个专用的目录(用来做回收站的目录)
注:还有个无敌bug,rm-rf /*。