核心思想
目录树结构(directory tree)
Linux 系统是基于目录树结构的,这是它的核心思想。目录,即文件夹。Linux 系统相当于一个文件夹,Linux 系统的所有数据要么对应一个文件夹,要么就是一个文件。比如,你新建一个用户,其实就是新建了一个文件夹。一个用户对应一个文件夹。目录树结构:
上图中 长方形是文件夹, 波浪形是文件,根目录是 / 。这个 / 很巧妙,在 macOS 中,假设你下载文件 test.md 到 /Users/username/Desktop/,那么文件会下载到桌面,最前面这个 / 就是根目录。如果你写成 Users/username/Desktop/,那么文件就会下载到currentDerectory/Users/username/Desktop/下。
Linux 系统使用的是目录树架构,但其实数据是存放在 磁盘分区 当中的,那么问题来了:目录树和磁盘分区是神马关系?这个时候就牵扯到一个叫「挂载(mount)」的概念了。
目录树和磁盘分区的关系
挂载其实就是建立目录树和磁盘分区之间的关系。目录只是一个标识,叫什么我们可以自定义,一个磁盘分区对应一个目录。
我们经常用 U 盘,假设一个 U 盘是一个磁盘分区,我们把一个假设叫 partition1 的 U 盘插到 Windows 电脑上,可能电脑就多了个 F 盘,那么目录就是 F ,相当于将目录 F 挂载到了 U 盘上,访问 F 就可以访问 partition1 里的内容。如果再插一个假设叫 partition2 的 U 盘,系统应该就会多了一个 H 盘,相当于目录 H 就挂载到了 partition2 上。假设 F 盘下将会有一个存放很多视频的 moive 文件夹,我们可以直接将 movie 文件夹挂载到 partition2 上,这样 movie 里的视频就存到 partition2 里面了,就不占用 F 盘的空间了。
在 Linux 系统中道理也是一样的,比如在搭建 Linux 环境的时候,可以将 /home 单独挂载到一个磁盘分区上。
常用命令
命令
含义
选项
示例
--help
ls --help
man
manual
man man
ls
list
-a, --all
-h, --human-readable
-l, --long listing format
ls -ah:显示目录下所有文件夹,包括隐藏文件夹
ls -l == ll
cd
change directory
cd 相当于 cd ~,~ 当前用户根目录
cd / 根目录
cd .. 上一层
cd ../.. 上两层
cd ../ 上一层里面某个目录
cd / 当前目录下的某个目录下的某个目录
rm
remove
-d, --direcorty
-r, --recursive
-f, --force
rm
rm -d
rm -rf
rm *.pdf
cat
concatenate
cat
mkdir
make direcotry
mkdir
touch
create a file
touch
mv
move
move oldname name
move /
cp
copy
cp test test.bak
zip
-r, --recurse
zip -r test.zip test/
unzip
unzip test.zip
tar
tape or archive
-f, --file=ARCHIVE
-c, --create
-t, --list
-v, --verbose
-x, --extract
-z, --gzip, --gunzip, --ungzip
tar -cf archive.tar foo bar:将文件 foo 和 bar 创建为 archive.tar
tar -tvf archive.tar: 详细列出 archive.tar 中所有文件
tar -xf archive.tar:从 archive.tar 中提取所有文件
tar xvzf redis-stable.tar.gz:从 redis-stable.tar.gz 中详细提取所有文件
pwd
print working directory
pwd
sh
run a script
sh test.sh 相当于 ./test.sh
start
start notepad++
start Typora
vi
visual
vi
vim
vi improved
vim
vi/vim 的三种模式
vi 和 vim 都是修改 的命令,后者为前者的增强版,输入此命令后,会有三种模式修改 文件。
一般指令模式(command mode):你看不见你输入的内容
编辑模式(insert mode):直接修改文件内容
指令列命令模式(command-line mode):最下面一行,: 或/ 或 ? 开头
以下指令详细含义请看 vim 程式编辑器
常用指令
一般指令模式:
指令
含义
i
当前位置进入 insert 模式
I
第一个字符
a
下一个字符
A
末尾
o
下一列开头
O
上一列开头
r
Replace 模式,取代一次
R
一直取代
u
撤销
Ctrl + r
取消撤销,相当于 U?
0
行首
end / $
行尾
G
最后一列
gg
1 G,第一列
n
向下移动 n 列
Ctrl + f
fall,向下一页
Ctrl + b
before,向上一页
x
删除
X
删除前一个
dd
删除当前列
d$
删除从当前位置到列尾
yy
复制当前列
编辑模式:
指令
含义
Esc
退出编辑模式,进入一般指令模式
指令列命令模式:
指令
含义
:w
保存
:w!
强制保证
:q
退出
:q!
强制退出
:wq
退出并保存,相当于 ZZ
/word
查找关键字
:set nu
显示行号
:1,$s/word1/word2/gc
word1 替换为 word2
/word 查找时,可使用 n 跳转到下一个查找结果,N 跳转到上一个查找结果
脚本语法
遍历。示例:一个打印出当前路径下所有文件夹的目录的脚本,名叫 traverse.sh ,内容如下:
#!/bin/bash
for i in $(ls $(PWD))
do
if [ -d $i ];then
cd $i
pwd
cd ..
fi # if 反向,代表 if 结束
done
执行脚本: sh traverse.sh
其他常用命令
## 用户
passwd # 修改用户的密码
whoami # 查看当前用户名
## 日志
less # 查看最新日志
tail -f # 查看实时日志
grep -5 # 查看日志 关键字 key 上下五行
grep -5 # 输出日志 关键字 key 上下五行的内容到 中
## 进程
ps -ef|grep WeChat # 查看进程名叫 WeChat 的信息,最开头的数字为 id
kill -9 6002(最开头的数字) # 杀死进程 id 为 6002 的进程
sed -i's/word1/werd2/g' # 替换 的 word1 为 word2(sed -- stream editor)
xclip -sel c < # 不打开 的情况下复制其内容
df -h # 查看磁盘分区和目录信息(df -- display free disk space)
echo $PATH# 输出 $PATH 的内容
References