一、文件和磁盘
根目录
文件夹 | 作用 |
---|---|
bin | 二进制文件,保存了能直接执行的命令。但通常是一个链接,通常指向/usr/bin |
sbin | (system) 系统级二进制命令,通常只能root用户才能使用得命令。通常是一个指向/usr/sbin 的链接 |
lib | 库目录,存放库文件。等同于Windows系统下的System32 文件夹。部分程序需要的共享库也可能放在这个文件夹。通常是一个指向/usr/lib 的链接 |
lib64 | 和64位相关的特殊的库文件。通常是一个指向/usr/lib64 的链接 |
usr | 所有应用程序以及所有所需的文件和数据。放置了所有的用户级别的文件 |
boot | 启动引导分区 |
dev | device的简称。每个硬件设备都有对应的文件映射,例如cpu对应了文件夹cpu |
etc | 系统管理所使用的配置文件。例如安装数据库后对应的配置文件放在这里 |
home | 普通用户的主目录 |
root | root用户的主目录 |
opt | optional的简称,给第三方安装包预留的位置 |
media | 可移动媒体设备,例如U盘、光驱。通常会把外接设备挂在在这个位置 |
mnt | 和media 作用相同 |
proc | process的简称,进程目录,保存了硬件和当前进程的信息 |
run | 系统运行以来的实时信息,重启后就会清空 |
srv | 保存系统的服务 |
sys | 系统硬件信息的相关文件 |
tmp | temporary的缩写,保存临时文件,可以删除 |
var | variable的缩写,通常保存日志等经常修改的文件 |
/usr/local | 针对用户的文件,其中也包含了”bin”、库等文件 |
3. 目录操作命令
pwd
显示当前工作目录绝对路径
pwd -P
: 显示的是物理路径(例如软链接指向的路径)
cd
“change directory”的缩写
cd ..
: 到上层目录;cd .
: 从当前目录查找;cd /
: 从根目录查找;cd -
: 返回上次的文件夹;cd ~
: 返回当前用户的home文件夹cd -P directory
: 切换到实际的物理路径(例如软链接指向的路径)
ls
“list”的缩写
选项 | 描述 |
---|---|
-a |
显示所有文件和文件夹,包括隐藏文件夹(以. 开头的文件或文件夹)、上级目录对象、当前目录对象 |
-l |
“l”是“long”的缩写,列出文件的详细信息。也可用命令ll 。 |
-al |
上述“a”和“l”的组合 |
-h |
显示文件大小的单位。结果的“total”只包含了本文件夹内的文件,不包含子文件夹和隐藏文件。 |
创建和删除文件夹
mkdir a b
: 在当前文件夹创建文件夹“a”和“b”mkdir /a
: 在根目录创建文件夹mkdir a a/b b/c
: 创建嵌套文件夹mkdir -p a/b/c
: 如果父文件夹不存在,则同时创建父文件夹rm a/b/c a/b a
: 嵌套删除文件夹-
rm -r a
: 嵌套删除文件夹 删除文件或文件夹 rm -r a
: 删除文件夹rm a
: 删除文件rm -f
: 强制删除,不再提示rm -v a
: 删除文件,显示具体执行过程
移动文件或文件夹
mv file path
: 把文件移动到指定目录mv file1 file2
: 移动并重命名。“file2”包含路径和文件名
cat
cat file
: catch的简写cat -n
: 显示所有行的行号
more
more file
: 按页显示文件=
: 显示当前行号b
: 向上翻页f
: 向下翻页:f
: 显示文件及行号
less
less file
: 根据显示需要加载内容,能更快打开大文件并显示- ` `: 空格为向下翻页
enter
: 回车到下一行b
: 向上翻页f
: 向下翻页=
: 显示详细信息G
: 到达文件末尾g
: 到达文件起始/keyword
: 跳转到关键字位置,按“n”向下查找,“N”向上查找?keyword
: 跳转到关键字位置,按“n”向上查找,“N”向下查找q
: 退出
head
head file
: 查看文件前10行head -n 5 file
: 查看文件前5行
tail
实时监控是针对具有某个索引的文件。使用vim编辑保存后的文件,其索引会发生变化,实际上已经变成了另外一个文件,而不是在原文件上修改。因此tail的输出不会发生变化,因为原来的索引对应的文件没变。而重定向则是在原文件上修改,索引对应的文件被修改,因此可以被tail追踪到。
命令 | 描述 |
---|---|
tail file |
查看文件后10行 |
tail -n 5 file |
查看文件后5行 |
tail -f file |
follow的缩写,实时追踪该文档的所有更新 |
echo
命令 | 描述 |
---|---|
echo |
覆盖 |
"hello world" |
输出字符串 |
\t |
制表符, horizontal tab |
\n |
换行 |
\" |
double quote |
-e |
支持反斜线控制的字符转换 |
\a |
alert (bell sound) |
\b |
backspace |
echo $variable |
查询变量 |
echo '==$a==' |
把“$a”视为字符串 |
echo "==$a==" |
把“$a”视为变量 |
-n |
prevent echo adds a newline at the end |
重定向到文件
命令 | 描述 |
---|---|
> |
覆盖 |
>> |
追加 |
ln 软链接
软链接有自己的数据块,存放了链接其它文件的路径,是一个单独的文件,有自己的inode。类似Windows的快捷方式。
用法:ln -s 原文件或目录 软链接名
: 在当前目录创建软链接。原文件的路径必须是绝对路径。也可以指定软链接的位置。
命令 | 描述 |
---|---|
rm -rf 软链接名 |
删除软链接 |
history
命令 | 描述 |
---|---|
history 10 |
显示最近的10条命令 |
!命令编号 |
重复执行相应的命令 |
history -c |
清空全部历史命令 |
rename
rename 's/slang_/sl_/' *.c # replace all "slang_" with "sl_"; find all files end with "*c"; if we omit "sl_", all "slang_" will be deleted.
rename 's/^parameter/value/' *.c # ^ means all files start with "parameter"
rename 's/(stri|stro)ng/bang/' *.c # replace all "string" and "strong" with "sl_"
rename 'y/a-z/A-Z/' *.prg # upper all character
rename 's/lifelog(\d{4})\.txt/$1.md/' *.txt # replace all "*lifelog*.txt"; "(\d{4})" means four characters after "lifelog" and will be store in "$1".
8. 压缩和解压
gzip/gunzip压缩
基本语法:gzip file
, 压缩为“*.gz”文件;gunzip file.gz
, 解压缩
特点:只能压缩文件;不保留原文件;多个文件会产生多个压缩包
zip/unzip
基本语法:zip 选项 文件或者目录
,压缩为“*.zip”文件;unzip 选项 file.zip
,解压文件;会保留原文件
install: apt install zip
选项 | 描述 |
---|---|
-r |
压缩文件夹 |
-d <目录> |
指定解压后文件的存放目录 |
使用示例
# 解压
unzip yaml-cpp-master.zip
# compress
zip -r yaml-cpp-master.zip yaml-cpp-master
tar
打包,不是压缩。
基本语法:tar 选项 XXX.tar.gz 要打包的内容
独立命令是指,在解压和压缩时必须要用到且只能用到其中一个。可选参数在解压和压缩时可以选择性使用。必需参数只有-f
,指定使用的文件名字,切记,这个参数是最后一个参数,后面只能接文件名。
选项 | 类型 | 描述 |
---|---|---|
-c |
独立命令 | 产生.tar打包文件 |
-C |
可选参数 | 解压到指定目录 |
-j |
可选参数 | bz2属性 |
-f |
必需参数 | 指定压缩后的文件名 |
-O |
可选参数 | 将文件解开到标准输出 |
-v |
可选参数 | 显示解压或压缩过程的详细信息 |
-x |
独立命令 | 解包.tar文件 |
-Z |
可选参数 | 有compress属性的 |
-z |
可选参数 | 打包同时用gzip压缩 |
使用示例如下
tar zxvf FileName.tar.gz # 解压
tar zcvf FileName.tar.gz DirName # 压缩
7z
一个解压缩的命令示例如下,会新建一个名为“file”的文件夹并把文件解压到这个文件夹。
7z x file.7z
如果解压带密码的压缩文件。命令示例如下。假设密码为“blue”。注意密码和 -p
参数之间无空格。
7z x file.7z -pblue
rar
选项 | 描述 |
---|---|
x |
在目标路径里创建一个名为“file”的文件夹,把解压后的文件放在该文件夹。 |
-e |
把解压后的文件放在当前目录 |
unrar x file.rar ./
9. 磁盘管理
执行命令sudo apt install tree
安装“tree”工具的命令,使用tree 路径
显示当前文件夹及子文件。
udisks2
是一个经常使用的磁盘工具,通过命令sudo apt install udisks2
安装
du
查看文件夹大小
选项 | 描述 |
---|---|
du |
“disk usage”的缩写。显示当前文件夹的子文件夹的大小。 |
-h |
“human readable”,显示MB、KB等单位,提高信息的可读性 |
-a |
递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块* 数 |
-c |
在输出末尾显示本文件夹的大小总和(系统默认设置) |
-s |
对每个Names参数只给出占用的数据块总数 |
--max-depth=n |
统计子目录的深度为n层, list recursively if not set |
-b |
以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位) |
-k |
以1024字节为单位列出磁盘空间使用情况 |
-l |
计算所有的文件大小,对硬链接文件,则计算多次 |
-x |
跳过在不同文件系统上的目录不予统计 |
一个使用示例
du -h --max-depth=0 # 查看所在文件夹的总大小
du -sh # 查看当前文件夹的大小
df
查看磁盘占用情况。
选项 | 描述 |
---|---|
df |
“disk free”的缩写,列出文件系统的磁盘占用量 |
-h |
|
--max-depth |
display the size of all subdirectories |
结果分析 | |
---|---|
/dev/sda1 | “dev”表示设备,“sda”表示磁盘设备的名称,“sda1”表示该磁盘的第一个分区。 |
tmpfs | 内存设备对应的文件,包括swap分区 |
/dev/shm | “shared memory”的缩写,默认为系统内存的一半 |
sda | SATA(热插拔,个人用户,容量大,便宜),SCSI(服务器) |
hda | IDE接口硬盘 |
vda | 虚拟化模拟硬盘 |
一个使用示例
df -hl # 查看磁盘剩余空间
df -h # 查看每个根路径的分区大小
free
选项 | 描述 |
---|---|
free |
显示内存使用情况 |
-h |
lsblk
选项 | 描述 |
---|---|
lsblk |
“block”的缩写,查看设备挂载情况 |
-f |
查看详细的设备挂载情况,显示文件系统信息 |
结果分析 | |
---|---|
UUID | 系统为分区创建的唯一标识符 |
sr0 | 光盘和光驱 |
fdisk
该命令必须在root用户权限下才能使用。
选项 | 描述 |
---|---|
fdisk -l |
查看磁盘分区情况 |
fdisk 硬盘设备名 |
对新增硬盘进行分区操作 |
-l |
显示所有硬盘的分区列表 |
mkfs -t 文件系统 指定分区
:“make file system”的缩写,格式化文件系统
挂/卸载
基本语法:mount -t 文件系统类型 -o 选项 分区或磁盘 挂载点
选项 | 描述 |
---|---|
-t vtstype |
通常不用指定文件系统的类型 |
-o options |
挂载方式,“loop”把文件当成硬盘分区,“ro”只读,“rw”读写 |
umount 设备名称
或者umount 挂载点
卸载设备,因为设备名称和挂载点是一一对应的。
磁盘自动挂载在文件/etc/fstab
中。“dump”为1每天定时备份,为0则不备份。“pass”为文件系统检查的优先级。命令fsck
会在开机后执行,用于检查磁盘,会先检查“pass”为1的磁盘,再检查“pass”为2的磁盘,“pass”为0表示不检查。开机启动挂载的设置也在这个文件。
以下为一个使用示例。
mkdir ~/data # 在 ~ 目录下创建一个 data 的目录
sudo mount /dev/sda1 ~/data # 并将新分区挂载到这里; sda1 不是固定的,要看自己的硬盘盘符; 硬盘中的文件放在文件夹 data 中
sudo udisksctl unmount -b /dev/sda1 # 取消挂载;sda1 是移动硬盘的一个分区的名称,第一个分区通常以`1`结尾,第二个及之后的以此类推;
sudo udisksctl power-off -b /dev/sda # 安全断电;sda 是移动硬盘这个设备的名称, the second one usually is sdb
如果需要在电脑开机时自动挂载硬盘,可以按照以下步骤
- 查看硬盘信息:
sudo blkid
- 编辑硬盘挂载文件
sudo gedit /etc/fstab
你可以在这个文件里添加想要自动挂载的硬盘,也可以更改硬盘默认的挂载位置。
smart
sudo apt-get install smartmontools # 安装工具
sudo smartctl -a /dev/sda1 # 查看磁盘smart信息
“gsmartcontrol”可以看做“smartmontools”的前端,提供了可视化的交互界面。
sudo apt install gsmartcontrol # 安装`smartctl`工具
sudo gsmartcontrol # 运行该工具
搜索查找
find
基本用法:find 搜索范围 选项
选项 | 示例 | 描述 |
---|---|---|
-name <查询方式> |
find . -name md* |
find a file by name (case-sensitive) |
user <用户名> |
find .. user Joe |
属于指定用户的所有文件 |
-size <文件大小> |
find / -size +10M |
大于10M的文件 |
-iname |
find a file by name (case-insensitive) | |
-type f |
find fromcommon files | |
-type d |
find from directories | |
-mtime -7 |
find files modified in the last 7 days |
以下为一个使用示例,查看当前文件夹中名为“gtsam”的文件。
find . -name "gtsam"
locate
利用事先建立的所有文件名及其路径的locate数据库。查询速度快,但可能会过时,因为该数据库默认每天更新一次。更新命令为updatedb
。
基本用法:locate file
;which locate
或whereis locate
查找该命令的位置
grep过滤查找
管道符|
表示将前一个命令的结果输出传递给后面的命令处理。
基本语法:grep 选项 查找内容 源文件
选项 | 描述 |
---|---|
-n |
显示匹配行及行号 |
</br>
基本语法:wc file
,“word count”的缩写,输出的结果依次为行数、单词数、字节数