首页 > 代码库 > linux从初识到入门_文件系统

linux从初识到入门_文件系统

基础目录名称及作用规定

Filesystem Hierarchy Standard   #标准文件系统目录  即FHS 

/bin:所有用户可用的基本命令程序文件;   

/sbin:供系统管理使用的工具程序;

/boot:引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等;

/dev:存储特殊文件或设备文件;

设备有两种类型:字符设备(线性设备)、块设备(随机设备);

/etc:系统程序的配置文件,只能为静态;

/home:普通的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/USERNAME;

/root:管理员的家目录;可选;

/lib:为系统启动或根文件系统上的应用程序(/bin, /sbin等)提供共享库,以及为内核提供内核模块

libc.so.*:动态链接的C库;

ld*:运行时链接器/加载器;

modules:用于存储内核模块的目录;

/lib64:64位系统特有的存放64位共享库的路径;

/media:便携式设备挂载点,cdrom, floppy等;

/mnt:其它文件系统的临时挂载点;

/opt:附加应用程序的安装位置;可选路径;

/srv:当前主机为服务提供的数据;

/tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限;

/usr:usr Hierarchy,全局共享的只读数据路径;

bin, sbin

lib, lib64

include:C程序头文件;

share:命令手册页和自带文档等架构特有的文件的存储位置

local:另一个层级目录;

X11R6:X-Window程序的安装位置

src:程序源码文件的存储位置

     /usr/local:Local hierarchy,让系统管理员安装本地应用程序;也通常用于安装第三方程序;

/var:/var Hierarchy,存储常发生变化的数据的目录;

cache Application cache data       #程序缓存数据

lib Variable state information   #数据的变化情况

local Variable data for /usr/local #可变的local 数据

lock Lock files                   #锁文件

log Log files and directories    #日志和目录文件

opt Variable data for /opt       #变化的opt数据

run Data relevant to running processes #与运行过程有关的数据

spool Application spool data 

tmp Temporary files preserved between system reboots #系统重启时保存的临时文件


/proc:基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward;

/sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;

其主要作用在于为管理Linux设备提供一种统一模型的的接口;


Linux系统上的文件类型:

-:常规文件;即f;

d: directory,目录文件;

b: block device,块设备文件,支持以“block”为单位进行随机访问

c:character device,字符设备文件,支持以“character”为单位进行线性访问

major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序

minor number:次设备号,用于标识同一类型中的不同的设备;

8位二进制:0-255

l:symbolic link,符号链接文件;

p: pipe,命名管道;

s: socket,套接字文件;


基本命令:

命令类型:

外部命令

shell内嵌命令


type COMMAND:

内部:builtin

外部:显示为命令文件路径;

          注意:命令可以有别名;别名可以与原名相同,此时原名被隐藏;此时如果要运行原命令,则使用\COMMAND;


命令别名:

获取所有可用别名的定义:

~]# alias

定义别名:

~]# alias NAME=‘COMMAND‘

注意:仅对当前shell进程有效

撤销别名:

~]# unalias NAME


which命令:

which - shows the full path of (shell) commands


which [options] programname [...]

--skip-alias:忽略别名

            

                [root@192 ~]# which ls

                alias ls=‘ls --color=auto‘

                    /usr/bin/ls

    

whereis命令:

whereis - locate the binary, source, and manual page files for a command


whereis [options] name...

-b: 仅搜索二进制程序路径;

-m:仅搜索使用手册文件路径;


who命令:

who - show who is logged on  #查看当前登录的用户


who [OPTION]...

-b: 系统此次启动的时间;

-r: 运行级别;


w命令:

w - Show who is logged on and what they are doing.

            #查看登录的用户及用户在做什么


bash的基础特性之一:


命令历史:shell进程会在其会话中保存此前用户提交执行过的命令;

~]# history

定制history的功能,可通过环境变量实现:

HISTSIZE:shell进程可保留的命令历史的条数;

HISTFILE:持久保存命令历史的文件;

.bash_history

HISTFILESIZE:命令历史文件的大小;


命令用法:

history [-c] [-d 偏移量] [n] 

或 history -anrw [文件名] 

或 history -ps 参数 [参数...]


-c: 清空命令历史;

-d offset:删除指定命令历史

-r: 从文件读取命令历史至历史列表中;

-w:把历史列表中的命令追加至历史文件中;

history #:显示最近的#条命令;


调用命令历史列表中的命令:

!#:再一次执行历史列表中的第#条命令;

!!:再一次执行上一条命令;

!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;


