avatar

Linux 学习笔记

Linux 学习笔记

一、操作系统

1 不同主流操作系统

  • 桌面操作系统
  • 服务器操作系统
  • 嵌入式操作系统
  • 移动设备操作系统

1.1 服务器操作系统

  • Linux

    • 安全、稳定、免费
    • 占有率高
  • Windows Server

    • 付费
    • 占有率低

1.2 嵌入式操作系统

  • Linux

1.3 移动设备操作系统

  • iOS
  • Android

2 虚拟机

虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

3 Linux 内核及发行版

内核用于直接控制硬件设备,包含一套终端命令

Linux发行版建立在内核的基础上,Ubuntu 是其中之一

4 Linux 文件系统

Ubuntu 没有盘符概念,只有一个根目录,所有文件都在它下面

1
2
3
4
5
6
7
8
9
10
11
12
graph TD
A[ / ] --- B[ /bin]
A --- C[ /etc]
A --- D[ /home]
A --- E[ /lib]
A --- F[ /usr]
D --- G[ /itheima]
D --- H[ /python]
D --- I[ /laowang]
H --- J[ /Desktop]
H --- K[ /Documents]
H --- L[ /Downloads]

4.1 Linux 主要目录

  • /:根目录,一般根目录下只存放目录,在linux 下有且只有一个根目录
    • 当在终端输入/home,其实是在告诉电脑,先从根目录开始,再进入到home目录
  • /bin、/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等
  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有:
    • /etc/inittab
    • /etc/fstab
    • /etc/init.d
    • /etc/X11
    • /etc/sysconfig
    • /etc/xinetd.d
  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
    • ~表示当前用户的家目录
    • ~edu表示用户edu的家目录

二、Linux 操作系统的使用

1 Linux常用命令

序号 命令 对应英文 作用
01 ls list 查看当前文件夹下的内容
02 pwd print work directory 查看当前所在的文件夹
03 cd [目录名] change directory 切换文件夹
04 touch [文件名] touch 如果文件不存在,新建文件
05 mkdir [目录名] make directory 创建目录
06 rm [文件名] remove 删除指定的文件名
07 clear clear 清屏
08 tree [目录名] tree 以树状图列出文件目录结构

使用技巧:

  • ctrl + shift + =放大终端窗口字体显示
  • ctrl + -缩小终端窗口的字体显示

2 Linux终端命令格式

command [-options] [parameter]

说明:

  • command:命令名,相应功能的英文单词或单词的缩写

  • [-options]:选项,可用来对命令进行控制,也可以省略

  • [parameter]:传给命令的参数,可以是零个、一个或者多个

  • []代表可选

  • 命令(选项)可以合并使用,并且先后顺序不影响结果

3 常用命令补充

3.1 ls 命令

Linux 下文件和目录的特点:

  • Linux 文件或者目录名称最长可以有256个字符
  • .开头的为隐藏文件,需要用-a 参数才能显示
  • . 代表当前目录
  • .. 代表上一级目录

ls 常用选项:

参数 含义
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合-l 以人性化的方式显示文件大小

ls通配符的使用:

通配符 含义
* 代表任意个数字符
? 代表任意一个字符,至少一个
[] 表示可以匹配字符组中的任意一个
[abc] 匹配a、b、c中的任意一个
[a-f] 匹配从a到f范围内的任意一个字符

通配符可以用于其他命令

3.2 cd 命令

命令 含义
cd 切换到当前用户的主目录(/home/用户目录)
cd ~ 切换到当前用户的主目录
cd . 保持在当前目录不变
cd .. 切换到上级目录
cd - 可以在最近两次工作目录之间来回切换

相对路径和绝对路径:

  • 相对路径:在输入路径时,最前面不是/或者~,表示相对 当前目录 所在的目录位置
  • 绝对路径:在输入路径时,最前面是/或者~,表示从 根目录/家目录 开始的具体目录位置

