zoukankan      html  css  js  c++  java
  • Linux文件、目录及相关指令学习

    Linux学习笔记

    一、Linux部分定义      

    linux哲学思想

          1 一切皆文件,包括硬件

          2 小型,单一用途的程序(功能尽量单一)--------> 目标是一个程序集合多个单一功能的程序完成复杂的功能

          3  链接程序,完成复杂的任务,需要用户完成

          4 避免令人困惑的用户界面

          5 配置数据存储在文件中

    开发接口标准       

          ABI:Application Binary Interface 描述了应用程序和OS之间的底层的接口,允许编译好的代码在使用兼容ABI的系统中运行       

          API:Application Programming interface 定义了源代码和库之间中接口,因此同样的源代码可以在支持这个api的任何系统中编译

    用户交互界面                              

          GUI:Graphic User Interface 图形用户界面                              

          CLI:Command Line Interface 命令行界面

    文件结构:倒置树结构,所有文件路径都从根开始

          basename 基名

          dirname 路径名

    路径

          绝对路径:文件路径从根开始,指向要到达的文件。 eg:cd  /bin/bash

          相对路径:从当前位置出发,到要到达的文件路径。 eg:cd  bin/tmp 进程init               

    进程

          程序的安全上下文,运行的程序的能访问的资源的权限取决于发起进程的用户的权限。

          程序运行时系统就会创建一个进程,并为它分配资源,然后核心开始处理该进程。               

          子进程先于父进程结束。               

          僵尸进程:进程结束后,父进程才能结束,否则,父进程结束了,子进程没有结束,但是子进程处于僵尸状态。  

    操作系统下,程序员的主要工作围绕两棵树展开。

          两棵树,文件树-/,进程树-init;对其进行增删改查四个操作。

    程序=指令+数据

    程序=算法+数据结构

                    以算法为中心,数据结构服务于算法:过程式编程

                    以数据为中心,算法服务于数据:对象式编程

    设备终端                                 

          物理终端 /dev/console       

          虚拟终端 /dev/tty# [1-6] Ctrl+ Alt +F[1-6]       

          伪终端     /dev/pts/#    (ssh远程连接,图形界面开启的终端)        

          图形终端 /dev/tty7       

          串行终端 /dev/ttyS#       

    查看当前的终端设备:#tty

    二、Linux指令学习

    bash的内部命令              

           enable command 启用内部命令              

           enable command -n command禁用内部命令              

           enable command -n 查看禁用的内部命令                

            命令格式  【-w   /  --word  】 【参数】              

            type cmd  查看命令类型 内部命令是当前使用的shell的,其他外部命令可通过whereis cmd或者which cmd (外部可执行命令的文件路径获取)查询   

            eg:which  eg:which which        which tty

    cd:change directory,改变工作会目录,只输入cd会回到当前用户的家目录,与cd~相同。

    cd -:切换至上一目录。

    tty 显示当前设备类型

    whoami 显示当前身份

    w显示所有当前用户及操作

    who显示当前操作用户

    alias/unalias定义别名/取消定义别名,在指令最左端输入禁用别名。

    hwclock :硬件时钟

    hwclock -s :硬件时钟同步为系统时钟             

        -w :系统时钟同步为硬件时钟          

    date:系统时间                    

          +%a : 周几的缩写           

          +%A : 周几的全写          

          +%b :几月的缩写 +%h          

          +%B :几月的全写           

          +%c :本地日期时间          

          +%C :2018的20           

          +%d :某月的几号 %e          

          +%D :日期 07/25/18          

          +%F : 日期 2018-07-25          

          +%g :2018的18           

          +%H :几点-24小时制 00-23           

          +%I :几点-12小时制 00-12           

          +%j :一年的第几天           

          +%k : 0-23           

          +%l : 0-12           

          +%m : 月           

          +%M :分钟           

          +%T : 08:42:11          

          +%u : 一周的第几天 Monday是第一天 1-7           

          +%w : 一周的第几天 SUNday是第一天 0-6          

          +%U :一年的第几周           

          +%y : 2018 的18          

          +%Y :年           

    设置时间:date [-u] [MMDDhhmm][[cc]YY][.SS]]

    shutdown 关机                 

          -r重启                  

          -h 关机          等于halt                 

          -c取消                                 

              +m延后关机

    reboot重启

     获取帮助

    help:帮助指令,使用格式           

          help [COMMAND]            [COMMAND] -h            [ COMMAND] --help

    man:手册页放在/usr/share/man       

        man章节:         

          1、用户命令         

          2、系统调用         

          3、C库调用         

          4、设备文件以及特殊文件         

          5、配置文件格式         

          6、游戏         

          7、杂项           ·

          8、管理类命令         

          9、linux内核API          

       man帮助段落说明:         

          NAME:名称及简要说明         

          SYNOPSIS:用法格式         

          DESCRIPTION:详细描述         

          OPTIONS:选项说明         

          EXAMPLES:实例

      查看手册:man 1 cat         

      列出所有帮助:man -a cat         

      搜索man手册:man -k cat

          

    通过在线文档获取帮助:第三方应用官方文档       

          http://www.nginx.org       

          http://tomcat.apache.org       

          http://httpd.apache.org       

          http://www.python.org     

    通过发行版官方的文档光盘或网站可以获得,安装指南、部署指南、虚拟化指南等,红帽知识库和官方在线文档       

    http://kbase.redhat.com       

    http://www.redhat.com/docs       

    http://access.redhat.com          

    三、Linux的文件管理

    文件系统

    文件和目录被组织成一个单根倒置树结构
    文件系统从根目录下开始,用“/”表示
    根文件系统(rootfs):root filesystem
    文件名称区分大小写
    以.开头的文件为隐藏文件
    路径分隔的 /
    文件有两类数据:
     元数据:metadata(保存属性信息)
     数据:data
    文件系统分层结构:LSB  Linux Standard Base
    FHS: (Filesystem Hierarchy Standard)
     http://www.pathname.com/fhs/

    文件名规则

    文件名最长255个字节
    包括路径在内文件名称最长4095个字节
    蓝色-->目录   绿色-->可执行文件    红色-->压缩文件   浅蓝色-->链接文件  灰色-->其他文件 紫色-->套接字文件
    除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。
    标准Linux文件系统(如ext4),文件名称大小写敏感。例如:MAIL, Mail, mail, mAiL
    文件系统结构
    /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
    /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
    /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
    /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
    /lib64:专用于x86_64系统上的辅助共享库文件存放位置
    /etc:配置文件目录
    /home/USERNAME:普通用户家目录
    /root:管理员的家目录
    /media:便携式移动设备挂载点(非强制)
    /mnt:临时文件系统挂载点(非强制)
    /dev:设备文件及特殊文件存储位置
     b: block device,随机访问
     c: character device,线性访问
    /opt:第三方应用程序的安装位置
    /srv:系统上运行的服务用到的数据
    /tmp:临时文件存储位置,自动清除30天内未访问的文件
    /usr: universal shared, read-only data 全局共享只读数据
         bin: 保证系统拥有完整功能而提供的应用程序
         sbin:
         lib:32位使用
         lib64:只存在64位系统
         include: C程序的头文件(header files)
         share:结构化独立的数据,例如doc, man等
         local:第三方应用程序的安装位置(非关键)
    /var: variable data files 可变数据文件
        cache: 应用程序缓存数据目录
        lib: 应用程序状态信息数据
        local:专用于为/usr/local下的应用程序存储可变数据;
        lock: 锁文件
        log: 日志目录及文件
        opt: 专用于为/opt下的应用程序存储可变数据;
        run: 运行中的进程相关数据,通常用于存储进程pid文件
        spool: 应用程序数据池
        tmp: 保存系统两次重启之间产生的临时数据
    /proc: 用于输出内核与进程信息相关的虚拟文件系统,伪文件系统
    /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
    /selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置,初学者最好关掉selinux,输出disabled为关闭,输出enforcing为开启输出permissive为许可模式。
          getenforce 判断安全系统是否开启
                         setenforce 0 关闭安全系统
                        注意要想永久关闭要改配置文件,文件位于/etc/selinux/config,将其中SELINUX=后的参数改为disabled

    Linux的文件类型

      -:普通文件
      d: 目录文件
      b: 块设备
      c: 字符设备
      l: 符号链接文件
      p: 管道文件pipe
      s: 套接字文件socket

    文件权限:

       第一位表示文件类型,第2-4位表示属主权限,第5-7位表示属组权限,第8-10位表示其他用户权限,数字2的位置表示被硬链接的次数,后边的两个root表示的是属主和属组,后边是大小、修改时间、文件名。文件的权限主要针对三类对象进行定义
       owner: 属主, u
       group: 属组, g
       other: 其他, o
      每个文件针对每类访问者都定义了三种权限
    权限 文件 目录  
    r: Readable    可使用文件查看类工具获取其内容 可以使用ls查看此目录中文件列表  
    w: Writable 可修改其内容 可在此目录中创建文件,也可删除此目录中的文件  
    x: eXcutable  可以把此文件提请内核启动为一个进程 可以使用ls -l查看此目录中文件列表,可以cd进入此目录  
     
     
     
     
     
    文件的权限由八进制的三位数表示000-777
      文件默认的权限由管理员设定的umask码(反向掩码)决定。
      目录的算法为777-umask=用户对目录的权限。
      文件是666-umask=用户队文件的权限。
        例如:管理员umask码为0022,看后三位,777-022=755,这表示目录的属主拥有文件的全部权限,属组和其他用户拥有文件的读和执行的权限,而文件则是666-022=644,这表示root用户有写和读的权限,而属组和其他用户只有读的权限。
      一般将普通用户的umask码默认为002,普通用户不要给执行的权限。
      umask码可以修改,普通用户修改后只对当前shell有效。永久修改要改配置文件,文件位于当前用户家目录下的隐藏文件.bashrc或.bashprofile,进入加umask=0002
    在centOS 6下,设置umask码后,文件可被其他用户执行时,系统会自动将结果加1,取消其他用户的执行权限。

    文件名通配符

    * 匹配零个或多个字符
    ? 匹配任何单个字符
    ~ 当前用户家目录
    ~mage 用户mage家目录
    ~+ 当前工作目录
    ~- 前一个工作目录
    [0-9]  匹配数字范围
    [a-z]:字母
    [A-Z]:字母
    [wang]  匹配列表中的任何的一个字符
    [^wang] 匹配列表中的所有字符以外的字符

    预定义的字符类:man 7 glob

     [:digit:]:任意数字,相当于0-9
     [:lower:]:任意小写字母
     [:upper:]: 任意大写字母
     [:alpha:]: 任意大小写字母
     [:alnum:]:任意数字或字母
     [:blank:]:水平空白字符
     [:space:]:水平或垂直空白字符
     [:punct:]:标点符号
     [:print:]:可打印字符
     [:cntrl:]:控制(非打印)字符
     [:graph:]:图形字符
     [:xdigit:]:十六进制字符

    四、LInux的目录管理

    目录操作指令

    pwd:相当于echo $PWD,当前所处目录的信息储存在PWD变量下。
    CWD:current working directoey 当前工作目录
    OLDPWD:上一工作目录
    cd change directory,使用绝对或相对路径,改变工作会目录,只输入cd会回到当前用户的家目录,与cd~相同
          cd.. 返回上级目录
          cd. 其中.表示当前目录  eg : cd ./bin/
          cd - 切换至上一目录,可在本目录与上一目录之间切换
    ls 列出当前目录的内容或指定目录
    ls -a 包含隐藏文件
    ls -l 显示额外的信息
    ls -R  目录递归通过
    ls -ld  目录和符号链接信息
    ls -1  文件分行显示
    ls –S  按从大到小排序
    ls –t   按mtime排序
    ls –u   配合-t选项,显示并按atime从新到旧排序
    ls –U  按目录存放顺序显示
    ls –X  按文件后缀排序
    ls-i 显示inode号     

    cd:change directory,改变工作会目录,只输入cd会回到当前用户的家目录,与cd~相同。

    cd -:切换至上一目录。

    touch 创建文件和刷新时间
     touch [OPTION]... FILE...
      -a   仅改变 atime和ctime
      -m  仅改变 mtime和ctime
      -t  [[CC]YY]MMDDhhmm[.ss]     
         指定atime和mtime的时间戳
        -c  如果文件不存在,则不予创建
    cp [OPTION]... [-T] SOURCE DEST
    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...
    cp SRC DEST
            SRC是一个文件:
           如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
           如果目标存在:
                如果DEST是文件:将SRC中的内容覆盖至DEST中
                    基于安全,建议为cp命令使用-i选项
                如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
            SRC多个文件
             DEST必须存在,且为目录,其它情形均会出错;
       SRC是目录:此时使用选项:-r(递归)
             如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;
             如果DEST存在:
                 如果DEST是文件:报错
                 如果DEST是目录:
      -i:覆盖前提示  –n:不覆盖,注意两者顺序
      -r, -R: 递归复制目录及内部的所有内容
      -a: 归档,相当于-dR --preserv=all
      -d:--no-dereference --preserv=links 不复制原文件,只复制链接名
      --preserv[=ATTR_LIST]
         mode: 权限
         ownership: 属主属组
         timestamp:
         links
         xattr
         context
         all
      -p: 等同--preserv=mode,ownership,timestamp
      -v: --verbose
      -f: --force
      -u:--update 只复制源比目标更新文件或目标不存在的文件
      --backup=numbered 目标存在,覆盖前先备份加数字后缀

    mv 移动  

      -i: 交互式    

      -f: 强制 rm 删除,(慎用删除,数据珍贵)

       -i: 交互式    

      -f: 强制删除   

      -r: 递归           --no-preserve-root   eg:rm -rf /  删库。。。

    tree 树形表示目录  

      -d: 只显示目录    

      -L level:指定显示的层级数目    

      -P pattern: 只显示由指定pattern匹配到的路径 mkdir 创建目录        

      -p: 存在于不报错,且可自动创建所需的各目录        

      -v: 显示详细信息        

      -m MODE: 创建目录时直接指定权限  

      -P:无父目录先创建父目录

    rmdir 删除空目录         

      -p: 递归删除父空目录       

       -v: 显示详细信息  

      -r 递归删除目录树  

    ln filename  [linkname ] 硬链接。   原始路径;连接路径

       硬链接:创建硬链接会增加额外的记录项以引用文件

              对应于同一文件系统上一个物理文件

              每个目录引用相同的inode号

              创建时链接数递增

              删除文件时: rm命令递减计数的链接

              文件要存在,至少有一个链接数

              当链接数为零时,该文件被删除      

          不能跨越驱动器或分区

    ln -s 软链接  

      软链接:一个符号链接指向另一个文件       

          ls - l的 显示链接的名称和引用的文件

          一个符号链接的内容是它引用文件的名称

          可以对目录进行

          可以跨分区 指向的是另一个文件的路径;      

          其大小为指向的路径字符串的长度;      

          不增加或减少目标文件inode的引用计数

    file [options] <filename>...查看文件类型
      -b 列出文件辨识结果时,不显示文件名称
      -f filelist 列出文件filelist中文件名的文件类型
      -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
      -L 查看对应软链接对应文件的文件类型
      --help 显示命令在线帮助

    标准输入和输出

    打开的文件都有一个fd: file descriptor (文件描述符),表示了文件的属性。
    Linux给程序提供三种I/O设备
    标准输入(STDIN)-0 默认接受来自键盘的输入
    标准输出(STDOUT)-1 默认输出到终端窗口
    标准错误(STDERR)-2 默认输出到终端窗口
    I/O重定向:改变默认位置
    STDOUT和STDERR可以被重定向到文件
    命令 操作符号 文件名
    支持的操作符号包括:
      >  把STDOUT重定向到文件
      2> 把STDERR重定向到文件
      &> 把所有输出重定向到文件
      > 文件内容会被覆盖
      >| file 强制覆盖
      >>  原有内容基础上,追加内容
      2> 覆盖重定向错误输出数据流
      2>>  追加重定向错误输出数据流
      标准输出和错误输出各自定向至不同位置
        COMMAND > /path/to/file.out 2> /path/to/error.out
      合并标准输出和错误输出为同一个数据流进行重定向
        &>   覆盖重定向
        &>>  追加重定向
        COMMAND > /path/to/file.out 2>&1 (顺序很重要)
        COMMAND >> /path/to/file.out 2>&1
       ():合并多个程序的STDOUT
         ( cal 2007 ; cal 2008 ) > all.txt
    tr  转换和删除字符
    tr [OPTION]... SET1 [SET2]
      -c –C --complement:取字符集的补集
      -d --delete:删除所有属于第一字符集的字符
      -s --squeeze-repeats:把连续重复的字符以单独一个字符表示
      -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
    inode(index node)表中包含文件系统所有文件列表
        一个节点 (索引节点)是在一个表项,包含有关文件的信息( 元数据 ),包括:
         文件类型,权限,UID,GID
         链接数(指向这个文件名路径名称个数)
         该文件的大小和不同的时间戳
         指向磁盘上文件的数据块指针
         有关文件的其他数据
     bitmap 位图
    block bitmap 块位图
    STDIN、STDOUT
    管道(使用符号“|”表示)用来连接命令
     命令1 | 命令2 | 命令3 | …
    将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
    STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
    最后一个命令会在当前shell进程的子shell进程中执行用来
    组合多种工具的功能
     ls  | tr 'a-z' 'A-Z'
    <<终止词”命令从键盘把多行重导向给STDIN
         直到 终止词 位置的所有文本都发送给STDIN
        有时被称为就地文本(heretext)
    在命令尾部加-表示前一个命令的STDOUT   eg :cat  /etc/passwd|file -
    tee 输出重定向
     
     
     
  • 相关阅读:
    epoll精髓 C++ 技术中心 C++博客
    【找茬】split string 力为的技术博客 C++博客
    不谈技术~蛇年,我回来了!
    不说技术~希望所有人都好好的
    DDD~充血模型和失血模型
    基础才是重中之重~何为原子化操作
    DDD~概念中的DDD
    策略模式
    windows句柄和消息技术
    观察者模式2(observer)
  • 原文地址:https://www.cnblogs.com/rprp789/p/9375426.html
Copyright © 2011-2022 走看看