【Linux】learning notes

在这里插入图片描述
如下是学习笔记,学习资源来自

  • 莫烦PYTHON:https://morvanzhou.github.io/tutorials/others/linux-basic/

  • 视频资源:https://www.bilibili.com/video/av15976434/?p=1

参考学习摘抄自

更多关于 python 的文章可以参考 【Python】



1 Why Linux?

如果你做机器学习什么的, 很多时候你会发现, 一些模块, 比如 Tensorflow, Pytorch, 都是 Linux 支持最好. 为什么呢? 下面就有介绍啦.

1)免费的

Linux 是一个开放式的系统, 而且最重要的是! 它是免费的!! 免费的!! 免费的!!

2)比较安全

为什么一个开源的系统会更安全? 为什么一个大家都能修改的系统会比一个封锁的系统更安全?

太多人用 Windows 了, 企业, 政府, 银行等等. 做一个 Windows 的病毒往往比其他的有赚头多了.

具体参考 Linux 为什么没有病毒?为什么没有人攻击?

3)老机新用
Linux 的内核文件相对是算少的, 所以整个系统不用占你多少空间. 我就有这么一台大一入学的笔记本, 到现在已经有8年了. 原本 Windows 7 系统, 可是一运行就卡. 我装上了个 Ubuntu (一种比较流行的 Linux 分支), 电脑瞬间运行”光速”, 上网什么都不卡了. (很多大学妹子不是觉得上网看剧卡嘛, 给她装个 Linux, 还显得你高大上了).

2 安装 Ubuntu

其实 Linux 不只是 “一个系统”, 他是很多系统的集合, 可以想象成这样, Linux 就是 Android, 而 Android 还有小米的 米UI, 魅族的UI, 锤子的UI, OPPO 的UI(user interface)等等. 所以实际上要使用的不是 Linux 本身, 而是 Linux 下面的各种 “UI”. 而像 Android 那样, 他也有很多 “UI”. 比如:

  • CentOS
  • Debian
  • Mint
  • Ubuntu

Ubuntu 具体安装方法请参考 安装 Ubuntu 17.10

3 Ubuntu 安装软件

其实在 Ubuntu 上, 已经有很多安装好的 app 了. 比如已经有火狐浏览器(Firefox), 可替代 Windows Office 的办公套件 (LibreOffice) 等等. 不过你仍然可以继续安装你需要的软件 app.

1)使用 Ubuntu 自带的 app 管理器
2)用 Terminal 的方式

sudo apt-get install 你的App名字

4 Linux 基本指令

anaconda 离线安装

来自 Anaconda安装离线程序包

conda install 失败

Step1: 下载对应安装包
在报错信息里面给出了当前需要下载包的url地址,这里可以拷贝这个地址到浏览器或是下载器中,然后就可以下载这个安装包了。
Step2: 删除之前下载的安装包缓存
Anaconda的安装包存放在安装目录下的pkgs/目录下,删除之前因为下载失败的安装包。
Step3: 安装离线包
安装离线包使用的命令是:conda install --use-local xxx.tar.bz2

apt-get install xx

如何离线安装 apt-get install 的包?

在 https://launchpad.net/ubuntu 搜寻包

1)deb 包

安装文件包
sudo dpkg -i 文件名
修复依赖关系
sudo apt-get -f install

进入源代码压缩包所在目录
打开终端
tar -zxvf ***.tar.gz
进入压缩后文件夹,输入编译文件命令:./configure
输入命令:make
安装文件命令:sudo make install
(默认路径下,会将可执行文件拷贝到/usr/local/bin,如果没有sudo的权限,可能无法安装程序到指定目录)

https://blog.csdn.net/weixin_43821376/article/details/100061224
Ubuntu如何安装deb和tar.gz文件

cat (catenate)

cat (catenate) 可以用来显示文件内容, 或者是将某个文件里的内容写入到其他文件里. 我们举例说明.

1)查看文件内容
我们先新建 1.py 文件,并写上 print("hello py")(比如用 vim),保存好,然后用 cat 进行查看

cat 1.py

output

print("hello py")

2)> 将文件的内容放到另一个文件里

cat 1.py > 2.py
cat 2.py

output

print("hello py")

3) > 将多个文件的内容打包一起放入另一个文件

cat 1.py 2.py > 3.py
cat 3.py

output

print("hello py")
print("hello py")

4)>> 将内容添加在一个文件末尾
我们先建立一个 4.py,写上 this is 4,然后添加到上面的 3.py

cat 4.py >> 3.py
cat 4.py

output

print("hello py")
print("hello py")
this is 4

cd(change directory)

cd 是 Change Directory 的缩写,这是用来切换工作目录的命令。

  • cd .. 返回上一层的工作目录
  • cd ../../ 向上返回两次
  • cd - 返回上一次的工作目录
  • cd ~ 返回到 home
  • cd 绝对路径 去任何地方

