核心思想

目录树结构(directory tree)

linux 系统是基于目录树结构的,这是它的核心思想。目录,即文件夹。linux 系统相当于一个文件夹,linux 系统的所有数据要么对应一个文件夹,要么就是一个文件。比如,你新建一个用户,其实就是新建了一个文件夹。一个用户对应一个文件夹。目录树结构:

脚本 echo fi_磁盘分区

上图中 长方形是文件夹, 波浪形是文件,根目录是 / 。这个 / 很巧妙,在 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 单独挂载到一个磁盘分区上。

脚本 echo fi_目录树_02

常用命令

命令

含义

选项

示例

--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):最下面一行,: 或/ 或 ? 开头

脚本 echo fi_磁盘分区_03

以下指令详细含义请看

常用指令

一般指令模式:

指令

含义

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