3.3 touch 命令

  • 如果文件不存在,可以创建空白文件
  • 如果文件已经存在,可以修改文件的末次修改日期

3.4 mkdir 命令

选项 含义
-p 可以递归地创建目录

新建的目录的名称不能与当前目录中已有的目录或文件同名

3.5 rm 命令

选项 含义
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹时必须加此参数

3.6 tree 命令(需要安装)

选项 含义
-d 只显示目录

4 文件系统相关命令

序号 命令 对应英文 作用
09 cp 源文件 目标文件 copy 复制文件或者目录
10 mv 源文件 目标文件 move 移动文件或者目录/文件或者目录重命名
11 cat 文件名 concatenate 查看文件内容、创建文件、文件合并、追加文件内容等功能
12 more 文件名 more 分屏显示文件内容
13 grep 搜索文本 文件名 grep 搜索文本文件内容
14 echo 文本 echo 会在终端中显示参数指定的文字,通常会和重定向联合使用

4.1 cp 命令

选项 含义
-f 已经存在的目标文件直接覆盖,不会提示
-i 覆盖文件前提示
-r 若给出的源文件是目录文件,则cp 将递归复制该目录下的所有子目录和文件夹,目标文件必须为一个目录名

4.2 mv 命令

选项 含义
-i 覆盖文件夹前提示

4.3 cat 命令

cat会一次性显示所有的内容,适合查看内容缺少的文本文件

选项 含义
-b 对非空输出行编号
-n 对输出的所有行编号

Linux 中还有一个nl的命令和cat -b的效果等价

4.4 more 命令

  • more每次只显示一页的内容,适合于查看内容较多的文本文件

  • more的操作键和man除了无搜索基本一致

4.5 grep 命令

  • grep允许对文本文件进行模式查找,又被称为正则表达式
选项 含义
-n 显示匹配行及行号
-v 显示不包含匹配文本的所有行
-i 忽略大小写

常用的两种模式查找:

参数 含义
^z 行首,搜寻以’z’开头的行
tp$ 行尾,搜寻以’tp’结束的行

4.6 重定向

  • Linux 允许将命令执行结果重定向到另一个文件
  • 将本应显示在终端上的内容输出/追加到指定文件夹中

其中:

  • >表示输出,会覆盖文件原有的内容

  • >>表示追加,会将内容追加到已有文件夹的末尾

4.7 管道 |

  • Linux 允许将一个命令的输出通过管道作为另一个命令的输入
  • 可以理解为现实生活中的管子,|分左右两端,左端塞东西(写),右端取东西(读)

常用的管道命令有:

  • more:分屏显示内容
  • grep:在命令执行结果的基础上查询指定的文本

5 远程管理常用命令

序号 命令 对应英文 作用
01 shutdown 选项 时间 shutdown 关机/重新启动
02 ifconfig configure a network interface 查看/配置计算机当前的网卡配置信息
03 ping ip地址 ping 检测目标ip 地址的链接是否正常
04 ssh 用户名@ip secure shell 关机/重新启动
05 scp 用户名@ip:文件名或路径 secure copy 远程复制文件

5.1 shutdown 命令

选项 含义
-r 重新启动
  • 不指定选项和参数,默认表示1分钟后关闭电脑
  • 远程维护服务器时,最好不要关闭系统,而应该重新启动系统
  • 常用命令示例:
重新启动操作系统,其中now 表示现在:
shutdown -r now

系统立刻关机:
shutdown now

系统在今天的20:25会关机:
shutdown 20:25

系统再过10分钟后自动关机:
shutdown +10

取消之前指定的关机计划:
shutdown -c

5.2 ifconfig 命令

查看网卡对应的IP 地址:

ifconfig | grep inet

一台计算机可能会有一个物理网卡和多个虚拟网卡,在Linux 中物理网卡的名字通常以ensXX表示

  • 127.0.0.1 被称为本地回环/环回地址,一般用来测试本机网卡是否正常