cp(copy)

  • cp 老文件 新文件
    如果新文件已存在,上面指令中老文件会直接覆盖新文件,为了避免这种情况,用如下指令
  • cp -i 老文件 新文件
    这样,如果新文件已存在会提示你是否 overwrite新文件,回答 yesYESy 同意覆盖,回车或其他字母放弃覆盖
  • cp file1 folder1/ 文件复制去文件夹
  • cp -R folder1/ folder2/ 复制文件夹,加一个 -R(recursive),表示递归的将 folder1 中的所有文件复制到 folder2中
  • cp file* folder2/ 复制多个文件. 复制名字部分相同的多个文件, * 是说”你就找文件前面是 file 的文件, 后面是什么名字无所谓”。后缀相同也行 cp *4 folder2/
  • cp file1copy file2 folder1/ 复制多个文件,cp 会默认最后一个选项是要复制去的文件夹

df

参考 学习下Linux 如何查看磁盘空间

df 以磁盘分区为单位查看文件系统

在这里插入图片描述

Filesystem:文件系统
Size: 分区大小
Used: 已使用容量
Avail: 还可以使用的容量
Use%: 已用百分比
Mounted on: 挂载点

df -h:查看每个根路径的分区大小

查看磁盘是否为 ssd 时,可以在使用 df 查看磁盘名称后,用以下指令

cat /sys/block/sda/queue/rotational

其中 sda 是磁盘名

返回 0 表示 ssd 盘,返回 1 表示机械硬盘

dig

dig 同样也是做 DNS 查询的,区别在于,dig 显示的内容更加详细,比如下图是 dig 百度的结果:

在这里插入图片描述
也可以看到 www.baiu.com 的别名(CNAME)为 www.a.shifen.com,然后共有 2 条 A 记录,也就是 IPv4 地址的记录,通常对应多个是为了负载均衡或分发内容。

du

参考 学习下Linux 如何查看磁盘空间

du,disk usage,含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。

du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)

  • s:对每个Names参数只给出占用的数据块总数。
  • a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。
  • b:以字节为单位列出磁盘空间使用情况(系统默认以k字节为单位)。
  • k:以1024字节为单位列出磁盘空间使用情况。
  • c:最后再加上一个总计(系统默认设置)。
  • l:计算所有的文件大小,对硬链接文件,则计算多次。
  • x:跳过在不同文件系统上的目录不予统计。
  • h:以K,M,G为单位,提高信息的可读性。

host(网络)

host 就是一个 DNS(Domain Name System 域名系统) 查询命令,比如我们要查百度的 DNS,如下图所示:
在这里插入图片描述
可以看到,www.baidu.com 只是个别名,原名是 www.a.shifen.com,且对应了 2 条 IPv4 地址。

如果想追查某种类型的记录,可以加个 -t 参数,比如下图我们追查百度的 AAAA 记录,也就是查询域名对应的 IPv6 地址,由于百度还没部署 IPv6 地址,所以没有查询到。

在这里插入图片描述

ifconfig(网络)

查看本地网络状态
状态信息包含 IP 地址、子网掩码、MAC 地址等。

在这里插入图片描述

可以看到,这台机器一共有 3 个网口,分别是 eth0、eth1、lo。其中 lo 是本地回路,发送给 lo 就相当于发送给自己,eth0 和 eth1 都是真实的网口。

补充知识

在这里插入图片描述
全中国一共有多少IP地址?

jobs

ctrl+c 是强制中断程序的执行。

ctrl+z 的是将任务中断,但是此任务并没有结束,他仍然在进程中他只是维持挂起的状态。

错误把 ctrl+z 当成 ctrl+c 使用可能会导致 “站着茅坑不拉屎” 的情景发生,例如占用 GPU 或 CPU 支援没有释放

此时可以通过 jobs 指令来查看后台程序的 num

然后配合 kill %num 来中断程序

参考 jobs的后台进程程序如何终止?

ls(list)

