[TOC]
# Linux文件与目录管理
## 1 目录的相关操作
### 1.1 `cd`:切换目录
### 1.2 `pwd`:显示当前目录
### 1.3 `mkdir`:新建一个新的目录
### 1.4 `rmdir`:删除一个空的目录
## 2 文件与目录管理
### 2.1 `ls`:查看文件与目录
### 2.2 `cp`:复制文件
### 2.3 `rm`:移除文件/目录
### 2.4 `mv`:移动/更名文件/目录
### 2.5 `scp`: 远程拷贝文件
两台机器IP分别为:A.104.238.161.75,B.43.224.34.73。
在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录下,命令为:
`scp -r root@43.224.34.73:/home/lk /root`。
具体过程为:
~~~
[root@XX ~]# scp -r root@43.224.34.73:/home/lk /root
root@43.224.34.73's password:
k2.sql 100% 0 0.0KB/s 00:00
k.zip 100% 176 0.2KB/s 00:00
.bash_history 100% 32 0.0KB/s 00:00
.bash_logout 100% 18 0.0KB/s 00:00
.bashrc 100% 231 0.2KB/s 00:00
k3.sql 100% 0 0.0KB/s 00:00
.bash_profile 100% 193 0.2KB/s 00:00
[root@XX ~]# ls
~~~
在A服务器上将/root/lk目录下所有的文件传输到B的/home/lk/cpfile目录下,命令为:
`scp -r /root/lk root@43.224.34.73:/home/lk/cpfile`。
具体过称为:
~~~
[root@XX lk]# scp -r /root/lk root@43.224.34.73:/home/lk/cpfile
root@43.224.34.73's password:
k2.sql 100% 0 0.0KB/s 00:00
k3.sql 100% 0 0.0KB/s 00:00
.bash_profile 100% 193 0.2KB/s 00:00
.bash_logout 100% 18 0.0KB/s 00:00
.bash_history 100% 32 0.0KB/s 00:00
k.zip 100% 176 0.2KB/s 00:00
.bashrc 100% 231 0.2KB/s 00:00
[root@XX lk]#
~~~
scp在夸机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了[ssh免密码登录](http://www.cnblogs.com/likui360/p/6012035.html),那在使用scp的时候密码都不用输入。
1.命令格式:
`scp \[参数\] \[原路径\] \[目标路径\]`
2.命令功能:
`scp`是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
3.命令参数:
`-1` 强制scp命令使用协议ssh1
`-2` 强制scp命令使用协议ssh2
`-4` 强制scp命令只使用IPv4寻址
`-6` 强制scp命令只使用IPv6寻址
`-B` 使用批处理模式(传输过程中不询问传输口令或短语)
`-C` 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
`-p` 保留原文件的修改时间,访问时间和访问权限。
`-q` 不显示传输进度条。
`-r` 递归复制整个目录。
`-v` 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
`-c cipher` 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
`-F ssh_config` 指定一个替代的ssh配置文件,此参数直接传递给ssh。
`-i identity_file` 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
`-l limit` 限定用户所能使用的带宽,以Kbit/s为单位。
`-o ssh_option` 如果习惯于使用ssh\_config(5)中的参数传递方式,
`-P port` 注意是大写的P, port是指定数据传输用到的端口号
`-S program` 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
## 3 文件内容查看
### 3.1 直接查看文件内容
#### 3.1.1 `cat`:在屏幕上正序显示文件所有内容
~~~Linux
# cat [-AbEnTv] fileName
~~~
#### 3.1.2 `tac`:在屏幕上倒序显示文件所有内容
~~~Linux
# tac fileName
~~~
#### 3.1.3 `nl`:在屏幕上正序显示文件所有内容,添加行号
~~~Linux
# nl [-bnw] fileName
~~~
### 3.2 翻页查看文件内容
#### 3.2.1 `more`:往后一页一页翻看
~~~Linux
# more fileName
~~~
在more这个程序的运行过程中,有几个按键可以按
* `空格键(Space)`:向下翻一页
* `Enter`:向下滚动一行
* `/字符串`:在当前显示的内容中,向下查询"字符串"这个关键字
* `n`:重复前一个查询
* `:f`:立刻显示出文件名以及目前显示的行数
* `q`:立刻离开more,不再显示该文件内容
* `b`或`[ctrl]-b`:往回翻页,不过这操作只对文件有用,对管道无用。
#### 3.2.2 `less`:往前、后一页一页翻看
~~~Linux
# less fileName
~~~
同样,在less这个程序的运行过程中,也有几个按键可以按
* `空格键(Space)`或`[PageDown]`:向下翻一页
* `[PageUp]`:向上翻一页
* `/字符串`:向下查询"字符串"这个关键字
* `?字符串`:向上查询"字符串"这个关键字
* `n`:重复前一个查询(与`/`或`?`有关)
* `N`:反向重复前一个查询(与`/`或`?`有关)
* `q`:立刻离开less,不再显示该文件内容
### 3.3 简单选取文件内容
#### 3.3.1 `head`:取出前面几行
~~~Linux
# head [-n number] fileName
~~~
默认显示头10行。
#### 3.3.2 `tail`:取出后面几行
~~~Linux
# tail [-n number] fileName
~~~
默认显示尾10行。
### 3.4 `od`:显示非纯文本文件
~~~Linux
# od [-t TYPE] fileName
~~~
TYPE的类型:
* `a`:利用默认的字符来输出
* `c`:使用 ASCII字符来输出
* `d[size]`:利用十进制(decimal)来输出数据,每个整数占用size bytes
* `f[size]`:利用浮点数(floating)来输出数据,每个数占用 size bytes
* `o[size]`:利用八进制(octa1)来输出数据,每个整数占用size bytes
* `x[size]`:利用十六进制(hexadecimal)来输出数据,每个整效点用size bytes.
### 3.5 `touch`: 创建新文件或修改文件时间
~~~Linux
# touch [-acdmt] fileName
~~~
参数:
* `-a`:仅修改访问时间
* `-c`:仅修改文件的时间,若该文件不存在则不创建新文件
* `-d`:后面可以接欲修改的日期而不用目前的日期,也可以便用--date="日期或时间"
* `-m`:仅修改 mtime
* `-t`:后面可以接欲修改的时间而不用目前的时间,格式为\[YYMMDDhhmm].
每个文件在linux下面都会记录许多的时间参数,有三个主要的变动时间
* modification time ( mtime)
当文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。
* status time ( ctime)
当该文件的“状态”(status)改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。
* access time (atime)
当"该文件的内容被取用"时就会更新这个读取时间(access)。举例来说,我们使用cat去读取/etc/man.config,就会更新该文件的atime了。
### 3.6 `umask`: 新建文件/目录时的默认去除权限值
在默认权限的属性上,目录与文件是不一样的。`x`的权限对于目录时很重要的,但一般文件创建时是不应该有的(一般文件通常用于数据的记录,只需要`r`和`w`)。所以默认情况下:
* `文件`:默认权限为`-rw-rw-rw-`,数值为“666”
* `目录`:默认权限为`drwxrwxrwx`,数值为“777”
1. 查询`umask`的值,
:-: ![root的`umask`值](https://box.kancloud.cn/4d6e76761c1c7ea25226b7c8f9537ccc_269x61.png)
:-: root的`umask`值
若root新建文件/目录的权限如下:
* 新建`文件`权限:文件默认权限(`-rw-rw-rw-`)-`umask`值(-----w--w-)==>`-rw-r--r--`
* 新建`目录`权限:目录默认权限(`drwxrwxrwx`)-`umask`值(-----w--w-)==>`drwxr-xr-x`
2. 设置`umask`的值
:-: ![root设置`umask`值](https://box.kancloud.cn/30e5048a1b2894af7822930b1c6ae1c1_269x81.png)
:-: root设置`umask`值
### 3.7 `chattr` /`lsattr` : 文件隐藏属性的设置/显示
### 3.8 `SUID` /`SGID` : 二进制文件的特殊权限
### 3.9 `SBIT`: 目录的特殊权限
### 3.9 `file`:查看文件类型
如果想要知道某个文件的基本数据,例如是属于ASCII或者是data文件,或者是binary,其中有没有使用到动态函数库(share library)等等的信息,就可以利用这个命令来查看。
### 3.10 命令与文件的查询
#### 3.10.1 `which`:寻找执行文件
`which`:寻找“执行文件”
`which`查找的范围是当前用户的PATH变量内所规范的目录。
#### 3.10.2 `whereis`:寻找特定文件
#### 3.10.3 `locate`:寻找特定文件
#### 3.10.4 `find`:寻找特定文件