5.4 ping 命令

检测到目标主机是否连接正常:
ping IP地址

检测本地网卡是否工作正常:
ping 127.0.0.1
  • ping一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢
  • ping的工作原理与潜水艇的声呐类似,ping这个命令就是取自声呐的声音
  • 网络管理员之间也常将ping用作动词——ping一下计算机x,看它是否开着

5.5 ssh 基础(重点)

在Linux 中 SSH 是非常常用的工具,通过SSH 客户端我们可以连接到运行了SSH 服务器的远程机器上

  • SSH 客户端是一种使用Secure Shell(SSH)协议连接到远程计算机的软件程序
  • SSH 是目前比较可靠,专为远程登录会话和其他网络服务提供安全协议
    • 利用SSH 协议可以有效防止远程管理过程中的信息泄露
    • 通过SSH 协议可以对所有传输数据进行加密,也能够防止DNS 欺骗IP 欺骗
  • SSH 的另一项优点是传输的数据可以是经过压缩的,所以可以加快传输的速度
  • 常见服务器端口号列表:
序号 服务 端口号
01 SSH 服务器 22
02 Web 服务器 80
03 HTTPS 443
04 FTP 服务器 21
ssh 命令使用示例:
ssh [-p port] user@remote
  • user是在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote是远程机器的地质,可以是IP/域名,或者是别名
  • portSSH Sever 监听的端口,如果不指定,就为默认值22
Windows 下SSH 客户端的安装
使用Putty 工具登录远程主机
  1. 打开Putty 输入IP,也可以保存设置方便下次登录:

    开始会有警告信息,先不用理睬。

  2. 下面在弹出框中输入账户和密码回车登录:

  1. 使用完毕可采用下面几种方法登出:
    • 直接关闭终端
    • 输入logout命令退出
    • 输入exit命令退出
    • 使用ctrl+D退出
pscp 工具传输文件

使用pscp 工具可以向主机传输文件:

  1. 从cmd命令行进入Putty 安装目录:

  2. 类似于Linux 系统的scp命令,可以直接拷贝Windows 上的文件到Linux 服务器中:

    这里username是账户名称,ip是主机IP 地址,后面跟上的是目标文件夹

  3. 也可以将Linux 服务器上的文件转移到Windows 上,参考下面scp命令的使用方法进行操作^2

问题及解决

在连接Ubuntu 系统时可能出现问题,按照如下步骤进行排查(Windows 系统,VBox 虚拟机):

  1. 在cmd 中执行ping 命令,看是否连接上Ubuntu 系统,若失败,则尝试以桥接模式开启网卡2:

    重启系统,连接成功即可进行下面排查

  2. 如果使用Putty 连接提示connection refused,考虑未开启ssh-server,在Ubuntu 中键入命令如下:

    sudo apt-get install openssh-server

    接下来检查ssh-server 是否正确启动:

    ps -e | grep ssh

    若显示既有ssh-agent 又有sshd 说明服务已经启动,可以用putty 连接Ubuntu系统了

  3. 若以上方法都不行,尝试整一下防火墙^1

    开启防火墙:
    sudo ufw enable
    开启22号端口:
    sudo ufw allow 22
    重启防火墙:
    sudo ufw reload
    查看状态:
    sudo ufw status
  4. 检查ssh 服务是否启动:

    ssh localhost
SSH 高级
  1. 免密码登录
  • 配置公钥

    • 执行ssh-keygen即可生成SSH 钥匙,一路回车即可
  • 上传公钥到服务器

    • 执行ssh-copy-id -p port user@remote,可以让远程服务器记住我们的公钥

    示意图

有关SSH 配置的信息都保存在用户家目录下的.ssh目录下

  1. 配置别名

    每次都输入ssh -p port user@remote,时间久了会很麻烦,而且不好记忆

    配置别名可以进一步偷懒,譬如用:ssh windows来替代上面内容,那么就在~/.ssh/config 里面追加以下内容:

    Host windows
      HostName ip地址
      User [username]
      Port 22

    保存之后,即可用ssh mac实现远程登录了,scp同样可以使用

