[TOC]
## 前言
通过本教程你将熟悉linux文件的基本操作以及其具体使用。本文目录结构摘抄自《鸟哥的LINUX私房菜》基础学习篇(第三版)。
**备注:** 本文只摘录了部分书中内容,对于部分知识点不会做详尽的解读,只保留高频使用的部分,以供大家理解和查阅。

## 目录与路径 
### 相对路径与绝对路径
|   路径分类 |  特征  |说明    |
| --- | --- | --- |
|  绝对路径  |  /  ~|   需要写完整的路径,需要从根路径开始,路径名一般较长,精确 |
|   相对路径 |  ../   ./或者不带任何符号  | 不需要写完整的路径,根据当前的路径去定位路径,../代表上一级,而不写路径代表在当前路径的同级中查找   |
### 目录的相关操作

**表格说明 :**
|   命令 | 功能   |   备注 |
| --- | --- | --- |
|   cd | 切换目录(相对或者绝对路径)   |  包括:.. 上一级  ./ 当前目录  ~ 当前根目录   |
|   pwd |当前目录    |  -p可以控制显示直接路径而非链接路径  |
|  mkdir [-mp]   |  创建文件夹  |   m为控制权限,p控制层次,如果创建的为多层目录,增加-p参数可以;否则会提示没有该目录 |
|  rmdir [-p]  |删除空文件夹    |  -p可以同时删除上一级的空目录,不建议  |
|  rm [-fir]   |   删除文件或目录 |  常用删除非空文件夹:rm -rf files ;如果不加-r,删除非空文件夹会报错 |
|   cp [-adfilprsu] source 目标档| 复制文件或目录   |  配置项参考教程 ,复制文件夹 cp -rf |
|   mv [-fiu] source destination |  移动文件或者目录  |    也可以叫重命名|
**注意事项 :**
- 权限概念,默认加的文件或者文件夹都是有权限的,但这个权限和umask有关,如果你想设置别的权限,需要给-m 711来给其权限。
- 使用tab可以根据已经输入的名字进行自动匹配找到其路径的文件或者文件夹的名字,如果没有反应会有错误的提示,可能是两种原因,1 该前缀没有匹配 2 匹配到了多个,如果是多个下面会给一个匹配到的多个结果,根据自己的需要进行继续。
- 当你对某个文件没有操作权限的时候,可以通过`chmod -R 777 /xx/ ` 来给文件夹赋予操作权限,777为最高权限。
### 执行文件路径的变量
我们知道执行任何的操作都需要底层命令的支持,而一般情况下命令的支持脚本是不在我们的应用目录的,比如bin/ls 查看文件的命令,可以在任何位置使用ls。
能够这样支持,是因为我们有设置路径变量,设置之后会按照我们定义的路径去找对应的可执行文件。
对于这部分,不详细讲,有兴趣得可以通过echo $PATH 查看自己系统中已经命名好的变量。每个变量用冒号隔开。
~~~
[root@iiii /]# echo $PATH
/root/.nvm/versions/node/v7.4.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
~~~
## 文件与目录的管理
更多详情参考文档:[linux文件操作](http://www.runoob.com/linux/linux-file-content-manage.html)
### 查看文件目录
`ls `可以查看文件目录,如果想查看更详细的,可以ls -l可以查看到文件被创建时的文件性质,权限,文件所属的用户和组。
~~~
[root@www /]# ls -l
total 64
dr-xr-xr-x   2 root root 4096 Dec 14  2012 bin
dr-xr-xr-x   4 root root 4096 Apr 19  2012 boot
……
~~~
其中第一个字符分别代表如下含义 :
|   符号 | 代表   |
| --- | --- |
|    d|  目录  |
|  -  |  文件 |
|   l |  链接文档  |
|  b  |   可供储存的接口设备 |
|    c| 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)   |
### 目录的管理(复制删除与移动)
|   命令 | 功能   |   备注 |
| --- | --- | --- |
| rm [-fir]   |   删除文件或者目录 |  常用删除非空文件夹:rm -rf files  |
| cp [-adfilprsu] source 目标档| 复制文件或目录   |  配置项参考教程 ,复制文件夹 cp -rf |
| mv [-fiu] source destination |  移动文件或者目录  |    也可以叫重命名|
### 取得路径的文件名与目录名
在具体的路径中,我们很多时候分不清哪个是文件名,哪个是目录名,通过dirname和basename可以分清楚这部分。通过下面的代码我们可以得出index为一个文件名,而其上一级为目录名。(某些时候需要根据某个路径是文件的路径还是目录的位置来决定是新增目录还是文件。)
~~~
[root@iZbpZ /]# basename /robin/demo2/index
index
[root@i8Z /]# dirname /robin/demo2/index
/robin/demo2
~~~
##  查看文件内容
### 基本查看与数据选取
| 命令   |   说明 |备注    |
| --- | --- | --- |
| cat  |  从正文第一行开始看 |    |
| tac |   从最后一行开始看 |    |
| nl   |显示的时候追加行号    |    |
|  more/less  |    按照页显示内容|less更好的是可以向前翻页    |
|   head |   只看头几行 |    |
|  tail  |只看尾部几行    |    |
**说明**:实际使用中我们一般常用的是cat 查看基本的配置文件内容;tail -n number log 查看日志文件。
**备注 :**    
- 二进制文件是无法正常查看的,会是乱码信息的,我们通过od命令进行查看:od -t type 文件,不过即使这样还是看不出其内容代表什么。这类的文件比如图片、表格等。
- 修改文件时间(略)
### 分页查看
当文件的内容很多的时候,可以根据屏幕的显示空间进行分页显示的控制。还是以刚才的网页文件为例:当翻到最后的时候会跳出文件。
|   命令 |   作用 |
| --- | --- |
|  空格  |  下一页  |
|  回车  | 向下滚动一行   |
| /字符串   | 向下查询字符串关键字    |
|   :f | 立刻显示文件名以及目前显示的行数    |
| q | 离开文件,不再显示   |
|  b| 向上翻页,只对文件有效,对管道无效    |
~~~
<!DOCTYPE html><html><head><meta charset=utf-8><rel=stylesheet></head><style>mi
--More--(29%)
~~~
## 编辑文件
如果你是mac shell ,文件编辑是vi进入.
~~~
//vim打开某文件
vim file 
//进入编辑模式
i
//退出并保存 esc+
:wq!
//退出不保存文件
:q!
//强制退出
:!
~~~
- [菜鸟教程--vim编辑入门教程](http://www.runoob.com/linux/linux-vim.html)
## 服务器根目录结构
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
|  目录结构  |  说明  |    备注|
| --- | --- | --- |
|  bin  |   bin是Binary的缩写, 这个目录存放着最经常使用的命令。 |    |
| boot |  这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。  |    |
| dev   | dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。   |    |
|  etc  |  这个目录用来存放所有的系统管理所需要的配置文件和子目录。  |    |
|  home  |  用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的  |    |
|   lib |  这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。  |    |
|  opt  |  这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。  |    |
| root  |  超级管理员主目录  |    |
|  var |   这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。 |    |
| sbin |   s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 |    |
| usr|    这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。|    |
## 参考文档 
- [菜鸟教程--linux文件操作](http://www.runoob.com/linux/linux-file-attr-permission.html)
- 《鸟哥的linux私房菜》
                    
        - 前端工程化
 - 架构总纲
 - 001
 - 美团技术架构
 - 前端工程化说明
 - 历史背景说明
 - 架构说明
 - 前端工程化技术栈
 - 技术文档说明
 - 功能模块说明
 - 前端模块管理器简介
 - 框架对比分析
 - vue&react&ng对比分析(一)
 - vue&react&ng对比分析(二)
 - vue&react&ng对比分析(三)
 - 工程化专题系列
 - 需要解决的问题
 - 001
 - 002
 - 003
 - 常见代码错误
 - jslint中常见的错误
 - css规范常见错误
 - html规范常见错误
 - 工程化目录
 - 工程化初始化
 - 项目构建流程
 - 项目打包优化
 - 上线与迭代注意事项
 - 前端部署发布
 - jetkins部署
 - 部署需求整理
 - 前端监控
 - 工程化实践指南
 - dock持续部署
 - 系列文章
 - 插拔式前端的设计
 - 其他实践
 - 工程化的前端管理
 - 宋小菜借鉴
 - 大前端团队介绍
 - 人员组成
 - 人员发展
 - 研发流程
 - 任务分类
 - 前端基础建设与架构
 - 技术栈以及技术方案
 - 业务目录大纲
 - 前端大纲
 - api管理
 - 后端api工具
 - 前端easymock
 - api拦截与代理
 - api优化
 - api请求时长策略设计
 - 前端架构专题
 - 架构专题一
 - 产品原型对接
 - 与ui对接
 - 图片专题
 - 图片工程化大纲
 - 图片优化
 - 图标字体
 - 图标字体vs雪碧图
 - 工程化的前端矩阵
 - 蚂蚁金服前端矩阵分享
 - BFF架构
 - 概念解析
 - 前端脚手架
 - 初始化项目
 - 个性化配置
 - 部署与发布
 - 性能优化专题
 - http专题
 - https常识
 - http优化1
 - http优化2
 - http优化3
 - http缓存
 - 常规web性能优化攻略
 - 性能优化大纲
 - 样式优化
 - js优化
 - 第三方依赖优化
 - 代码分割优化
 - 图片优化
 - 打包优化
 - 服务器优化
 - 缓存优化
 - 交互优化
 - pc事件优化
 - 手机事件优化
 - 推荐文章
 - 01
 - 前端安全专题
 - 前端安全大纲
 - 前端第三方库
 - seo优化
 - web框架的对比
 - 001
 - 学习资源
 - 珠峰前端架构
 - npm教程
 - npm入门
 - cnpm入门
 - cnpm搭建
 - 你该知道的js模块
 - browserSync
 - opn
 - js-cookie
 - npm-script进阶
 - 入门篇
 - 进阶篇
 - 高阶篇
 - 实践篇
 - yarn入门
 - nodejs教程
 - axios&&fetch
 - xhr
 - axios
 - fetch
 - babel专题
 - babel入门
 - profill入门
 - nodejs入门
 - 快速入门
 - 大纲介绍
 - node基础
 - global obj
 - assert断言
 - procss-进程
 - child_process子进程
 - cluster集群
 - console控制台
 - crypto-加密
 - dgram-数据报
 - dns-域名服务器
 - error-异常
 - events-事件
 - global-全局变量
 - http-基本协议
 - https-安全协议
 - modules-模块
 - os-操作系统
 - path-路径
 - querystring-查询字符串
 - readline-逐行读取
 - fs-文件系统
 - net-网络操作
 - 命令行工具
 - 内存泄露
 - 代码的组织与部署
 - 异步编程
 - orm模块
 - 异步编程解决方案
 - node-lessons
 - 环境准备
 - nodejs实践
 - 项目搭建
 - 异步优化
 - 创建web和tcp服务器
 - 终端问答程序
 - 爬虫系统
 - mongleDb
 - mongoDB简介
 - 基本使用
 - 实用技巧
 - 汇总001
 - 饿了么后台搭建
 - nodejs干货
 - 沪江基于node的实践
 - 苏宁基于nodejs优化
 - 基于nodejs开发脚手架
 - 书籍干货
 - 深入浅出nodejs
 - 异步I/O(一)
 - gulp教程
 - gulp入门
 - gulp常用插件(1)
 - gulp常用插件(2)
 - gulp创建目录
 - 经验普及贴
 - webpack教程
 - webpack入门
 - 简单入门
 - entry配置
 - output配置
 - 插件使用01
 - 插件使用02
 - loader使用
 - dev-server介绍
 - 构建css
 - css模块化
 - 使用less和sass
 - 构建图片
 - 引入字体
 - babel配置攻略
 - eslint
 - 001
 - webpack进阶
 - 分不同文件检出
 - 优化打包大小
 - 优化打包速度
 - 自定义配置
 - 单页以及多页如何配置
 - 优化实践
 - 文章导读
 - 001
 - 优化指南
 - 参考列表
 - webpack4
 - 多入口程序构建
 - 参考教程
 - 项目实践
 - 环境区分
 - 常见问题
 - 解读webpack
 - 从vuejs权威指南中解决
 - 深入浅出webpack
 - rollup
 - 入门
 - parcel
 - 入门篇
 - express教程
 - nuxt教程
 - 入门
 - 基本入门
 - koa教程
 - koa基本入门
 - koa开发注意事项
 - koa实践指南
 - 关于路由
 - koa优化指南
 - 001
 - Vuejs
 - vuejs入门系列
 - vue-cli入门
 - vue2基本认识
 - vuejs入门教程
 - 样式绑定
 - vuex入门学习笔记
 - vue组件生命周期
 - 组件的使用
 - vue-router入门
 - vue-filter
 - 计算属性使用
 - 开发注意事项
 - mixins
 - 组件通讯
 - vuejs进阶
 - 进阶资源
 - router进阶
 - 官网介绍
 - 前进与后退优化
 - keep-alive基本使用
 - keep-alive原理详解
 - 钩子函数进阶
 - 计算属性&监听&方法
 - vue服务端渲染技术
 - 项目实践之路
 - 实践大纲
 - 插槽专题篇
 - vue-cli升级
 - 进阶入门
 - vuejs架构
 - nuxt
 - vuejs项目实践
 - vue实践常见问题
 - 001
 - 002
 - 003
 - 004
 - 005
 - 改造api参数探索
 - 007
 - 008
 - 009
 - 010
 - 项目技术栈
 - vue性能问题以及优化方案
 - vue-spa应用的理解
 - vue-ssr的部署与使用
 - 滴滴出行实践案例
 - 2.0重构
 - vue-element-admin实践
 - 准备工作
 - 菜单设计
 - 权限设计
 - 依赖模块
 - vue-betterScroll
 - 性能优化懒加载
 - 京东组件实践
 - vue2项目小结
 - vue探索与实践
 - 去哪实践
 - 介绍
 - 饿了么项目实践
 - 项目解析
 - vue骨架屏实践
 - vue生态推荐
 - ui框架
 - elementUI
 - 001
 - 002
 - VUE-material
 - vant-ui
 - 解读入门
 - iview
 - 使用问题汇总
 - vux
 - mint-ui
 - loadmore
 - vue资源导航
 - vueconf
 - 源码解读
 - vm
 - 双向绑定
 - 基本原理
 - 数组双向绑定
 - 报错机制
 - 封装方法
 - 运行环境
 - 入门
 - 指令
 - vue-router解读
 - util
 - vue-props
 - 流程逻辑
 - 推荐文章
 - 源码解读
 - 文章导读
 - 001
 - vuejs实战
 - 基础篇
 - 进阶篇
 - 实践篇
 - 面试专题
 - angularjs教程
 - angularjs入门系列
 - 基本入门
 - ng2入门
 - ng进阶
 - ng项目实践
 - 源码解读
 - typescript
 - reactjs教程
 - reactjs入门系列
 - react的基本入门
 - react组件
 - virtalDom认识
 - react-cli入门
 - react组件的生命周期
 - 基本知识点
 - react-router教程
 - react进阶
 - 基本实践
 - react加载性能优化指南
 - react属性封装
 - 进阶45讲
 - 01概述
 - 02jsx
 - 06高阶组件&函数子组件
 - contextApi
 - react-router
 - 入门章节
 - 进阶
 - 高阶组件
 - react进阶组件
 - 基本介绍
 - render props
 - render props的封装
 - render props getter
 - react-native入门
 - 源码解读
 - 001
 - 002-reactDemo
 - 参考教程
 - 参考教程1
 - 了解react-hooks
 - ui框架
 - pc端ui框架推荐
 - 项目实践
 - weatherApp
 - 001
 - 002
 - 不同生命周期使用场景
 - react项目结构和组件的命名
 - 常见问题解答
 - 参考书籍
 - react全栈
 - 前言
 - react与redux进阶
 - 常见误解
 - 反模式
 - react设计模式与最佳实践
 - 7美化组件
 - 7.2行内样式
 - 7.4css模块
 - 深入react技术栈
 - react学习手册
 - 序
 - mobx教程
 - 入门
 - 大佬推荐
 - 001
 - react面试
 - 001
 - linux教程
 - linux入门
 - 基本入门
 - 文件管理
 - 文件传输
 - 文档编辑
 - 磁盘管理
 - 磁盘维护
 - 网络通讯
 - 系统管理
 - 系统设置
 - 备份压缩
 - 设备管理
 - 查看系统信息
 - linux其他
 - webhook
 - rsync入门教程
 - ssh免登陆设置
 - 安装nodejs
 - nginx教程
 - 入门教程
 - 安装
 - 基本配置
 - 服务基本使用
 - 高性能nginx
 - 001
 - pm2教程
 - shell教程
 - 入门大纲
 - echo命令
 - 参考文献
 - linux常用命令2
 - linux常见问题
 - 001
 - python
 - 入门教程
 - 机器学习
 - 准备工作
 - 服务器常识
 - tomcat
 - 入门常识
 - iis
 - redis教程
 - 入门第一篇
 - redis进阶
 - 项目实践
 - redis使用问题
 - mongleDB
 - 入门
 - 使用进阶
 - 项目实践
 - 常见问题
 - electron
 - 入门系列
 - 前言
 - 小程序
 - 入门
 - 准备工作
 - 路由
 - 参考文档
 - 001
 - 小程序开发--双路视频调研
 - 准备工作
 - 参考资源
 - 参考网址
 - docker
 - 入门
 - 基本认识
 - 安装与使用
 - docker安装nginx
 - docker安装jetkins(1)
 - docker部署jenkins(2)
 - 进阶
 - 实践总结
 - docker群分享
 - docker部署前端应用
 - 文章导读
 - docker其他
 - 网络安全
 - 入门
 - 大纲
 - 项目解析
 - schoolpal.web
 - 功能模块大纲
 - 目录结构大纲
 - 前端国际化
 - 国际化方案
 - 其他
 - bower入门教程
 - weex
 - 入门
 - memcached
 - 入门
 - sails
 - 入门
 
