ubuntu 终端
这是一系列基础命令的集合,我会面向初学者从使用角度介绍,看完这些以后你能够在Linux终端下完成大部分之前需要鼠标和键盘才能完成的操作。
今天是第一篇,Linux下的普通文件和目录的操作,最简单的用法,不会介绍花里胡哨的命令给初学者。
- 一切皆文件
- 文件系统结构
- 主目录
- 文件和目录
- 文件创建和删除
- 目录创建和删除
- 复制和剪切
一切皆文件
Linux中一切接文件,算是早期的一句名言了。事实也差不多,就连硬件设备在Linux中也是以一个文件来实现的,因此Linux下的文件类型也是非常有门道的(有门道不代表类型多),具体文件类型我们后面文章会整理。
文件系统结构
我们这里主要介绍跟文件系统的目录结构,这个非常关键,因为用终端在文件系统的路径中频繁切换,如果你对整个文件系统目录结构或者自己的位置不熟悉很容易出现迷路的情况。
想象成你正在爬树找果子,如果你不知道这棵树有多大,有多少树枝可以承受你的重量,非常容易出问题,轻则找不到你要的果子,重则连着树枝一起摔下来。
这里用个比喻是真的希望你能重视这个,同时你真的可以以一颗树的模型来理解文件系统。
根目录
根目录是Linux工作必须的文件树型结构,在docker中就是以不同的根文件系统(rootfs)来区分不同的虚拟机的。
在Linux中根目录用“/”来表示,cd / 就可以到达根目录。
ubuntu@ubuntu-virtual-machine:~$ cd / ubuntu@ubuntu-virtual-machine:/$ ls bin boot cdrom dev etc home lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var
没有人为修改情况下,根目录下面每个目录都有特殊的用途,可以了解一下:
目录 | 作用 |
/bin/ | 存放系统命令,普通用户和 root 用户都可以执行 |
/boot/ | 系统启动目录,保存与系统启动相关的文件 |
/dev/ | 设备文件 |
/etc/ | 配置文件保存位置,内核和Linux系统功能的大部分配置信息都在这里,包括一些第三方软件 |
/home/ | 普通用户的主目录(也称为家目录),如用户 ubuntu的主目录就是 /home/ubuntu |
/lib/ | 系统调用的函数库保存位置 |
/media/ | 媒体设备挂载目录 |
/mnt/ | 挂载目录,系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 |
/misc/ | 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。 |
/opt/ | 一般第三方安装的软件保存位置 |
/root/ | root 的主目录 |
/sbin/ | 系统环境设置相关的命令 |
/srv/ | 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 |
/tmp/ | 临时目录 |
/proc/ | 虚拟文件系统,运行过程中很多临时文件保存在这里 |
/lost+found/ | /lost+found 就是根分区的备份恢复目录 |
其实我写完这个表格以后在考虑要不要删除,还是留着吧。
每个文件夹的功能初学时没必要全部了解,关键是位置。
主目录
在Linux下,每一个用户都有属于自己的主目录,大多数情况被称为家目录,前面表格中有描述。
普通用户的家目录一般在/home 目录下面,可以用~快速指代当前用户的家目录。
root用户的家目录是 /root。
ubuntu@ubuntu-virtual-machine:/$ cd ~ ubuntu@ubuntu-virtual-machine:~$ pwd /home/ubuntu ubuntu@ubuntu-virtual-machine:~$ ls -l 总用量 44 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 7 21:04 公共的 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 8 22:05 模板 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 7 21:04 视频 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 10 23:08 图片 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 7 21:04 文档 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 9 18:42 下载 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 7 21:04 音乐 drwxr-xr-x 2 ubuntu ubuntu 4096 4月 10 22:58 桌面
Linux希望所有用户都能快速回家,所以cd 命令不带任何参数就是回到自己的家目录,下面这三条命令都是一个效果:
ubuntu@ubuntu-virtual-machine:~$ cd ubuntu@ubuntu-virtual-machine:~$ cd ~ ubuntu@ubuntu-virtual-machine:~$ cd /home/ubuntu
每个用户的家目录下一般有一些固定资源文件夹,比如文档、图片、音乐、桌面等,其中桌面文件夹就真的是指向图形界面的桌面的,如果你在这个文件夹创建一个文本文件那么就会在桌面也显示这个文本文件;一般浏览器或者一些下载器下载的文件会自动保存在下载目录里,其他目录也都是可以使用的。
文件和目录
文件和目录当然是不同的东西,在Linux下也是这样。
文件用来存储具体的内容,必须存储二进制数据、ASCII文本等。
目录用来存放文件和子目录。
通过ls -l可以查看目录下的文件信息,包括文件类型,现在你只需要区分目录和文件就可以了:
ubuntu@ubuntu-virtual-machine:~$ ls -l 总用量 44 drwxrwxr-x 2 ubuntu ubuntu 4096 4月 10 22:44 1 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 22:51 t.txt
目录显示的文件信息第一个字符是‘d’,普通文件是‘-’(还有其他类型后面再讲)。
有个特殊的目录需要了解:
除了根目录,在任何一个目录下执行ll 或者 ls -al会看到几个特殊的目录
- 隐藏目录 .
- 当前目录 .
- 上一级目录 ..
看这个例子:
ubuntu@ubuntu-virtual-machine:~$ ll 总用量 108 drwxr-xr-x 21 ubuntu ubuntu 4096 4月 12 23:06 ./ drwxr-xr-x 3 root root 4096 4月 7 20:34 ../ -rw-r--r-- 1 ubuntu ubuntu 3771 4月 7 20:34 .bashrc
因此 cd .. 这个命令就代表到当前目录的上一级目录去,ls .其实就是列出当前目录的文件。
文件创建和删除
- touch命令创建一个空文件
ubuntu@ubuntu-virtual-machine:~$ touch 2.txt ubuntu@ubuntu-virtual-machine:~$ touch 3 ubuntu@ubuntu-virtual-machine:~$ ls -l -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 22:54 2.txt -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 22:55 3
- echo命令创建一个文本文件并写入数字123
ubuntu@ubuntu-virtual-machine:~$ echo 123 > 4.txt ubuntu@ubuntu-virtual-machine:~$ ls -l -rw-rw-r-- 1 ubuntu ubuntu 4 4月 12 22:57 4.txt ubuntu@ubuntu-virtual-machine:~$ cat 4.txt 123
- 创建一个空文件
ubuntu@ubuntu-virtual-machine:~$ > 6.txt ubuntu@ubuntu-virtual-machine:~$ ls -l -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:00 6.txt ubuntu@ubuntu-virtual-machine:~$ cat 6.txt
能创建文件的方式还有很多,touch和echo命令本身的作用不是用来创建文件的,创建文件只是一种用法,而 > 在Linux中成为定向输出符号,也不是专业创建文件的,他的用处还多。
- 删除文件
删除文件就相对统一一些,一般使用rm命令
ubuntu@ubuntu-virtual-machine:~$ ls 6.txt 6.txt ubuntu@ubuntu-virtual-machine:~$ rm 6.txt ubuntu@ubuntu-virtual-machine:~$ ls 6.txt ls: 无法访问 '6.txt': 没有那个文件或目录
目录创建和删除
- 创建目录
使用mkdir来创建目录
ubuntu@ubuntu-virtual-machine:~$ mkdir mydir ubuntu@ubuntu-virtual-machine:~$ ls -l mydir/ 总用量 0 ubuntu@ubuntu-virtual-machine:~$ mkdir mydir2/subdir2 mkdir: 无法创建目录 “mydir2/subdir2”: 没有那个文件或目录 ubuntu@ubuntu-virtual-machine:~$ ubuntu@ubuntu-virtual-machine:~$ mkdir mydir2/subdir2 -p ubuntu@ubuntu-virtual-machine:~$ ls -l mydir2/ 总用量 4 drwxrwxr-x 2 ubuntu ubuntu 4096 4月 12 23:16 subdir2 ubuntu@ubuntu-virtual-machine:~$
这里记住一个参数-p,当你需要创建多级目录,而前一级目录不存在的时候,可以使用-p参数,Linux会为你创建缺失的上一级目录。如果不加这个参数将会在没有的第一层目录时报错,显示“ 没有那个文件或目录”。
- 删除目录
使用rm命令来删除目录
ubuntu@ubuntu-virtual-machine:~$ rm -rvf mydir2/ 已删除目录 'mydir2/subdir2' 已删除目录 'mydir2/' ubuntu@ubuntu-virtual-machine:~$
这里需要记住三个常用参数;
-r 表示删除目录下所有子目录文件
-v 表示打印删除执行情况,初学者建议使用这个检查你有没有删错文件
-f 表示强制执行
复制和剪切
- 复制
使用cp命令复制文件和目录
ubuntu@ubuntu-virtual-machine:~$ ls -l mydir 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:26 8.txt -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:25 9.txt ubuntu@ubuntu-virtual-machine:~$ ls -l mydir2 总用量 0 ubuntu@ubuntu-virtual-machine:~$ cp mydir mydir2/ # 将8.txt复制一份到mydir2 ubuntu@ubuntu-virtual-machine:~$ ls -l mydir2 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:26 8.txt ubuntu@ubuntu-virtual-machine:~$ cp -r mydir mydir3 # 将mydir目录复制一份命名为mydir3 ubuntu@ubuntu-virtual-machine:~$ ls -l mydir3 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 8.txt -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 9.txt
目录复制时cp命令后面紧跟-r参数。
cp 后面跟两个路径,第一个是被拷贝对象,第二个是拷贝出来的对象。
- 剪切
ubuntu@ubuntu-virtual-machine:~$ ls -l mydir3/ 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 8.txt -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 9.txt ubuntu@ubuntu-virtual-machine:~$ ls -l mydir2/ 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:26 8.txt ubuntu@ubuntu-virtual-machine:~$ mv mydir3 mydir2/ #将mydir3下的9.txt剪切到mydir2目录下 ubuntu@ubuntu-virtual-machine:~$ ls -l mydir2/ 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:26 8.txt -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 9.txt ubuntu@ubuntu-virtual-machine:~$ ls -l mydir3/ 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 8.txt ubuntu@ubuntu-virtual-machine:~$ mv mydir3/ mydir4/ #将mydir3 剪切到mydir4 ubuntu@ubuntu-virtual-machine:~$ ls -l mydir3/ ls: 无法访问 'mydir3/': 没有那个文件或目录 ubuntu@ubuntu-virtual-machine:~$ ls -l mydir4/ 总用量 0 -rw-rw-r-- 1 ubuntu ubuntu 0 4月 12 23:28 8.txt
mv命令一般除了用来剪切文件和目录外,还用来对文件和目录进行更名。比如前面的例子其实就将mydir3更名为了mydir4。