5.6 scp 命令

  • scp 就是secure copy,是一个在Linux下用来进行远程拷贝文件的命令
  • 它的地址格式与ssh 基本相同,需要注意的是,在指定端口时用的是大写的-P而非小写
把本地当前目录下的 01.py 文件复制到远程家目录下的 Desktop/01.py:
注意:':'后面的路径如果不是绝对路径,则以用户家目录作为参照路径
scp -P port 01.py user@remote:Desktop/01.py

把远程家目录下的 Desktop/01.py 文件复制到本地当前目录下的 01.py:
scp -P port user@remote:Desktop/01.py 01.py

加上 -r 选项可以传送文件夹
把当前目录下的 demo 文件夹复制到远程家目录下的 Desktop:
scp -r demo user@remote:Desktop

把远程家目录下的 Desktop 复制到当前目录下的 demo 文件夹:
scp -r user@remote:Desktop demo
  • scp这个终端命令一般在Linux 或者Unix 系统下使用

  • 如果在Windows 系统中,可以安装putty,使用pscp命令行工具或者安装FileZilla使用FTP 进行文件传输

  • 如果Windows 下的路径存在中文,则会导致scp命令复制失败,原因未明

  • FileZilla
    官方网站:https://www.filezilla.cn/download/client

    FileZilla在传输文件时,使用的是FTP 服务而不是SSH 服务。因此端口号应该设置为21

6 用户权限相关命令

6.1 用户和权限的基本概念

基本概念
  • 用户是Linux 系统工作中重要的一环,用户管理包括用户管理

  • 在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且针对不同的系统资源拥有不同的使用权限

  • 在Linux中,可以指定每一个用户针对不同文件或者目录的不同权限

  • 对文件/目录的权限包括:

    序号 权限 英文 缩写 数字代号
    01 read r 4
    02 write w 2
    03 执行 excute x 1
  • 在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每一个用户设置权限

6.2 ls-l 用户权限信息解释

  • ls -l查看的文件详细信息从左到右为:
    • 权限(第一个字符如果是d 表示目录)
    • 硬连接数(通俗的讲,就是有多少种方式,可以访问到当前的目录/文件)
    • 拥有者(家目录下文件/目录的拥有者通常都是当前用户)
    • 组(很多时候会出现组名和用户名相同的情况)
    • 大小
    • 时间
    • 名称

6.3 修改文件权限

序号 命令 作用
01 chown 修改拥有者
02 chgrp 修改组
03 chmod 修改权限
chmod 命令
  • chmod可以修改用户/组文件/目录的权限

  • 命令格式如下:

    直接修改文件|目录的 读|写|执行 权限,但是不能精确到 拥有者|组|其他:
    chmod +/-rwx 文件名|目录名

    递归修改文件权限,三个数字分别对应拥有者|组|其他 用户的权限:
    chomod -R 755 文件名|目录名

权限设置代码

6.4 超级用户

  • Linux 系统中的root账号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限
  • 在大多数版本Linux 系统中,都不推荐直接使用root 账号登录系统
  • 在Linux 安装的过程中,系统会自动创建一个用户账号,而这个默认的用户就称为“标准用户”
sudo 命令
  • su是substitute user 的缩写,表示使用另一个用户的身份

  • sudo命令用来以其他身份来执行命令,预设的身份为root

  • 用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码

若未经授权的用户企图使用sudo,则会发出警告邮件给管理员

7 组管理终端命令

创建组/删除组的终端命令都需要通过sudo执行

序号 命令 作用
01 groupadd 组名 添加组
02 groupdel 组名 删除组
03 cat /etc/group 确认组信息
04 chgrp -R 组名 文件/目录名 递归修改文件/目录的所属组
  • 组信息保存在/etc/group文件中
  • /etc目录是专门用来保存系统配置信息的目录
  • 在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每个用户设置权限

