一.Linux基础
1.1 操作系统的作用
没有安装操作系统的计算机,通常被称为裸机
如果想在裸机上运行自己所编写的程序,必须用机器语言书写程序
如果计算机上安装了操作系统,就可以在操作系统上安装支持的高级语言环境,用高级语言开发程序
操作系统的作用:
●直接控制不同的硬件进行工作
●把操作硬件的方法封装成一个又一个的系统调用,供其他成员直接访问
1.2 主流操作系统
根据应用领域不同分为四类操作系统
★桌面操作系统
★服务器操作系统
★嵌入式操作系统
★移动设备操作系统
1>桌面操作系统
Windows系列:用户群体大/安全性稳定性不好
MacOS:适用于开发人员/基于Unix
Linux:应用软件少
2>服务器操作系统:
Linux:安全、稳定、免费。占有率高
Windows Server:付费。占有率低
3>嵌入式操作系统
Linux:
4>移动设备操作系统
ios:
Android(基于Linux)
1.3 虚拟机
虚拟机:指通过软件模拟的具有完整硬件系统功能的。运行在一个完全隔离环境中的完整的计算机系统
1.4 Linux发展历程
Unix 肯汤普逊 丹尼斯里奇 星际旅行游戏
Linux 林纳斯 为访问大学主机上的新闻和邮件
1.5 Linux内核版本
●内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。它提供了一个在裸设备与应用程序之间的抽象层
●终端命令->系统调用->硬件
1.6 Linux文件和目录结构
单用户操作系统和多用户操作系统
●单用户操作系统:指一台计算机在同一时间只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源
Windows XP之前的版本都是单用户操作系统
●多用户操作系统:指一台计算机在同一时间可以由多个用户使用。多个用户共同享用系统的全部硬件和软件资源
Unix和Linux的设计初衷就是多用户操作系统
1.7 常用linux终端命令
在职场中,大量的服务器维护工作都要在远程通过SSH客户端来完成。并没有图形界面、所有的维护工作都需要通过命令来完成
Ctrl+shift++ 放大终端窗口的字体显示
Ctrl+- 缩小终端窗口的字体显示
命令 | 对应英文 | 作用 |
---|---|---|
ls | list | 查看当前文件夹下的内容 |
pwd | print work directory | 查看当前文件夹 |
cd[目录名] | change directory | 切换文件夹 |
touch[文件名] | touch | 如果文件不存在,新建文件 |
mkdir[目录名] | make directory | 创建目录 |
rm[文件名] | remove | 删除指定的文件名 |
clear | clear | 清屏 |
自动补全:在敲出文件/目录/命令的前几个字母之后,按下tab键,ctrl+c退出选择
1.8 终端命令
终端命令格式
Command [-options] [parameter]
Command:命令名,相应功能的英文单词或单词的缩写
[-option]:选项,可用来对命令进行控制,也可以省略
Parameter:传给命令的参数。可以是一个、两个或者多个
[ ] 代表可选
删除文件夹命令 rm -rf/-r [文件名]
查询命令帮助信息
command --help
mkdir --help
man command
man mkdir
1.9 文件与目录常用命令
●查看目录内容 ls 类似于Dos下的dir命令,[.文件名]隐藏文件
ls -a 显示隐藏文件 .当前所在目录 ..显示上级目录
ls -l 以列表形式显示文件的详细信息
ls -h 配合-l以人性化形式显示文件大小(ls -l -h = ls -lh)
尧泽艾拍太
通配符
*任意多个字符
?代表任意一个字符
[]提取匹配的字符组 lsnbsp;[1234]23.txt ls [1-3]23.txt
●切换目录 cd
cd/cd ~ 切换到当前用户的主目录
cd - 在最近两次工作目录切换
●创建和删除操作
touch
rm rm删除的目录不能恢复
rm -f 强制删除,忽略不存在的文件,无须提示
rm -r 递归地删除目录下的内容,删除文件夹时必须加此参数
mkdir
mkdir -p 可以递归创建目录 mkdir -p a/b/c/d
●拷贝和移动文件
tree [目录名] 以树状图列出文件目录的结构
tree -d 只显示目录不显示文件
cp 源文件 目标文件 复制文件或目录
cp -I 覆盖文件前提示
mv 源文件 目标文件 移动文件/目录或目录重命名
●查看文件内容
cat 文件名 查看文件内容、创建文件、文件合并、追加文件内容等功能
cat -b 文件名 对非空行显示行号
cat -n 文件名 对输出的所有行编号
more 文件名 分屏显示文件内容
grep 搜索文本文件名 搜索文本文件内容
grep as 123.txt
-n 显示匹配行及行号
grep -n as 123.txt
-v 显示不包含匹配文本的所有行
grep -nv as 123.txt
-I 忽略大小写
常用的搜索模式
^a 行首,搜索以a开头的行
Ke$ 行尾,搜索以ke结束的行
●其他 echo echo会在终端中显示参数指定的文字,通常会和重定向联合使用 重定向>和>> 将本应显示在终端的内容输出/追加到指定的文件中 >表示输出 >echo hello python > a >>表示追加 管道| 将一个命令的输出通过管道作为另一个命令的输入 常用的管道命令有: >more: ls -lha ~ | more >grep: ls -lha ~| grep Do
1.10 关机/重启
shutdown 选项 时间 关机/重新启动
shutdown 命令可以安全关闭或者重新启动
-r 重新启动 不指定选项和参数,默认表示1分钟之后关闭电脑
-c 取消关机计划
常用命令
重新启动操作系统,其中now表示现在
shutdown -r now
立刻关机,其中now表示现在
shutdown now
系统在今天的20:30会关机
shutdown 20:30
系统再过十分钟自动关机
shutdown +10
1.11 查看和配置网卡信息
ifconfig 查看/配置计算机当前的网卡配置信息
ping 检测到目标ip地址的连接是否正常
127.0.0.1 用于本地回环测试
网卡(我们可以把电脑比作电话,网卡相当于SIM卡,IP地址相当于电话号码)
网卡是一个专门负责网络通讯的硬件设备
IP地址是设置在网卡上的地址信息
1.12 远程登录和复制文件(Windows没默认安装)
ssh用户名@ip secure shell 关机/重新启动
scp 用户名@ip:文件名或路径 用户名@ip文件名或路径 secure copy 远程复制文件
ssh基础(数据传输是加密、压缩的)
在linux中SSH是非常常用的工具,通过ssh客户端我们可以连接到运行了SSH服务器的远程机器上
SSH客户端是一种使用Secure shell(SSH)协议连接到远程计算机的软件程序
SSH是目前可靠、专门为远程登录会话和其他网络服务提供安全性的协议
域名和端口号
域名:由一串用点分隔的名字组成,例如:www.itcast.cn(是IP地址的别名,方便用户记忆)
端口号:通过ip地址找到计算机,通过端口号可以知道计算机上运行的应用程序(访问服务器时候没有指定端口号,使用默认的端口号)
ssh客户端的简单使用
◆使用exit退出当前用户的登陆
◆ssh这个终端命令只能在Linux或者Unix系统下使用
◆如果在windows系统中,可以安装putty,或者Xshell客户端软件即可
ssh [-p port] user@remote ssh -p 22 python@目标ip
user:是在远程计算机上的用户名,如果不指定的话默认为当前用户
remote:是远程机器的地址,可以是IP/域名,或者是后面会提到的别名
port:是SSH Server监听的端口
Windows下SSH客户端的安装
![Putty和Xshell]:{http://xshellcn.com}
SSH高级(有关SSH配置信息都保存在用户家目录下的.ssh目录下)ls -alh known_host
★免密码登陆 **本地使用私钥对数据进行加密/解密 服务器使用公钥对数据进行加密/解密
步骤:
■配置公钥
执行ssh-keygen即可生成SSH钥匙,一律回车即可—生成两个文件id-rsa.pub公钥 id-rsa私钥
■上传公钥到服务器
执行ssh-copy-id -p port user@remote,可以让远程服务器记住我们的公钥
★配置别名
每次都输入ssh -p port user@remote,时间久了就会觉得很麻烦,特别是当user,remote和port都得输入,而且还不好记忆
而配置别名可以让我们进一步偷懒,譬如用:ssh mac来替代上面这么一长串,那么就在~/.ssh/config里面追加以下内容(创建config文件):
Host mac
hostName ip地址
user itheima
port 22
保存之后,即可用ssh mac实现远程登录了,scp同样可以使用
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 scp -P 22 -r python@remote:Desktop demo
把远程家目录下的Desktop复制到当前目录下的demo目录
scp -r user@remote:Desktop demo
1.13 用户权限相关命令
在Linux系统中,无论是本机或是远程登录系统。每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限
在Linux系统中,可以指定每一个用户针对不同的文件或者目录的不同权限
★对文件/目录的权限包括
序号 | 权限 | 缩写 | 数字代号 |
---|---|---|---|
01 | 读 | read | 4 |
02 | 写 | write | 2 |
03 | 执行 | excute | 1 |
★组
为了方便用户管理,提出了组的概念
在实际应用中,可以预先针对组设置好权限,然后将不同的用户添加到对应的组中,从而不用为每一个用户设置权限
文件权限示例/目录权限示例
目录 | 拥有者权限 | 主权限 | 其他用户权限 |
---|---|---|---|
- | r w - | r w - | r - - |
d | r w x | r w x | r - x |
硬链接数:有多少种途径能够访问指定的目录,子目录越多硬链接数越多
拥有者:家目录下文件/目录的拥有者通常就是当前用户
chmod简单实用
chmod可以修改用户/组对文件/目录的权限
chmod +(增加权限)/-(减少权限)rwx 文件名/目录名
linux终端执行文件.(当前目录)/01.py
执行01.py文件,先设置文件为可执行权限chmod +x 01.py
01.py文件
在Linux终端中,要想针对目录执行终端命令,必须赋可执行权限,可读权限代表打开文件权限,可写表示修改文件权限
超级用户
●Linux系统中的root账号通常用于系统的维护和管理,对操作系统的所有资源具有所有访问权限
sudo
●su是substitute user的缩写,表示使用另一个用户的身份
●sudo命令用来以其他身份来执行命令,预设的身份是root
●用户使用sudo时,必须先使用密码,之后有5分钟的有效期限,超过期限则需要重新输入密码
若未经授权的用户企图使用sudo,则会发出警告邮件给管理员
1.14 组管理终端命令
创建组/删除组的终端命令都需要通过sudo执行
序号 | 命令 | 作用 |
---|---|---|
01 | groupadd 组名 | 添加组 |
02 | groupdel 组名 | 删除组 |
03 | cat/etc/group | 确认组信息 |
04 | chgrp 组名 文件/目录名 | 修改文件/目录的所属组 |
演练目标
在python用户的桌面文件夹下创建python学习目录
mkdir python学习
新建dev组
sudo groupadd dev
将python学习目录的组修改为dev
sudo chgrp -R dev Python学习/
1.14用户管理 终端命令
创建用户/删除用户/修改其他用户密码的终端命令都需要通过sudo执行
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | useradd -m -g 组 新建用户名 | 新建新用户 | ●-m自动建立用户家目录 ●-g 指定用户所在的组,否则会建立一个和用户同名的组 |
02 | passwd 用户名 | 设置用户密码 | 如果是普通用户,直接用passwd可以修改自己的账户密码 |
03 | userdel -r 用户名 | 删除用户 | -r 选项会自动删除用户家目录 |
04 | cat /etc/passwd ' | ' grep 用户名 | 确认用户信息 |
■创建用户时,如果忘记添加-m选项指定新用户的家目录—最简单的方法就是删除用户,重新创建
■创建用户时,默认会创建一个和用户名同名的组名
■用户信息保存在/etc/passwd文件中
1.15 查看用户信息
序号 | 命令 | 作用 |
---|---|---|
01 | Id[用户名] | 查看用户UID和GID信息 |
02 | Who | 查看当前所有登陆的用户列表 |
03 | Whoami | 查看当前登陆用户的账号名 |
id python
用户信息保存在/etc/passwd文件中
组信息保存在/etc/group文件中
passwd文件
/etc/passwd文件存放的是用户信息,由六个分号组成的七个信息,分别是
1.用户名
2.密码(x,表示加密的密码)
3.UID(用户标识)
4.GID(组标识)
5.用户全名或本地账号
6.家目录
7.登陆使用的shell命令,就是登陆以后,使用的终端命令。ubuntu默认是dash
1.16 usermod命令
usermod 可以用来设置用户的主题/附加组 和登陆shell
主组:通常在新建用户时指定,在etc/passwd的第四列GID所对应的组
附加组:在etc/group中最后一列表示该组的用户列表,用于指定用户的附加权限
设置了用户的附加组之后,需要重新登陆才能生效
修改用户的主组(passwd 中的 GID)
usermod -g 组 用户名
修改用户的附加组
usermod -G 组 用户名
修改用户登录Shell
usermod -s /bin/bash
注:默认使用useradd添加的用户是没有权限使用sudo以root身份执行命令的,可以使用以下命令,将用户添加到sudo附加组中
1.17 which命令(查看所用命令所在位置)
■etc/passwd是用于保存用户信息的文件
■/usr/bin/passwd是用于修改用户密码的程序
which ls
bin和sbin
◆在linux中,绝大多数可执行文件都是保存在/bin、/sbin、/usr/bin、/usr/sbin
◆/bin(binary)是二进制执行文件目录,主要用于具体应用
◆/sbin(system binary)是系统管理员专用的二进制代码存放目录,主要用于系统管理
◆/usr/bin(user commands for applications)后期安装的一些软件
◆/usr/sbin(super user commands for applications)超级用户的一些管理程序
cd这个终端命令是内置在系统内核中的,没有独立的文件,因此用which无法找到cd命令的位置
1.18 切换用户
序号 | 命令 | 作用 | 说明 |
---|---|---|---|
01 | su -用户名 | 切换用户,并且切换目录 | 可以切换到用户家目录,否则保持位置不变 |
02 | exit | 退出当前账号 |
权限不够,使用su命令切换到有权限的用户,exit退出该用户返回原来用户,再次exit退出shell
su - 不接用户名 切换到root用户,不安全
su: Authentication failure
1.19 修改文件权限
序号 | 命令 | 作用 |
---|---|---|
01 | chown | 修改拥有者 |
02 | chgrp | 修改组 |
03 | chmod | 修改权限 |
修改文件目录的拥有者
chown 用户名 文件名|目录名 sudo chown zhangsan python学习/ --修改python学习目录的所有者
递归修改文件目录的组
chgrp -R 组名 文件名|目录名 -R可以递归修改该目录下的子目录及文件
递归修改文件权限
chmod -R 755 文件名|目录名
chmod在设置权限时,可以简单的用三个数字进行表示,分别对应拥有者/组和其他用户的权限
拥有者 | 组 | 其他 |
---|---|---|
r w x | r w x | r w x |
4 2 1 | 4 2 1 | 4 2 1 |
1.20 系统信息相关命令
方便通过远程终端维护服务器时,查看服务器上当前系统日期和时间/磁盘空间 占用情况/程序执行情况
时间和日期
■date
■cal
序号 | 命令 | 作用 |
---|---|---|
01 | date | 查看系统时间 |
02 | cal | calendar查看日历,-y选项可以查看一年的日历 |
磁盘和目标空间
■df
■du
序号 | 命令 | 作用 |
---|---|---|
01 | df -h | disk free显示磁盘剩余空间 |
02 | du -h [目标名] | disk usage显示目标下的文件大小 |
-h 以人性化的方式显示文件大小
进程信息 所谓进程通俗的说就是当前正在进行的一个程序
■ps aux process status查看进程的详细状况
ps默认只会显示当前用户通过终端启动的应用程序
ps选项说明功能
选项 | 含义 |
---|---|
a | 显示终端上的所有进程。包括其他用户的进程 |
u | 显示进程的详细状态 |
x | 显示没有控制终端的进程(显示所有正在执行的程序) |
■top 动态显示运行中的进程并且排序
要停止top可以直接输入q
■kill [-9] 进程代号 终止指定代号的进程,-9表示强行终止
使用kill命令时,最好只终止由当前用户开启的进程,而不要终止root身份开启的进程,否则可能导致系统崩溃
1.21 其他命名
查找文件
find
find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件
序号 | 命令 | 作用 |
---|---|---|
01 | find[路径] -name “*.py” | 查找指定路径下扩展名是”.py”的文件,包括子目录 |
如果省略路径,表示在当前文件夹下查找
之前学习的通配符,在使用find命令时同时可用
搜索在桌面目录下,文件名包含1的文件
find Desktop/ -name “1”
软链接
ln
序号 | 命令 | 作用 |
---|---|---|
01 | ln -s 被链接的源文件链接文件 | 建立文件的软链接,用通俗的方式讲类似于windows下的快捷方式 |
没有-s选项建立的是一个硬链接文件 (硬链接):链接的文件删除不会影响源文件
两个文件占用相同的硬盘空间,工作中几乎不会建立文件的硬链接
源文件要使用绝对路径,不能使用相对路径没这样可以方便移动链接文件后,仍然能够正常使用
在Linux中文件名和文件的数据是分开存储的
■演练目标
将桌面目标下的01.py移动到demo/b/c目录下
mv 01.py demo/b/c
在桌面目录下新建01.py的软链接FirstPython的软链接
相对路径:ln -s demo/b/c/01.py FirstPython
绝对路径:ln -s /home/python/Desktop/demo/b/b/01.py FirstPython
将FirstPython移动到demo目录下,对比使用相对路径和决定路径的区别
mv First* demo
打包和压缩
tar
在不同的操作系统中,常用的打包压缩方式是不同的,windows常用rar;mac常用zip,Linux常用tar.gz打包解包
tar是Linux中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中们也可以把一个
打包的大文件恢复成一系列文件,不负责压缩
■tar的命令格式如下:
打包文件
tar -cvf 打包文件.tar 被打包的文件/路径……
解包文件
tar -xvf 解包文件.tar
■tar选项说明
选项 | 含义 |
---|---|
c | 生成档案文件,创建打包文件 |
x | 解开档案文件 |
v | 列出归档解档的详细过程,显示进度 |
f | 规定档案文件名称,文件后面一定是.txt文件,所以必须放选项最后 |
f选项必须放在最后,其他选项可以随意
■打包解包演练
删除桌面下所有的内容
cd Desktop->rm -r *
在桌面下新建三个空白文件 01.py、02.py、03.py
touch 01.py
touch 02.py
touch 03.py
将这三个文件打一个py.tar的包
tar -cvf py.tar 01.py 02.py 03.py
新建tar目录,并且将py.tar移动到tar目录下
mkdir tar
mv py.tar tar
解包py.tar
tar -xvf py.tar
压缩/解压缩
■gzip
tar与gzip命令结合可以使用实现文件打包和压缩
tar只负责打包文件,包不压缩
用gzip压缩tar打包后的文件,其扩展名一般用xxx.tar.gz
在Linux中,最常见的压缩文件格式就是XXX.tar.gz
在tar命令中有一个选项-z可以调用gzip,从而可以方便的实现压缩和解压缩的功能
命令格式如下
压缩文件
tar -zcvf 打包文件.tar.gz 解压缩的文件/路径……
解压缩文件
tar -zxvf 打包文件.tar.gz
解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
选项 | 含义 |
---|---|
-c | 解压缩到指定目录。注意:要解压缩的目录必须存在 |
■bzip2(two)
tar与bzip2命令结合可以使用实现文件打包和压缩(用法和gzip一样)
tar只负责打包文件,但不压缩
用bzip2压缩tar打包后的文件,其扩展名一般用XXX.tar.bz2
在tar命令中有一个选项-j可以调用bzip2,从而可以方便的实现压缩和解压缩的功能
命令格式如下
压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径……
解压缩文件
tar -jxvf 打包文件.tar.bz2
软件安装
apt -get
apt是advanced Packaging.Tool,是linux下的一款安装包管理工具
可以在终端中方便的安装/卸载/更新软件包
安装软件
$ sudo apt install 软件名
卸载软件
$ sudo apt remove 软件名
更新已安装的包
$ sudo apt upgrade
■安装演练
一个小火车提示
$ sudo apt install sl
$ sl
一个比较漂亮的负责当前进程排名的软件
$ sudo apt install htop
■配置软件源
◆如果希望在ubuntu中安装软件更加快速,可以通过设置镜像源,选择一个访问网速更快的服务器来提供软件下载/安装服务
◆更换服务器之后,需要一个相对比较长时间的更新过程,需要耐心等待。更新完成后,再安装软件都会从新设置的服务器下载软件了
所谓镜像源,就是所有服务器的内容都是相同的(镜像),但是根据所在位置不同,国内服务器通常速度会更快一些