ls = list

  • ls -l,输出详细信息 -l (long 的简写),会打印出文件的权限 (-rw-rw-r-- 之后我们在细说这个), 用户名, 文件大小, 修改日期, 文件名
  • ls -a,-a (all 的简写) 显示所有文件 . 这里还会显示隐藏的文件 (以 . 开头的)
  • ls -lh -lh (human), 直接 -l 不方便人看, 这个指令是为了方便给人观看的. 注意这里的文件大小使用了 K, MB, GB 之类概括
  • 还有很多其他的功能, 我们可以通过 --help 来查看(ls --help

下面剖析下 ls -l 展示结果的含义(参考 linux ls -l 详解

在这里插入图片描述
-rw-r–r-- 1 root root 762 07-29 18:19 exit

第1行:总计(total)

是指当前目录下所有文件所占用的空间总和,字节为单位,ls -lh 会更直观一些,注意不涉及到子目录

1)第 1 字段: 文件属性字段

文件属性字段总共有10个字母组成

-rw-r–r– 1 root root 762 07-29 18:19 exit

第 1 个字符代表文件的类型

  • “-”:普通文件

  • “d”:目录(dirtectory

  • “l”:链接文件(link),类似于windows下的快捷方式

  • “b”:块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通常一个数据块的大小为512字节)

  • “c”:字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节。

  • “p”:表示该文件为命令管道文件。与 shell 编程有关的文件。

  • “s”:表示该文件为 sock 文件。与 shell 编程有关的文件。

第 1 字符的后面 9 个字母表示该文件或目录的权限位

  • r:表是读 (read)
  • w:表示写 (write)
  • x:表示执行 (execute)
  • s:表示这个是网络接口程序(socket),该程序在运行过程中会打开一个网络接口。
  • t:其他 UNIX 类系统如 FreeBSD 中还有临时(temporary)文件权限

其中前三个表示文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限

eg:-rw-r–r– 1 root root 762 07-29 18:19 exit

表示文件的拥有者 root 对文件有读写权限,其他人(同组用户和其他用户只有读的权限)

ls -l file 可以直接查看某个文件的权限

2)第 2 字段:文件硬链接数

-rw-r–r-- 1 root root 762 07-29 18:19 exit

ln a b 硬链接,文件节点号相同,ls -i file 查看文件节点号
ln -s a b 软链接,文件节点号不同

3)第 3 字段:文件(目录)拥有者

-rw-r–r-- 1 root root 762 07-29 18:19 exit

4)第 4 字段:文件(目录)拥有者所在的组

-rw-r–r-- 1 root root 762 07-29 18:19 exit

5)第 5 字段:文件所占用的空间(以字节为单位)

-rw-r–r-- 1 root root 762 07-29 18:19 exit

ls -lh 会更直观一些

6)第 6 字段:文件(目录)最近访问(修改)时间

-rw-r–r-- 1 root root 762 07-29 18:19 exit

7)第 7 字段:文件名

-rw-r–r-- 1 root root 762 07-29 18:19 exit

如果是一个符号链接,那么会有一个 “->" 箭头符号,后面根一个它指向的文件名

ldd

ldd --version 查看 glibc 的版本

mkdir,rmdir,rm

1)mkdir (make directory)
mkdir (make directory) 就是创建一个文件夹的意思, 使用起来很简单.

  • mkdir folder(不带/也可以),夹中夹 mkdir folder/f
  • mkdir f1 f2 f3 新建多个文件夹

2)rmdir (remove directory)
有一个前提条件. 这些要移除的文件夹必须是空的. 不然会失败.
rmdir folder

3)rm(remove)
那文件夹里面有文件的这种情况, 或者是移除单个文件的情况, 我们都能用 rm 来实现.

  • rm file1 移除单个文件
  • rm -i 有提示地移除文件 (为了避免误删),每个要移除的文件都进行提示
  • rm -I 有提示地移除文件 (为了避免误删),超过3个文件才进行提示
  • rm -r folder 或者 rm -R folder 可以在文件夹中有文件的情况下删除这个文件夹

md5sum

md5sum xxx
在这里插入图片描述
图片来自于 http://www.360doc.com/content/21/0721/15/59494473_987595832.shtml

mount

sudo mount -t cifs A B -o ro,username=“Bryant”(把 A 挂载到 B)
取消挂载
sudo umount A
或者
sudo umount B

mv(move)

1)移动去另一个文件夹

mv source destination

-f :force 强制癿意忠,如果目标档案已经存在,不会询问而直接覆盖;
-i :若 destination 已经存在时,就会询问是否覆盖!
-u :若目标档案已经存在, source 比较新,才会 update
-n:不覆盖已存在的文件

2)重命名文件

因为移动文件到原始的地点, 但是以不同的文件名. 这种做法不就是在重命名嘛!
mv file1 file1rename


补充,有时候转移的文件较多时,会出现 Argument list too long,使用 cp 复制命令时也同样会出现该警示

其中一种解决方法是配合 * 来转移文件名中有共性的文件,

例如 mv 1*.jpg 来移动文件名以 1 开头的图片

另外一种方法是配合 find 来转移

find sourcePath/ -name "*.txt"  -exec mv {} targetPath/  \;
#or
find sourcePath/ -type f  -exec mv {} targetPath/  \;

注意:结束符 \; 不能省,不过该方法速度偏慢

参考:linux: Argument list too long

netstat(网络)

netstat 命令主要用于查看目前本机的网络使用情况。

在这里插入图片描述

上图中,我们看到的都是 socket 文件,socket 负责在客户端与服务端之间收发数据,当客户端和服务端建立连接时,各自同时都会生成一个 socket 文件,用于管理这个连接。