注意:命令的重复执行有时候需要依赖于幂等性;


调用上一条命令的最后一个参数:

快捷键:ESC, .

字符串:!$


控制命令历史记录的方式:

环境变量:HISTCONTROL

ignoredups:忽略重复的命令;

ignorespace:忽略以空白字符开头的命令;

ignoreboth:以上两者同时生效;


修改变量的值:

NAME=‘VALUE‘

Linux基础知识

  bash的基础特性:

    命令补全:

shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令;

    命令查找机制:

 查找内部命令;

  根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;


给定的打头字符串如果能惟一标识某命令程序文件,则直接补全;

不能惟一标识某命令程序文件,再击tab键一次,会给出列表;


    路径补全:

  在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件:

    tab:

如果能惟一标识,则直接补全;

否则,再一次tab,给出列表;


目录管理类的命令:

mkdir, rmdir

     mkdir:make directories #创建目录

         mkdir [OPTION]... DIRECTORY...

 -p: 自动按需创建父目录;

                    

               [root@192 ~]# mkdir /tmp/test/test.txt

             mkdir: 无法创建目录"/tmp/test/test.txt": 没有那个文件或目录

             [root@192 ~]# mkdir -p /tmp/test/test.txt

  -v: verbose,显示详细过程;

            

            [root@192 ~]# mkdir -p -v  /tmp/test2/test.txt

            mkdir: 已创建目录 "/tmp/test2"

            mkdir: 已创建目录 "/tmp/test2/test.txt"


  -m MODE:直接给定权限;

         注意:路径基名方为命令的作用对象;基名之前的路径必须得存在;


rmdir:remove empty directories  #删除目录文件

         rmdir [OPTION]... DIRECTORY...

          -p:删除某目录后,如果其父目录为空,则一并删除之;

            [root@192 ~]# mkdir -p /tmp/test/test1/test.txt 

            [root@192 ~]# rmdir -p /tmp/test/test1/test.txt/

            rmdir: 删除目录 "/tmp" 失败: 设备或资源忙

 -v: 显示过程;

            

            [root@192 ~]# rmdir -pv /tmp/test/test1/test.txt/

            rmdir: 正在删除目录 "/tmp/test/test1/test.txt/"

            rmdir: 正在删除目录 "/tmp/test/test1"

            rmdir: 正在删除目录 "/tmp/test"

            rmdir: 正在删除目录 "/tmp"

            rmdir: 删除目录 "/tmp" 失败: 设备或资源忙

问题1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?

            命令展开机制

            [root@192 ~]# mkdir -pv /tmp/x/{y1/{a,b},y2}

            mkdir: 已创建目录 "/tmp/x"

            kdir: 已创建目录 "/tmp/x/y1"

            mkdir: 已创建目录 "/tmp/x/y1/a"

            mkdir: 已创建目录 "/tmp/x/y1/b"

            mkdir: 已创建目录 "/tmp/x/y2"

问题2:如何创建a_c, a_d, b_c, b_d;

            

            [root@192 ~]# mkdir -v {a,b}_{c,d}

            mkdir: 已创建目录 "a_c"

            mkdir: 已创建目录 "a_d"

            mkdir: 已创建目录 "b_c"

            mkdir: 已创建目录 "b_d"

                

bash的基础特性之:命令行展开

~:自动展开为用户的家目录,或指定的用户的家目录;

{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b


问题1:mkdir -pv /tmp/x/{y1/{a,b},y2}

问题2:mkdir -v {a,b}_{c,d}


问题3:创建如下目录结构:

/tmp/mysysroot/

|-- bin

|-- etc

|   `-- sysconfig

|       `-- network-scripts

|-- sbin

|-- usr

|   |-- bin

|   |-- lib

|   |-- lib64

|   |-- local

|   |   |-- bin

|   |   |-- etc

|   |   |-- lib

|   |   `-- sbin

|   `-- sbin

`-- var

   |-- cache

   |-- log

   `-- run


~]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

[root@192 ~]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

    mkdir: 已创建目录 "/tmp/mysysroot"

    mkdir: 已创建目录 "/tmp/mysysroot/bin"

    mkdir: 已创建目录 "/tmp/mysysroot/sbin"

    mkdir: 已创建目录 "/tmp/mysysroot/etc"

    mkdir: 已创建目录 "/tmp/mysysroot/etc/sysconfig"

    mkdir: 已创建目录 "/tmp/mysysroot/etc/sysconfig/network-scripts"

    mkdir: 已创建目录 "/tmp/mysysroot/usr"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/bin"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/sbin"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/local"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/local/bin"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/local/sbin"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/local/etc"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/local/lib"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/lib"

    mkdir: 已创建目录 "/tmp/mysysroot/usr/lib64"

    mkdir: 已创建目录 "/tmp/mysysroot/var"

    mkdir: 已创建目录 "/tmp/mysysroot/var/cache"

    mkdir: 已创建目录 "/tmp/mysysroot/var/log"

    mkdir: 已创建目录 "/tmp/mysysroot/var/run"

