linux学习笔记
Linux 发行版本
Debian
包管理工具推荐 | 应用场景 |
---|---|
Debian | any platform |
Red Hat Enterprise Linux
包管理工具推荐 | 应用场景 |
---|---|
RPM | serverOS |
Ubuntu
包管理工具推荐 | 应用场景 |
---|---|
Debian | any platform |
Fedora
包管理工具推荐 | 应用场景 |
---|---|
RPM | Laptop&Desktop |
Linux Mint
包管理工具推荐 | 应用场景 |
---|---|
Debian | Laptop&Desktop |
Gentoo
包管理工具推荐 | 应用场景 |
---|---|
Portage | Laptop&Desktop |
Arch Linux
包管理工具推荐 | 应用场景 |
---|---|
Pacman | Laptop&Desktop&Raspberry Pi |
openSUSE
包管理工具推荐 | 应用场景 |
---|---|
RPM | Laptop&Desktop |
系统目录结构
名称 | 含义 |
---|---|
/ | 根目录 |
boot | 存放启动 linux 核心文件,包含镜像文件和连接文件 |
dev | Device 的缩写,存放 linux 外部设备 |
etc | Etcetera 的缩写,存放系统管理的配置文件 |
bin | Binaries 的缩写,存放常用命令 |
var | variable 的缩写,存放日志文件等不断扩充和修改的文件 |
usr | unix shared resources 的缩写,存放应用程序和文件,类似于 windows 的 program files |
root | 超级权限用户的主目录 |
home | 用户的主目录 |
media | linux 将 u 盘、光驱自动挂载到该目录下 |
proc | Processes 的缩写,是系统内存的映射 |
sbin | 存放系统管理员使用的系统管理程序 |
tmp | temporary 缩写,存放临时文件 |
命令行
The Shell
是 linux 系统的命令解释器,通常打开 terminal 后,操作系统会将 terminal 和 shell 进行关联,在 terminal 中输入命令后,shell 进行解释
大部分 Linux 默认的 shell 是 Bash,常见的 shell 还有 ksh, zsh, tsch
#用户名@主机名:当前目录
kni@knitz:/home/kni $
$ 并不用输入,仅用于标识在shell中的代码
让我们开始我们的第一步吧
$ echo Hello World
PWD(显示工作目录)
在 Linux 系统中,所有东西都是文件
$ pwd
cd(更改目录)
绝对路径:相对于/root 的目录 $ cd /home/kni/music
相对路径:相对于当前所在目录下的文件 $ cd c-pop
同时,还有一些符号可以更容易地切换目录
$ cd .
#你所在的目录
$ cd ..
#父级目录
$ cd ~
#主页目录,等同于/home/kni
$ cd -
#上一个目录,会到达你之前在的目录
mv(移动文件)
格式:
mv xx yy # 将xx文件移动到yy,xx和yy均可为路径(绝对路径/相对路径);用此命令可以实现重命名
cp(复制文件)
格式:
cp xx yy # 将xx文件复制到yy,和mv一样.xx和yy均可为路径
ls(列出目录)
展示目录下的内容
$ ls
#展示当前所在目录的内容
$ ls -a
#展示当前目录下所有的内容(包括.开头的隐藏内容)
$ ls -l
#展示当前目录下所有内容的详细信息(包括文件权限、链接数、创建者名及所属组、文件大小、最后修改时间和文件名/目录名)
$ touch ok
#可以更新文件修改时间(已有的文件),也可以创建新的文件(未有的文件)
chmod
change mod 的缩写,是 linux 控制用户对文件的权限的命令 文件调用的权限分为三级:文件所有者(owner),用户组(group),其他用户(other users)
chmod
文本编辑器*
主流使用的文本编辑器有 vim/emacs
ssh
格式:
ssh user_name@hostname # hostname可以是ip地址也可以是域名
或
ssh user_name@hostname -p 22 # 登录服务器的 22 端口
配置文件
用mkdir
创建~/.ssh/config
,配置文件中不能写:
config 内输入:
Host myserver1
Hostname
User
Port(22) # port 默认为22
Host myserver2
Hostname
User
密钥登陆
创建密钥:
ssh-keygen
执行结束后,~/.ssh
中会多两个文件:
id_rsa
:私钥id_rsa.pub
:公钥
将公钥传给服务器后,可以免密登录
复制到服务器的~/.ssh/authorized_keys
文件里即可
也可用如下命令一键添加公钥:
ssh-copy-id myserver1 # myserver1 为前面配置的Host后的名称
执行命令
格式:
ssh user@hostname command
scp
基本用法
格式:
scp source destination
将source
路径下的文件复制到destination
中
一次性复制多个文件:
scp source1 source2 destination
复制文件夹:
scp -r ~/tmp myserver:/home/acs
或
scp -r ~/tmp myserver:homework/ # 将本地的tmp文件夹复制到`myserver`服务器中的`~/homework`文件夹中
或
scp -r myserver:homework . # 将`myserver`服务器中的`~/homework/`文件夹复制到本地当前路径下
使用scp
配置其他服务器的 vim 和 tmux:
scp ~/.vimrc ~/.tmux.conf myserver:
管道
类似于 文件重定向,将前一个命令的stdout
输入给下个命令的stdin
要点:
- 管道命令仅处理
stdout
,忽略stderr
- 管道右边的命令必须能接受
stdin
- 多个管道可以串联
例子:
find . -name "*.py" | xargs cat | wc -l
/* 第一段找当前目录下".py"类型的文件;第二段将stdin转为一行,以空格分割,并用cat;第三段统计总行数
环境变量
Linux 系统中会用很多环境变量来记录配置信息 环境变量类似于全局变量,可以被各个进程访问到,通过修改环境变量来方便的修改系统配置。
查看
通过以下命令来查看所有的环境变量:
env # 显示当前用户变量
set # 显示档期那shell的变量,包括当前用户变量
export # 显示当前导出成用户变量的shell变量
输出某个环境变量的值:
echo $path
修改
参考[[shell入门#变量]]
为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到~/.bashrc
文件中
修改完~/.bashrc
文件后,记得执行source ~/.bashrc
如果使用的不是 bash 可以将.bashrc
换成相应的 shell 的配置文件
常见环境变量
HOME
:用户的家目录PATH
:可执行文件(命令)的存储路径.路径与路径之间用:
分隔.当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行.下列所有存储路径的环境变量,均采用从左到右的优先顺序.LD_LIBRARY_PATH
:用于指定动态链接库(.so 文件)的路径,其内容是以冒号分割的路径列表C_INCLUDE_PATH
:c 语言的头文件路径,内容时以冒号分隔的路径列表CPLUS_INCLUDE_PATH
:CPP 的头文件路径PYTHONPATH
:python 导入包的路径JAVE_HOME
:jdk 的安装目录CLASSPATH
:存放 java 导入类的路径
常用命令
系统状况
top
:查看所有进程的信息(Linux 的任务管理器)
- 打开后,输入 M:按使用内存排序
- 打开后,输入 P:按使用 CPU 排序
- 打开后,输入 q:退出
-
df -h
:查看硬盘使用情况 -
free -h
:查看内存使用情况 -
du -sh
:查看当前目录占用的硬盘空间 -
ps aux
:查看所有进程 -
kill -9 pid
:杀死编号为 pid 的进程
- 传递某个具体的信号:kill -s SIGTERM pid
netstat -nt
:查看所有网络连接w
:列出当前登陆的用户ping baidu.com
:检查是否连网
文件权限
chmod
:修改文件权限
- chmod +x xxx:给 xxx 添加可执行权限
- chmod -x xxx:去掉 xxx 的可执行权限
- chmod 777 xxx:将 xxx 的权限改成 777
- chmod 777 xxx -R:递归修改整个文件夹的权限
文件检索
find /path/to/directory/ -name '*.py'
:搜索某个文件路径下的所有*.py 文件grep xxx
:从 stdin 中读入若干行数据,如果某行中包含 xxx,则输出该行;否则忽略该行。wc
:统计行数、单词数、字节数 既可以从 stdin 中直接读入内容;也可以在命令行参数中传入文件名列表;
- wc -l:统计行数
- wc -w:统计单词数
- wc -c:统计字节数
tree
:展示当前目录的文件结构
- tree /path/to/directory/:展示某个目录的文件结构
- tree -a:展示隐藏文件
-
ag xxx
:搜索当前目录下的所有文件,检索 xxx 字符串 -
cut
:分割一行内容
- 从 stdin 中读入多行数据
- echo $PATH | cut -d ’:’ -f 3,5:输出 PATH 用:分割后第 3、5 列数据
- echo $PATH | cut -d ’:’ -f 3-5:输出 PATH 用:分割后第 3-5 列数据
- echo $PATH | cut -c 3,5:输出 PATH 的第 3、5 个字符
- echo $PATH | cut -c 3-5:输出 PATH 的第 3-5 个字符
sort
:将每行内容按字典序排序
- 可以从 stdin 中读取多行数据
- 可以从命令行参数中读取文件名列表
-
xargs
:将 stdin 中的数据用空格或回车分割成命令行参数 find . -name ‘*.py’ | xargs cat | wc -l:统计当前目录下所有 python 文件的总行数 查看文件内容 -
more
:浏览文件内容
- 回车:下一行
- 空格:下一页
- b:上一页
- q:退出
less
:与 more 类似,功能更全
- 回车:下一行
- y:上一行
- Page Down:下一页
- Page Up:上一页
- q:退出
head -3 xxx
:展示 xxx 的前 3 行内容
- 同时支持从 stdin 读入内容
tail -3 xxx
:展示 xxx 末尾 3 行内容
- 同时支持从 stdin 读入内容
用户相关
history
:展示当前用户的历史操作。内容存放在~/.bash_history 中
工具
md5sum
:计算 md5 哈希值
- 可以从 stdin 读入内容
- 也可以在命令行参数中传入文件名列表;
-
time command
:统计 command 命令的执行时间 -
ipython3
:交互式 python3 环境。可以当做计算器,或者批量管理文件。
- *! echo “Hello World”:!表示执行 shell 脚本
-
watch -n 0.1 command
:每 0.1 秒执行一次 command 命令 -
tar
:压缩文件 tar -zcvf xxx.tar.gz /path/to/file/:压缩 *tar -zxvf xxx.tar.gz:解压缩 -
diff xxx yyy
:查找文件 xxx 与 yyy 的不同点