文件操作和用户
复制移动和删除
在Windows中我们可以通过快捷键 ctrl + c 复制,ctrl + v 粘贴,在 linux 中需要使用命令。
复制移动
cp
就是 copy 的意思。请看示例:
// 将 a.txt 复制一份,重命名为 b.txt
test11@pj-pc:~$ cp a.txt b.txt
test11@pj-pc:~$ ls
模板 桌面 a.txt b.txt dir1
// 将 a.txt 复制到 dir1 目录中
test11@pj-pc:~$ cp a.txt dir1
test11@pj-pc:~$ ls dir1
a.txt
// 将 dir1/a.txt 复制到当前目录
test11@pj-pc:~$ cp dir1/a.txt .
如果当前目录有同名的文件,需要询问是否覆盖,可以使用参数 -i
:
// -i 会询问是否覆盖
test11@pj-pc:~$ cp -i dir1/a.txt .
cp:是否覆盖'./a.txt'? n
test11@pj-pc:~$ rm a.txt
// 没有同名文件,则无需询问
test11@pj-pc:~$ cp -i dir1/a.txt .
test11@pj-pc:~$
文件夹的拷贝需要使用参数 -r
,否则会提示错误:
// 报错:缺少 -r
test11@pj-pc:~$ cp dir1 dir2
cp: 未指定 -r;略过目录'dir1'
// 拷贝目录
test11@pj-pc:~$ cp -r dir1 dir2
test11@pj-pc:~$ ls
模板 桌面 dir1 dir2
拷贝文件比较清晰,而拷贝文件夹就没那么好理解,我们分几种情况详细介绍:
// 将 dir1 文件夹拷贝到 dir2目录中
test11@pj-pc:~/dir$ cp -r dir1 dir2
test11@pj-pc:~/dir$ ls dir2
c.txt dir1
test11@pj-pc:~/dir$
// tree 可通过包管理器安装
test11@pj-pc:~/dir$ tree
.
├── a.txt
├── dir1
│ └── b.txt
└── dir2
└── c.txt
2 directories, 3 files
// 将dir1文件夹中的内容拷贝到 dir2 中
test11@pj-pc:~/dir$ cp dir1/* dir2
test11@pj-pc:~/dir$ ls dir2
b.txt c.txt
将 dir1/a.txt
拷贝到当前目录,以下两种写法一个有提示,一个没有提示,是什么原因?
test11@pj-pc:~/dir$ tree
.
├── a.txt
├── dir1
│ ├── a.txt
│ └── b.txt
└── dir2
├── b.txt
└── c.txt
2 directories, 5 files
// 没有提示
test11@pj-pc:~/dir$ \cp dir1/a.txt .
// 有提示
test11@pj-pc:~/dir$ cp dir1/a.txt .
cp:是否覆盖'./a.txt'? y
通过 alias
命令我们得知 cp 其实等同于 cp -i
,所以有提示,而 \cp
表示不使用别名,表示纯 cp 命令。
test11@pj-pc:~/dir$ alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
Tip:alias 显示当前定义的别名。创建一个新的别名 alias ll='ls -l'
,删除一个别名 unalias ll
删除
删除文件和目录需要使用 rm
命令。
文件直接即可删除:
test11@pj-pc:~/dir$ ls
a1.txt a2.txt a3.txt dir1 dir2
// 删除文件
test11@pj-pc:~/dir$ rm a1.txt
// -i 删除前确认
test11@pj-pc:~/dir$ rm -i a2.txt
rm:是否删除普通空文件 'a2.txt'?n
test11@pj-pc:~/dir$
删除文件夹需要使用 -r
参数,否则报错:
// 报错:需要使用 -r
test11@pj-pc:~/dir$ rm dir1
rm: 无法删除'dir1': 是一个目录
// 删除目录
test11@pj-pc:~/dir$ rm -r dir1
test11@pj-pc:~/dir$ ls
a2.txt a3.txt dir2
// 删除前确认
test11@pj-pc:~/dir$ rm -ir dir2
rm:是否进入目录'dir2'? y
rm:是否删除普通空文件 'dir2/c.txt'?y
rm:是否删除普通空文件 'dir2/b.txt'?y
rm:是否删除目录 'dir2'?y
test11@pj-pc:~/dir$ ls
a2.txt a3.txt
Tip: 一名合格的运维工程师在修改文件之前需要对源文件(文件夹)进行备份
。否则一旦改错,又改不回去,就很麻烦。
查找文件和隐藏文件
比如知道文件或文件夹的名字,但忘记在哪里,可以使用 find
命令。
// 在当前目录中查找名字是 dir2 的文件或名录
test11@pj-pc:~/dir$ find . -name dir2
./dir1/dir2
./dir2
ls 显示的是非隐藏文件(文件夹),如果需要查看隐藏文件
(文件夹),可以增加参数 -a
:
test11@pj-pc:~/dir$ ls
a3.txt dir1
// 显示隐藏文件和隐藏目录
test11@pj-pc:~/dir$ ls -a
// . 当前目录
// .. 上一层目录
. .. .a2.txt a3.txt dir1 .dir2
隐藏文件(文件夹)以点(.
)开头,也是一种保护机制。
隐藏文件查看方式和普通文件相同:
test11@pj-pc:~/dir$ cat .a2.txt
apple
如果需要将隐藏文件或隐藏目录转成非隐藏,重命名(删除.)即可。
test11@pj-pc:~/dir$ mv .a2.txt a2.txt
test11@pj-pc:~/dir$ mv .dir2 dir2
// a2.txt 和 dir2 不在隐藏
test11@pj-pc:~/dir$ ls
a2.txt a3.txt dir1 dir2
一切皆文件
我们现在一直围绕着文件学习 linux 命令,为什么总是围绕文件?因为 Linux 中一切皆文件。
笔者的 linux 有一块磁盘 /dev/sda
931G。
/dev/sda
是一个文件,用它来表示硬盘。
// fdisk -l 查看本地磁盘信息
pj@pj-pc:/home/test11/dir$ sudo fdisk -l
Disk /dev/sda:931.53 GiB,1000204886016 字节,1953525168 个扇区
Disk model: WDC WD10EZEX-75W
单元:扇区 / 1 * 512 = 512 字节
...
这个文件和其他文件一样,也有自己的属性:
pj@pj-pc:/home/test11/dir$ ls -l /dev/sda
brw-rw