[root@192 ~]# tree /tmp/mysysroot/

    /tmp/mysysroot/

    |-- bin

    |-- etc

    |   `-- sysconfig

    |       `-- network-scripts

    |-- sbin

    |-- usr

    |   |-- bin

    |   |-- lib

    |   |-- lib64

    |   |-- local

    |   |   |-- bin

    |   |   |-- etc

    |   |   |-- lib

    |   |   `-- sbin

    |   `-- sbin

    `-- var

        |-- cache

        |-- log

    

tree命令:

tree [options] [directory]

-L level:指定要显示的层级;


bash的基础特性:命令的执行状态结果


命令执行的状态结果:

bash通过状态返回值来输出此结果:

成功:0

失败:1-255


命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;


命令正常执行时,有的还回有命令返回值:

根据命令及其功能不同,结果各不相同;


引用命令的执行结果:

$(COMMAND)

或`COMMAND`    #反引号


bash的基于特性:引用

强引用:‘‘

弱引用:""

命令引用:``


bash基础特性:快捷键

Ctrl+a:跳转至命令行行首

Ctrl+e:跳转至命令行行尾


Ctrl+u:删除行首至光标所在处之间的所有字符;

Ctrl+k:删除光标所在处至行尾的所有字符;


Ctrl+l:清屏,相当于clear



文件查看类命令:cat, tac, head, tail, more, less

    分屏查看命令:more和less

        more命令:

more FILE

特点:翻屏至文件尾部后自动退出;

        less命令:

less FILE

            特点:翻页至文件尾部不退出

        head命令:

查看文件的前n行;

head [options] FILE

-n #  前n行

-# 

        tail命令:

查看文件的后n行;

tail [options] FILE

-n # 后n行

-#

-f:查看文件尾部内容结束后不退出,跟随显示新增的行;

       stat命令:

stat - display file or file system status 


stat FILE...


 文件:两类数据

元数据:metadata

数据: data


 时间戳:

access time:2015-12-10 16:12:22.776423693 +0800 #最近一次访问时间

modify time:2015-12-10 16:12:22.776423693 +0800 #最近一次修改时间

change time:2015-12-10 16:12:22.776423693 +0800 #最后一次改动时间


touch命令:

touch - change file timestamps


touch [OPTION]... FILE...

-c: 指定的文件路径不存在时不予创建;

-a: 仅修改access time;

-m:仅修改modify time;

-t STAMP

[[CC]YY]MMDDhhmm[.ss]

文件管理工具:cp, mv, rm


cp命令:copy

源文件;目标文件;


      单源复制:cp [OPTION]... [-T] SOURCE DEST

      多源复制:cp [OPTION]... SOURCE... DIRECTORY

      cp [OPTION]... -t DIRECTORY SOURCE...

  单源复制:cp [OPTION]... [-T] SOURCE DEST

   如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;

   如果DEST存在:

   如果DEST是非目录文件:则覆盖目标文件;

   如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;

 多源复制:cp [OPTION]... SOURCE... DIRECTORY

   cp [OPTION]... -t DIRECTORY SOURCE...


   如果DEST不存在:错误;

   如果DEST存在:

   如果DEST是非目录文件:错误;

   如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名;


 常用选项:

  -i:交互式复制,即覆盖之前提醒用户确认;

  -f:强制覆盖目标文件;

  -r, -R:递归复制目录;

  -d:复制符号链接文件本身,而非其指向的源文件;

  -a:-dR --preserve=all, archive,用于实现归档;

  --preserv=

mode:权限

   ownership:属主和属组

   timestamps: 时间戳

   context:安全标签

   xattr:扩展属性

   links:符号链接

   all:上述所有属性


   mv命令:move

      mv [OPTION]... [-T] SOURCE DEST

      mv [OPTION]... SOURCE... DIRECTORY

      mv [OPTION]... -t DIRECTORY SOURCE..    


      常用选项:

      -i:交互式;

      -f:force


 rm命令:remove    #删除

     rm [OPTION]... FILE...


常用选项:

    -i:interactive

    -f:force

    -r: recursive


 删除目录:rm -rf /PATH/TO/DIR

    危险操作:rm -rf /*


注意:所有不用的文件建议不要直接删除,而是移动至某个专用目录;(模拟回收站)



变量:

命名的内存空间;

变量类型:

字符型:

数值型

精确数值:

近似数值:


存储格式、数据范围、参与运算;

变量的赋值操作:

name=tom


globbing:文件名通配(整体文件名匹配,而非部分)


匹配模式:元字符

 *:匹配任意长度的任意字符

pa*, *pa*, *pa, *p*a*

pa, paa, passwd

 ?:匹配任意单个字符

pa?, ??pa, p?a, p?a?

pa, paa, passwd

 []:匹配指定范围内的任意单个字符

   有几种特殊格式:

[a-z], [A-Z], [0-9], [a-z0-9]

[[:upper:]]:所有大写字母

[[:lower:]]:所有小写字母

[[:alpha:]]:所有字母

[[:digit:]]:所有数字

[[:alnum:]]:所有的字母和数字

[[:space:]]:所有空白字符

[[:punct:]]:所有标点符号


pa[0-9][0-9], 2[0-9][0-9]

   [^]:匹配指定范围外的任意单个字符

   [^[:upper:]]

   [^0-9]

   [^[:alnum:]]


 显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;

    ls -d /var/l?[[:lower:]]

    

        [root@192 ~]# ls -d /var/l?[[:lower:]]

        /var/lib  /var/log

 显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;

ls -d /etc/[0-9]*[^0-9]


 显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录;

ls -d /etc/[^a-z][a-z]*


 复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录;

cp -r /etc/m*[^0-9] /tmp/magedu.com/


 复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下;

cp -r /usr/share/man/man[0-9] /tmp/man/


 复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;

cp -r /etc/[mnrp]*.conf /tmp/conf.d/


IO重定向及管道

  程序:指令+数据

程序:IO

        可用于输入的设备:文件

     键盘设备、文件系统上的常规文件、网卡等;

  可用于输出的设备:文件

显示器、文件系统上的常规文件、网卡等;


程序的数据流有三种:

输入的数据流;<-- 标准输入(stdin),键盘;

输出的数据流:--> 标准输出(stdout),显示器;

错误输出流:  --> 错误输出(stderr),显示器;


fd: file descriptor,文件描述符

标准输入:0

标准输出:1

错误输出:2


IO重定向:


输出重定向:>

特性:覆盖输出 #该操作会覆盖文件

输出重定向:>>

特性:追加输出 #在文末追加


# set -C  #c为大写

禁止覆盖输出重定向至已存在的文件;

此时可使用强制覆盖输出:>|

            

                [root@192 ~]# set -C

                [root@192 ~]# echo ‘hello ‘ >fstab

                -bash: fstab: 无法覆盖已存在的文件

                [root@192 ~]# echo ‘hello ‘ >| fstab

# set +C

关闭上述特性


注意:该设定,仅对当前shell进程有效。


错误输出流重定向:

2>  覆盖输出

2>> 追加输出 


合并正常输出流和错误输出流:

  (1) &>, &>>

  (2) COMMAND > /path/to/somefile 2>&1 #覆盖输出并合并错误输出

COMMAND >> /path/to/somefile 2>&1#追加输出并合并错误输出


            [root@192 ~]# echo ‘hello ‘ > ./fstab 2>&1 #将hello覆盖输出并合并错误输出重定向

            [root@192 ~]# echo $?    #显示错误输出重定向的结果

            0

    

特殊设备:/dev/null  #可以将不需要的文件转移至此文件目录下,会自动删除


输入重定向:<


tr命令:

 tr [OPTION]... SET1 [SET2]

 把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符


用法1:

tr SET1 SET2 < /PATH/FROM/SOMEFILE

用法2:

tr -d SET1 < /PATH/FROM/SOMEFILE


注意:不修改原文件


Here Document:<<

              cat << EOF

   cat > /PATH/TO/SOMEFILE << EOF


管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流

COMMAND1 | COMMAND2 | COMMAND3 | ...


#[root@192 ~]# cat /etc/issue

#\S

#Kernel \r on an \m

#[root@192 ~]# cat /etc/issue | tr [a-z] [A-Z] | tr -d [[:upper:]]

#\

# \   \


  tee命令:

COMMAND | tee /PATH/TO/SOMEFILE

    

 tr  : 主要是将文件转化后并输出 

 tee : 将文件一份保存一份作为下个程序的输入数据流




linux从初识到入门_文件系统