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 输出重定向
 
 
 

posted on 2018-07-27 15:45  Riper  阅读(206)  评论(0编辑  收藏  举报

导航