8 用户管理终端命令

8.1 创建用户/设置密码/删除用户

序号 命令 作用 说明
01 useradd -m -g 组名 新建用户名 添加新用户 -m 自动建立家目录
-g 指定用户所在的组,否则会建立一个和用户同名的组
02 passwd 用户名 设置用户密码 如果是普通用户,直接用passwd 可以修改自己的密码
03 userdel -r 用户名 删除用户 -r 选项会自动删除用户家目录
04 cat/etc/passwd | grep 用户名 确认用户信息 新建用户后。用户信息会保存在/etc/passwd 文件中
  • 创建用户时,如果忘记-m选项指定新用户的家目录,最简单的方法是删除用户重新创建。
  • 创建用户时,默认会创建一个和用户名同名的组名
  • 用户信息保存在/etc/passwd文件中

8.2 查看用户信息

序号 命令 作用
01 id [用户名] 查看用户UID 和GID 信息
02 who 查看当前所有登录的用户列表
03 whoami 查看当前登录用户的账户名
passwd 文件

etc/passwd文件存放的是用户信息,由6个分号组成的7个信息,分别是:

  1. 用户名
  2. 密码(x,表示加密的密码)
  3. UID(用户标识)
  4. GID(组标识)
  5. 用户全名或本地账号
  6. 家目录
  7. 登录使用的Shell,就是登陆之后,使用终端命令,Ubuntu 默认是dash
usermod 命令
  • usermod可以用来设置用户的主组/附加组和登录Shell,命令格式如下:
  • 主组:通常在新建用户时指定,在etc/passwd的第四列GID 对应的组
  • 附加组:在etc/group中最后一列表示该组的用户列表,用于指定用户的附加权限

设置用户的附加组之后,需要重新登录才能生效

修改用户的主组(passwd 中的GID):
usermod -g 组 用户名

修改用户的附加组:
usermod -G 组 用户名

修改用户登录 Shell:
usermod -s /bin/bash

默认使用useradd添加的用户是没有权限使用sudoroot身份执行命令的,可以使用一下命令,将用户添加到sudo附加组中

usermod -G sudo 用户名
which 命令
  • /etc/passwd是用于保存用户信息的文件

  • /usr/bin/passwd是用于修改用户密码的程序

  • which命令可以查看执行命令所在位置,例如:
which is

输出:
/bin/ls

which useradd

输出:
/usr/sbin/useradd
bin 和sbin
  • 在Linux 中,绝大多数可执行文件都是保存在/bin/sbin/usr/binusr/sbin
  • /bin(binary)是二进制执行文件目录,主要用于具体应用
  • /sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
  • /usr/bin(user commands for applications)后期安装的一些软件
  • /usr/sbin(super user commands for application)超级用户的一些管理程序

cd这个终端命令是内置在系统内核中的,没有独立的文件,因此用which无法找到cd命令位的置

8.3 切换用户

序号 命令 作用 说明
01 su -用户名 切换用户,并且切换目录 -可以切换到用户目录,否则保持不变
02 exit 退出当前登录账户 会返回上一次调用su命令的用户

su不接用户名,可以切换到root,但是不推荐使用,因为不安全

9 系统信息相关命令

9.1 时间和日期

序号 命令 日期
01 date 查看系统时间
02 cal calender 查看日历,-y 选项可以查看一年的日历

9.2 磁盘信息

序号 命令 作用
01 df -h disk free 显示磁盘剩余空间
02 du -h [目录名] disk usage 显示目录下的文件大小

-h以人性化的方式显示文件大小

9.3 进程信息

序号 命令 作用
01 ps aux process status 查看进程的详细状况
02 top 动态显示运行中的进程并且排序
03 kill [-9] 进程代号 终止制定代号的进程,-9 表示强行终止