查看 TCP / UDP 连接

netstat -tnetstat -u

在这里插入图片描述
上图 state 描述的是当前 TCP 连接处于的状态。

查看端口占用

netstat -ntlp

如果你想知道某个端口是哪个进程在占用,比如我想查 80 端口被哪个进程占用了,如下图

netstat -ntlp | grep 80

在这里插入图片描述

nvidia-smi

nvidia-smi 查看 GPU 使用情况,不过得不断使用该指令才能反应实时情况

watch nvidia-smi 就可以实时监控

ping(网络)

在这里插入图片描述
ping 是基于 ICMP 协议的,所以对方防火墙如果屏蔽了 ICMP 协议,那么我们就无法与它 ping 通,但这并不代表网络是不通的

每一个 ICMP 包都有序号,所以你可以看到上图中 icmp 序号,如果序号是断断续续的,那么可能出现了丢包现象。

time 显示了网络包到达远程主机后返回的时间,单位是毫秒。time 的时间越小,说明网络延迟越低,如果你看到 time 的时间变化很大,这种现象叫做网络抖动,这说明客户端与服务器之间的网络状态不佳。

ttl 全称叫 time to live,指定网络包被路由器丢弃之前允许通过的网段数量,说白了就是定义了网络包最大经过路由器的数量(生存时间是指容许这个数据包在到达其目的地之前通过多少个路由器),这个目的是防止网络包在网络中被无限转发,永不停止。当网络包在网络中被传输时,ttl 的值通过一个路由器时会递减1,当 ttl 递减到 0 时,网络包就会被路由器抛弃。

另外,ping 不单单能输入 ip 地址,也能输入域名地址,如果输入的是域名地址,会先通过 DNS 查询该域名的 ip 地址,再进行通信。

pip

来自 关于 pip 的 15 个使用小技巧

pip 可以对python的第三方库进行安装、更新、卸载等操作,十分方便。
pip 的全称:package installer for python,也就是Python包管理工具。

那么这些工具库怎么下载安装呢?它们被放在一个统一的“仓库”里,名叫 PyPi(Python Package Index),所有的库安装都是从这里调度

有了仓库之后,还需要有管理员,pip就是这样一个角色。pip把库从PyPi取出来,然后安装到Python里,还可以管理安装好的库,比如更新、查看、搜索、卸载等等。

pip 是 Python第三方库的大管家,搞懂它,会让你省很多事

pip --version查看版本
pip install --upgrade pip升级 pip
pip help获取帮助
pip install package_name
pip install package_name==1.1.2
安装库
安装指定版本的库
pip install -r requirements.txt批量安装(requirements 内容如下图所示,== 也可以写成 ≥)
pip freeze > requirements.txt将库列表保存到指定文件中
pip uninstall package_name卸载库
pip install --upgrade package_name or pip install -U package_name升级库
pip show -f package_name查看库信息
pip list查看已安装的库
pip list -o查看需要升级的库
pip check package-name检查兼容问题,不包含库名就检查所有
pip download package_name -d “要保存的文件路径”下载库到本地(.whl)
pip install matplotlib‑3.4.1‑cp39‑cp39‑win_amd64.whl使用 wheel 文件安装库
https://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

设置默认源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple


补充说明

Python pip运行错误 no such file or directory、ModuleNotFoundError

在这里插入图片描述

编辑 pip 文件

vim pip

eg: /home/xxx/anaconda3/bin/ 路径,或者 /home/xxx/anaconda3/envs/bin/

修改第一行的路径

在这里插入图片描述

eg: 修改成 /home/xxx/anaconda3/bin/python/,或 /home/xxx/anaconda3/envs/bin/python/

pip freeze

参考 python下使用pip freeze >requirements.txt命令迁移模块

查看当前环境下所安装的所有库,导出可以使用

pip freeze >requirements.txt

然后安装的时候可以直接使用

pip install -r requirements.txt

很方便进行虚拟环境配置移植

更多 pip 的功能参考 你只会用Python的pip安装包?别错过这些好用功能!

pip install

在线安装

pip install xxx

离线安装——安装本地包

pip install <目录>/<文件名> 或 pip install --no-index -f=<目录>/ <包名>

后缀为 whl 可以通过 pip install xxx.whl 直接安装

后缀为 tar.gz,需要 tar zxvf xxx.tar.gz 先解压

然后移动到 python 中的 site-packages 目录下(可以用 pip -V 查看 site-packages 的路径),进入解压后的文件目录 xxx 中,用 python setup.py install 安装

如果用的是 anaconda(windows系统),可以打开 Anaconda Prompt,cd 进解压的文件夹(不用把解压的文件夹移到 site-packages 目录,记得进磁盘的时候可以直接 d:),然后 python setup.py install 安装——参考 window下python怎么离线安装tar.gz

