linux学习笔记


引用Linux Journey

Linux 发行版本

Debian

包管理工具推荐应用场景
Debianany platform

Red Hat Enterprise Linux

包管理工具推荐应用场景
RPMserverOS

Ubuntu

包管理工具推荐应用场景
Debianany platform

Fedora

包管理工具推荐应用场景
RPMLaptop&Desktop

Linux Mint

包管理工具推荐应用场景
DebianLaptop&Desktop

Gentoo

包管理工具推荐应用场景
PortageLaptop&Desktop

Arch Linux

包管理工具推荐应用场景
PacmanLaptop&Desktop&Raspberry Pi

openSUSE

包管理工具推荐应用场景
RPMLaptop&Desktop

系统目录结构

名称含义
/根目录
boot存放启动 linux 核心文件,包含镜像文件和连接文件
devDevice 的缩写,存放 linux 外部设备
etcEtcetera 的缩写,存放系统管理的配置文件
binBinaries 的缩写,存放常用命令
varvariable 的缩写,存放日志文件等不断扩充和修改的文件
usrunix shared resources 的缩写,存放应用程序和文件,类似于 windows 的 program files
root超级权限用户的主目录
home用户的主目录
medialinux 将 u 盘、光驱自动挂载到该目录下
procProcesses 的缩写,是系统内存的映射
sbin存放系统管理员使用的系统管理程序
tmptemporary 缩写,存放临时文件

命令行

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 要点:

  1. 管道命令仅处理stdout,忽略stderr
  2. 管道右边的命令必须能接受stdin
  3. 多个管道可以串联

例子:

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 的配置文件

常见环境变量

  1. HOME:用户的家目录
  2. PATH:可执行文件(命令)的存储路径.路径与路径之间用:分隔.当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行.下列所有存储路径的环境变量,均采用从左到右的优先顺序.
  3. LD_LIBRARY_PATH:用于指定动态链接库(.so 文件)的路径,其内容是以冒号分割的路径列表
  4. C_INCLUDE_PATH:c 语言的头文件路径,内容时以冒号分隔的路径列表
  5. CPLUS_INCLUDE_PATH:CPP 的头文件路径
  6. PYTHONPATH:python 导入包的路径
  7. JAVE_HOME:jdk 的安装目录
  8. CLASSPATH:存放 java 导入类的路径

常用命令

系统状况

  1. top:查看所有进程的信息(Linux 的任务管理器)
  • 打开后,输入 M:按使用内存排序
  • 打开后,输入 P:按使用 CPU 排序
  • 打开后,输入 q:退出
  1. df -h:查看硬盘使用情况

  2. free -h:查看内存使用情况

  3. du -sh:查看当前目录占用的硬盘空间

  4. ps aux:查看所有进程

  5. kill -9 pid:杀死编号为 pid 的进程

  • 传递某个具体的信号:kill -s SIGTERM pid
  1. netstat -nt:查看所有网络连接
  2. w:列出当前登陆的用户
  3. ping baidu.com:检查是否连网

文件权限

  1. chmod:修改文件权限
  • chmod +x xxx:给 xxx 添加可执行权限
  • chmod -x xxx:去掉 xxx 的可执行权限
  • chmod 777 xxx:将 xxx 的权限改成 777
  • chmod 777 xxx -R:递归修改整个文件夹的权限

文件检索

  1. find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py 文件
  2. grep xxx:从 stdin 中读入若干行数据,如果某行中包含 xxx,则输出该行;否则忽略该行。
  3. wc:统计行数、单词数、字节数 既可以从 stdin 中直接读入内容;也可以在命令行参数中传入文件名列表;
  • wc -l:统计行数
  • wc -w:统计单词数
  • wc -c:统计字节数
  1. tree:展示当前目录的文件结构
  • tree /path/to/directory/:展示某个目录的文件结构
  • tree -a:展示隐藏文件
  1. ag xxx:搜索当前目录下的所有文件,检索 xxx 字符串

  2. 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 个字符
  1. sort:将每行内容按字典序排序
  • 可以从 stdin 中读取多行数据
  • 可以从命令行参数中读取文件名列表
  1. xargs:将 stdin 中的数据用空格或回车分割成命令行参数 find . -name ‘*.py’ | xargs cat | wc -l:统计当前目录下所有 python 文件的总行数 查看文件内容

  2. more:浏览文件内容

  • 回车:下一行
  • 空格:下一页
  • b:上一页
  • q:退出
  1. less:与 more 类似,功能更全
  • 回车:下一行
  • y:上一行
  • Page Down:下一页
  • Page Up:上一页
  • q:退出
  1. head -3 xxx:展示 xxx 的前 3 行内容
  • 同时支持从 stdin 读入内容
  1. tail -3 xxx:展示 xxx 末尾 3 行内容
  • 同时支持从 stdin 读入内容

用户相关

  1. history:展示当前用户的历史操作。内容存放在~/.bash_history 中

工具

  1. md5sum:计算 md5 哈希值
  • 可以从 stdin 读入内容
  • 也可以在命令行参数中传入文件名列表;
  1. time command:统计 command 命令的执行时间

  2. ipython3:交互式 python3 环境。可以当做计算器,或者批量管理文件。

  • *! echo “Hello World”:!表示执行 shell 脚本
  1. watch -n 0.1 command:每 0.1 秒执行一次 command 命令

  2. tar:压缩文件 tar -zcvf xxx.tar.gz /path/to/file/:压缩 *tar -zxvf xxx.tar.gz:解压缩

  3. diff xxx yyy:查找文件 xxx 与 yyy 的不同点

Docker