ps选项控制:

选项 含义
a 显示终端上的所有进程,包括其他用户的进程
u 显示进程的详细状态
x 显示没有控制终端的进程
  • ps默认只会显示当前用户通过终端启动的应用程序
  • 要退出top可以直接输入q
  • 使用kill命令时,最好只终止由当前用户开启的进程,而不要终止root身份开启的进程,否则可能导致系统崩溃

10 其他命令

10.1 find 命令

序号 命令 作用
01 find [路径] -name “*.py” 查找指定路径下扩展名是.py 的文件,包括子目录
  • 如果省略路径,表示在当前文件夹下查找
  • 之前学习的通配符,在使用find命令时同时可用

10.2 ln 命令

序号 命令 作用
01 ln -s 被连接的源文件 链接文件 类似于Windows创建快捷方式
  • 没有-s选项建立的是一个硬链接文件。两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接
  • 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动连接文件,仍能够正常使用

10.3 tar 命令

  • tar是 Linux 中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以吧一个打包的大文件恢复成一系列文件

  • 命令格式如下:

    打包文件:
    tar -cvf 打包文件.tar 被打包的文件/路径...

    解包文件:
    tar -xvf 打包文件.tar

tar选项说明:

选项 含义
c 生成档案文件,创建打包文件
x 解开档案文件
v 列出归档解档的详细过程,显示进度
f 指定档案文件名称,f 后面一定是.tar 文件,所以必须放选项最后

10.4 gzip 命令

  • targzip命令结合可以实现文件打包和压缩

    • tar只负责打包文件,但不压缩
    • gzip压缩tar打包后的文件,其扩展名一般用xxx.tar.gz
  • tar命令中有一个选项-z 可以调用gzip,从而可以方便实现压缩和解压缩的功能

  • 命令格式如下:

    压缩文件:
    tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...

    解压缩文件:
    tar -zxvf 打包文件.tar.gz

    解压缩到制定路径:
    tar -zxvf 打包文件.tar.gz -C 目标路径

使用-C 选项时,要解压缩的目录必须存在

10.5 bzip(two) 命令

  • tarbzip2命令结合可以实现与gzip命令相同的功能

    • bzip2压缩tar打包后的文件,其扩展名一般用xxx.tar.bz2
  • tar命令中只有一个选项-j可以调用bzip2,从而可以方便实现压缩和解压缩的功能

  • 命令格式如下:

    压缩文件:
    tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径...

    解压缩文件:
    tar -jxvf 打包文件.tar.bz2

10.6 apt 命令

  • apt是Advanced Packing Tool,是Linux 下的一款安装包管理工具

  • 可以在终端方便的安装/卸载/更新软件包

  • 命令格式如下:

    安装软件:
    sudo apt install 软件包

    卸载软件:
    sudo apt remove 软件名

    更新已安装的包:
    sudo apt upgrade

5 查询命令帮助

5.1 –help

command --help

说明:

  • 显示command命令的帮助信息

5.2 man

man command

说明:

  • 查询command命令的使用手册

man是manual的缩写,是Linux 提供的一个手册,包含了绝大部分的命令、函数的详细使用说明

操作键 功能
空格键 显示手册页的下一屏
Enter键 一次滚动手册页的一行
b 回滚一屏
f 前滚一屏
q 退出
/word 搜索word 字符串

6 终端快捷键

6.1 自动补全

  • 在敲出文件/目录/命令的前几个字母后,按下tab键:
    • 如果无歧义,系统会自动补全
    • 如果存在其他文件/目录/命令,再按一下tab键,系统会提示可能存在的命令

6.2 曾经使用过的命令

  • /光标键可以在曾经使用过的命令之间来回切换
  • 如果想要退出选择,并不想执行当前选中的命令,可以按ctrl + c

87

文章作者: keQsia
文章链接: http://keqsia.github.io/2020/07/20/linux%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 keQsia的博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