包可以通过搜索 包名 pypi 获取

pypi 全称为 Python Package Index,是官方指定的软件包(https://pypi.org/), pip 工具就是从这里查找、下载安装软件包的

更多 pip 的功能参考 你只会用Python的pip安装包?别错过这些好用功能!

pwd

Print Working Directory 的缩写,它是打印出当前所在目录的指令。

scp(网络)

例如把 1.txt 传给 192.168.66.66 机器的 /home/ 目录

scp -r ./1.txt username@192.168.66.66:/home/

ssh(网络)

想远程登录一台服务器,可以使用 ssh username@ip 的方式,然后输入密码

top

top - 09:48:47 up 1 day, 10:54,  2 users,  load average: 0.00, 0.02, 0.00
任务: 293 total,   2 running, 291 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1945.1 total,    160.5 free,    849.7 used,    934.9 buff/cache
MiB Swap:    923.2 total,    921.4 free,      1.8 used.    904.4 avail Mem

PID USER      PR  NI    VIRT    RES    SHR    %CPU  %MEM     TIME+ COMMAND
6775 root      20   0   21752   4280   3424 R   0.3   0.2   0:05.58 top

第一行:任务队列信息

  • top - 09:48:47:显示当前系统时间

  • 1 day, 10:54:系统已经运行了 1 天 10 小时 54 分钟

  • 2 users:2 个用户当前登录

  • load average: 0.00, 0.02, 0.00:系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二行:进程信息

  • Tasks: 293 total:总进程数

  • 2 running:正在运行的进程数

  • 291 sleeping:睡眠的进程数

  • 0 stopped:停止的进程数

  • 0 zombie:僵尸进程数

第三行:CPU 信息

  • %Cpu(s): 0.0 us:用户空间占用 CPU 的百分比

  • 0.2 sy:内核空间占用 CPU 的百分比

  • 0.0 ni:用户进程空间内改变过优先级的进程占用 CPU 的百分比

  • 99.8 id:空闲 CPU 的百分比

  • 0.0 wa:等待输入输出 CPU 的时间百分比

  • 0.0 hi:硬中断占用 CPU 的百分比

  • 0.0 si:软中断占用 CPU 的百分比

  • 0.0 st:用于有虚拟 CPU 的情况,用来指示被虚拟机偷掉的 CPU 时间

第四 / 五行:内存信息

  • MiB Mem : 1945.1 total:物理内存总量

  • 160.5 free:空闲内存总量

  • 849.7 used:使用的物理内存总量

  • 934.9 buff/cache:用于内核缓存的内存量

  • MiB Swap: 923.2 total:交换区总量

  • 921.4 free:空闲交换区总量

  • 1.8 used:使用的交换区总量

  • 904.4 avail Mem:可用于进程下一次分配的物理内存数量

第六行:进程详细信息

  • PID:进程 PID 号

  • USER:用户

  • PR:优先级

  • NI:nice值,负值表示高优先级,正值表示低优先级

  • VIRT:进程使用的虚拟内存总量,单位为 KB

  • RES:进程使用的、未被换出的物理内存大小,单位为 KB

  • SHR:共享内存大小,单位为 KB

  • %CPU:上次更新到现在的CPU时间占用百分比

  • %MEM:进程使用的物理内存百分比

  • TIME+:进程使用的 CPU 时间总计(不是进程启动到现在的时间)=。eg:257:14.655 就是257分钟,14秒,十分之6秒,百分之5秒、千分之5秒。

  • COMMAND:命令名 / 命令行

Linux top命令详解

按 x 可以根据 CPU 的占用量来排序的

11 款可替代 top 命令的工具!

Linux查看物理CPU个数、核数、逻辑CPU个数

iotop 查看 io 的情况

touch 新建文件

touch 能够新建文件,mkdir 用来新建文件夹

  • touch file1 建立一个文件
  • touch file1 file2 file3建立多个文件

tar

tar cvf xxx.tar file 把 file 打包
tar xvf xxx.tar 解开一个 tar
tar cvzf xxx.tar.gz file 把 file 打包并压缩
tar zxvf xxx.tar.gz 解压 xxx.tar.gz
tar jxvf xxx.tar.bz2 解压 xxx.tar.bz2

tar 文件只是把多个文件或文件夹打包合成一个文件,本身并没有进行压缩。
gz / bz2 是进行过压缩的文件

tar -zxvf ./text.tar.gz -C /home/app/test/ 解压到指定路径

find . -name "*.tar.gz" -exec tar zxvf {} \; 批量解压

vim / vi

vim 是 vi 的升级版,兼容性更好,功能更丰富

vim tmp.py 打开 tmp.py 文件

搜索 content 用 :/content

n 跳到下一个 content,N 跳到上一个 content

zip / unzip

来自 Linux常用命令: zip、unzip 压缩和解压缩命令 的介绍

zip [参数] [打包后的文件名] [打包的目录路径]

常用参数

-a 将文件转成ASCII模式
-F 尝试修复损坏的压缩文件
-h 显示帮助界面
-m 将文件压缩之后,删除源文件
-n 特定字符串 不压缩具有特定字尾字符串的文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q 安静模式,在压缩的时候不显示指令的执行过程
-r 将指定的目录下的所有子目录以及文件一起处理
-S 包含系统文件和隐含文件(S是大写)


来自 Linux unzip命令 的介绍

unzip test.zip 				->将test.zip解压到当前文件下
unzip -n test.zip -d /tmp 	->将test.zip解压到/tmp目录下,并且不要覆盖已有文件
unzip -v test.zip			->查看test.zip内容,但不解压
unzip -o test.zip -d tmp/	->将test.zip解压到/tmp目录下,并且覆盖已有文件

常用参数
在这里插入图片描述

批量解压可以配合 find 使用

find . -name ‘*.zip’ -exec unzip {} \;


有时候多个解压包名字不同,但里面解压出来的文件名字有相同的,可以借用下面的脚本运行解压

unzip.sh

for zipfile in *.zip; do
	name = "${zipfile%.*}"
	mkdir -p "$name"
	unzip -d "$name" "$zipfile"
done

5 文件权限

在这里插入图片描述
图片来源 https://morvanzhou.github.io/tutorials/others/linux-basic/3-01-file-permissions/

  • Type: 很多种 (最常见的是 - 为文件, d 为文件夹, 其他的还有l, n … 这种东西, 真正自己遇到了, 网上再搜就好, 一次性说太多记不住的).
  • User: 后面跟着的三个空是使用 User 的身份能对这个做什么处理 (r 能读; w 能写; x 能执行 execute; - 不能完成某个操作).
  • Group: 一个 Group 里可能有一个或多个 user, 这些权限的样式和 User 一样.
  • Others: 除了 User 和 Group 以外人的权限.

小结:Type、 User、Group、Others(1+3+3+3)

关于 User、Group 和 Others(参考Ubuntu 系统中的用户与用户组

Linux 是个多用户多任务的分时操作系统,所有想要调用系统资源的用户都必须先向系统管理员申请一个账号,然后通过这个账号进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,控制他们对系统资源的访问;另一方面也能帮助用户组织文件,为用户提供安全性保护。每个账号都拥有一个唯一的用户名和用户密码。用户在登录时键入正确的用户名和密码后,才能进入系统和自己的主目录。

用户与用户组间的联系:

  • 一对一:一个用户可以存在于一个用户组中,也可以是组中的唯一成员。
  • 一对多:一个用户可以存在于多个用户组中,那么此用户具有多个组的共同权限。
  • 多对一:多个用户可以存在于一个用户组中,这些用户具有和组相同的权限。
  • 多对多:多个用户可以存在于多个用户组中,其实就是上面三个对应关系的扩展。

一般来说, 像一个企业部门的电脑, 都可以放在一个 Group 里, 分享了一些共享文件和权限. Others 就是除了上面提到的 User 和 Group 以外的人.

用第4节创立的py文件为例,ls -l 查看权限

-rw-r--r-- 1 root root 18 Feb 25 08:27 1.py
-rw-r--r-- 1 root root 18 Feb 25 08:30 2.py
-rw-r--r-- 1 root root 47 Feb 25 08:36 3.py
-rw-r--r-- 1 root root 11 Feb 25 08:35 4.py

如何修改这些文件的权限呢?下小节介绍

chmod (change mode)修改权限

chmod [][怎么修改] [哪个文件]

1)谁

  • u: 对于 User 修改
  • g: 对于 Group 修改
  • o: 对于 Others 修改
  • a: (all) 对于所有人修改

2)怎么修改

  • +, -, =: 作用的形式, 加上, 减掉, 等于某些权限
  • r, w, x 或者多个权限一起, 比如 rx

3)哪个文件

  • 施加操作的文件, 可以为多个

看一个例子ls -l

-rw-r--r-- 1 root root 18 Feb 25 08:27 1.py
-rw-r--r-- 1 root root 18 Feb 25 08:30 2.py
-rw-r--r-- 1 root root 47 Feb 25 08:36 3.py
-rw-r--r-- 1 root root 11 Feb 25 08:35 4.py

chmod u-rw 1.py 2.py 3.py 修改权限,然后再查看 ls -l

----r--r-- 1 root root 18 Feb 25 08:27 1.py
----r--r-- 1 root root 18 Feb 25 08:30 2.py
----r--r-- 1 root root 47 Feb 25 08:36 3.py
-rw-r--r-- 1 root root 11 Feb 25 08:35 4.py

下面来一个有趣的 demo

我不怎么用权限这东西, 但是我却发现给 python 文件添加权限 x 还算有用的. 为什么这么说? 因为通常, 如果一个 .py 没有 x 权限, 在 terminal 中你就需要这样执行:

python3 1.py

output

hello py

如果你有了 x (可执行权限), 你运行这个文件可以直接这样打(通过 chmod u+x 1.py 来添加权限):

./1.py

但是需要在 1.py 前添加一句话

#!/usr/bin/python3        # 这句话是为了告诉你的电脑执行这个文件的时候用什么来加载

不同人的 python 可能不一样,用以下命令查看 python 的路径(参考)

  • whereis python 查看所有python的路径,不止一个
  • which python 查看当前使用的python路径

/usr/bin/python3 替换成你对应的当前 python 路径即可。
然后就可以通过 ./1.py 来执行代码了,结果如下

hello py

chmod -R 777 ./*
chmod u+x xxx
chown -R my your(改 own)


6 文件系统

来自 用了这么久 Linux ,才知道这些概念。。。

为了避免在 Linux 系统上也出现这种命名混乱的问题,在 1994 年推出了 FSSTND(FileSystem Standard) 的 Linux 文件系统层次结构标准,后来 UNIX 团队把 FSSTND 发扬光大,成为了后来的 FHS(FileSystem Hierarchy Standard) 。

FHS 就是一种文件系统的命名标准。一般来说,Linux distributions 都需要遵循 FHS 规定的

目录结构和目录内容

文件类型的权限

  • 根目录与开机、还原、系统修复有关,分区越小越好,以减少出错率

FHS 同样规定了根目录下面应该要有这些目录的存在。

在这里插入图片描述

  • /home 目录是系统默认的使用者主文件夹(home directory)。

  • /boot 目录包含启动操作系统所需的静态文件,比如 Linux 内核,这些文件对系统的启动至关重要。千万不要删除 /boot 目录,这样做可能会导致系统无法启动。

  • /dev 目录都是一些设备节点,这些设备节点是 Linux 系统中的设备或者是内核提供的虚拟设备。存储 /dev 目录下的文件就相当于是存储某个设备。

    • 字符设备:鼠标、键盘、调制解调器
    • 块设备:硬盘、软盘驱动器
  • /etc 目录是为计算机本地的配置文件保留的,系统主要的配置文件都放在这个目录下,比如账号密码,服务的启停,一般来说,这个目录下面一般用户只有读权限,只有 root 用户具有修改权限。/etc 目录下不要存放二进制文件,二进制文件最好放在 /sbin 和 /bin 中

    /etc/modprobe.d 内核驱动模块

    /etc/passwd 存储用户密码

    /etc/fstab 存储挂载信息

    /etc/issue 存储系统启动显示的内容

    /etc/opt 这个主要存放第三方协力软件 /opt 的相关配置文件

  • /lib,系统的函数库有很多,而 /lib 目录就像一个仓库,它用于存放执行 /bin 和 /sbin 中二进制文件所需要的库,这些共享库映像对于系统 boot 和执行根文件系统中的命令特别重要。

  • /media 目录下可以存放用于可移动媒体(例如 USB、DVD、CD-ROM 和 Zip 磁盘)的安装点和子目录

  • /mnt 目录,如果你想要暂时挂载某些额外的设备,你可以放在 /mnt 这个目录下,其实最早的时候,/mnt 用途和 /media 一样,只是后来有了 /media 之后,这个目录就被用来临时挂载了。

  • /opt 目录为大多数应用程序软件包提供存储空间,将文件放置在 /opt/ 目录中的包会创建一个与包同名的目录。反过来,该目录保存了原本会分散在整个文件系统中的文件,从而为系统管理员提供了一种简单的方法来确定特定包中每个文件的角色。

    例如,如果 sample 是位于 /opt/ 目录中的特定软件包的名称,那么所有文件都放置在 /opt/sample/ 目录中的目录中,例如 /opt/sample/bin/ 表示二进制文件 和 /opt/sample/man/ 用于手册页。

  • /proc 目录本身是一个虚拟文件系统(virtual filesystem),他放置的数据是在内存中,比如系统核心信息,行程信息,周边设备网络状态等。因为这个目录下的数据都是在内存中的,所以本身不占用磁盘空间。
    这个目录下比较重要的文件有 /proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/net/。

  • /sbin 目录存储 root 用户使用的可执行文件。/sbin 中的可执行文件在启动时使用,用于系统管理和执行系统恢复操作。除了 /bin 中的二进制之外,/sbin 还包含启动、恢复和修复系统所需要的二进制文件。

    /sbin 目录下包含 arp、clock、halt、init、grub、ifconfig、route、shutdown 等。

  • /tmp 目录,这个目录下面存放的都是一些临时文件,这些文件在系统重新启动时被清除。

  • /sys 目录,这个目录其实和 /proc 非常类似,也是一个虚拟文件系统,主要是记录核心与系统硬件相关信息。这个目录同样也不占用磁盘空间。

  • /usr 目录,是 Unix Software Resource 的缩写,所有系统默认的软件都会放在 /usr 下面,因此这个目录有点类似 Windows 中的 C:\Windows\ + C:\Program files\ 这两个目录的综合,一般来说,系统刚安装完毕后,这个目录会占用较多的磁盘容量

    /usr/bin/一般用户能够使用的指令都放在这个目录下,CentOS 7 开始,/usr/bin 下指令和 /bin 目录下指令一毛一样。

    /usr/lib/ 基本上,与 /lib 功能相同,所以 /lib 就是链接到这个目录中的。

    /usr/local 系统管理员在本机下载的软件都建议安装到这个目录下,便于管理。

    /usr/sbin 非系统正常运行所需要的系统指令,最常见的就是某些网络服务器软件的服务指令,不过基本功能与 /sbin 差不多,因此目前 /sbin 就是链接到此目录中的。

    /usr/share 共享文件放置区,这个目录下还有这些次目录 /usr/share/man ,/usr/share/doc,/usr/share/zoneinfo

    /usr/games 与游戏相关的数据放置处

    /usr/include C/C++ 等程序语言的 header 和 include 放置处,也是直接链接的。

    /usr/src 一般源码建议放在这,src 是 source 的意思,至于核心源码则建议放在 /usr/src/linux 目录下。

  • /run 目录,早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录下,新版的 FHS 则规范到 /run 下面。

  • /var 目录,如果说 /usr 是安装时会占用较大磁盘容量的目录,那么 /var就是在系统运行后才会渐渐占用磁盘容量的目录。/var 主要包括高速缓存、登录文件以及某些软件运行所产生的的目录,包括程序文件,例如 MySQL 数据库文件等,常见的目录有
    /var/cache 应用程序缓存目录

    /var/crash 系统错误信息

    /var/log 日志记录

    /var/run 进程的标识数据

    /var/tmp 临时文件目录

    /var/lock 文件锁定记录

  • /srv 目录, service 的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录,常见的服务例如 WWW, FTP

7 Tmux(后台)

有时候用本地的电脑,通过 xshell 或者端口映射连接服务器的时候,通过局域网实现服务器上的程序启动和中间变量监控!虽然很方便,但是一旦断网,连接就断开,服务器上的程序也就跟着断了!!!这是我们不愿看到的!有没有什么解决办法呢?哈哈,这里介绍一款好用的功能!

1)在 Ubuntu 中安装Tmux:

apt-get install tmux

2)在会话外(terminal)创建一个新的会话:

tmux new -s <name-of-my-session>

这么命令会带你进入 session 中,在这里面运行服务器上的程序,就不怕断网了!

3)退出当前 session

先同时按住 ctrl + b 两个键,然后放开,最后按一下 d

4)session 外查看已创建的 session

tmux ls

5)session 外进入某个 session

tmux a -t <name-of-my-session>

或者

tmux attach -t <name-of-my-session>

6)session 外 kill 某个 session

tmux kill-session -t <name-of-my-session>

在 session 内也有对应切换 session,kill session 的操作,更多详情请参考 Tmux常用功能总结

7)session 内 kill 某个 session
ctrl+b(一起按下后放手)然后按 x


也可以借助 nohup train.py &,具体参考 关闭命令行后如何保持Python程序继续运行


附录A——快捷键

在文件夹里,ctrl+l,选定文件夹路径

Linux下的ctrl常用组合键

在linux的命令模式下使用ctrl组合键能让操作更便捷。

ctrl + k -- 剪切光标及其后边的内容;

ctrl + u -- 剪切光标之前的内容;

ctrl + y -- 在光标处粘贴上两个命令,粘贴方式和被剪切方式相同;

ctrl + c -- 结束正在运行的程序或命令;

ctrl + d -- 结束当前命令窗口;

ctrl + r -- 输入关键字可弹出曾经用过的指令;

ctrl + l -- 清屏;(和clear效果相同)

ctrl + a -- 光标切换到行开头;

ctrl + e -- 光标切换到行尾。

附录B——专业名词

驱动:驱动本质上是软件代码,其主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。如果一个硬件设备没有驱动程序,只有操作系统是不能发挥特有功效的,也就是说驱动程序是介于操作系统与硬件之间的媒介,实现双向的传达,即将硬件设备本身具有的功能传达给操作系统,同时也将操作系统的标准指令传达给硬件设备,从而实现两者的无缝连接

linux 内核:操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等

附录C——BUG

解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22‘ not found

libstdc++.so.6.0.22 下载

解决libstdc++.so.6: version `GLIBCXX_3.4.22’ not found


更多关于 python 的文章可以参考 【Python】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值