1. Linux简介
- Window属于单用户操作操作系统
- Unix和Linux属于多用户操作系统
Linux目录
/
根目录:一般根目录只存放目录,linux中只有一个跟目录
/bin,/usr/bin
:可执行二进制文件的目录,如常见的命令ls,tar,mv,cat
等
/boot
:放置linux系统启动时用到的一些文件
/dev
:存放linux系统下的设备文件
/etc
:系统配置文件的存放目录,不建议再此目录下存放可执行文件,重要的配置文件有
/etc/inittab
/etc/fstab
/etc/init.d
/etc/X11
/etc/sysconfig
/etc/xinetd.d
/home
:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
2. Linux命令
2.1. 常用linux命令
命令 |
英文 |
含义 |
ls |
list |
查看当前文件夹的内容 |
pwd |
print work directory |
查看当前所在文件夹 |
cd [目录名] |
change directory |
切换文件夹 |
touch [文件名] |
touch |
如果文件夹不存在就创建 |
mkdir [目录名] |
make directory |
创建目录 |
rm [文件名] |
remove |
删除指定的文件名 |
clear |
clear |
清屏 |
2.2. Linux的格式
command [-option] [parameter]
[-option]
:选项,可以对命令进行控制,也可以省略
parameter
:传给命令的参数,可以是0,1,或者多个
2.3. 查询命令帮助信息
(1)--help
command --hep
(2) man
man command
操作中的说明
操作键 |
功能 |
空格 |
显示手册的 下一屏 |
Enter |
一次滚动手册页的一行 |
b |
回滚一屏 |
f |
前滚一屏 |
q |
退出 |
/word |
搜索word字符串 |
3. 命令讲解
3.1. 文件目录相关命令
(1) 查看目录内容:ls
参数 |
含义 |
-a |
显示指定目录下的所有子目录与文件,包括隐藏文件 |
-l |
以列表方式显示文件的详细信息 |
-h |
配合-l 以人性化的方式显示文件大小 |
ls通配符
通配符 |
含义 |
* |
代表任意个数的字符 |
? |
代表任意一个字符 |
[] |
表示可以匹配字符组中的任意一个 |
[abc] |
匹配a,b,c中的任意一个 |
[a-f] |
匹配a到f范围内的任意字符 |
(2) 切换目录:cd
命令 |
含义 |
cd |
切换到当前用户的主目录 |
cd ~ |
切换到当前用户的主目录 |
cd . |
保持在当前目录不变 |
cd .. |
切换到上级目录 |
cd - |
可以在最近两次工作目录之间来回切换 |
(3) 创建和删除操作:touch, rm, mkdir
touch 创建文件
- 如果文件不存在,可以创建一个空白文件
- 如果文件已经存在,可以修改文件的最后一次修改日期
mkdir 创建一个新目录
rm 删除文件或目录
使用rm命令会直接从磁盘中删除,无法恢复
参数 |
含义 |
-f |
强制删除,忽略不存在的文件,无需提示 |
-r |
递归删除目录下的内容,删除文件夹事必须加入这个参数 |
(4) 拷贝和移动文件tree,cp,mv
命令 |
作用 |
tree [目录名] |
以树状图列出文件目录结构 |
cp 源文件 目标文件 |
复制文件或者目录 |
mv 源文件 目标文件 |
移动文件或者目录/文件或者目录重命名 |
tree 树状图列出文件目录
cp 复制
选项 |
含义 |
-i |
覆盖文件提示 |
-r |
若给出的源文件是目录文件,则cp 将递归复制该目录下的所有子目录和文件,目标文件必须是一个目录 |
mv 移动+重命名
(5) 查看文件内容: cat, more, grep
命令 |
作用 |
cat 文件名 |
查看文件内容、创建文件、文件合并、追加文件内容等功能 |
more 文件名 |
分屏显示文件内容 |
grep 搜索文本文件名 |
搜索文本文件内容 |
cat 查看文件内容,创建文件,文件合并,追加文件内容
选项 |
含义 |
-b |
对非空输出行编号 |
-n |
对输出的所有航编号 |
more分屏显示内容
操作键 |
含义 |
空格 |
显示手册的下一屏 |
Enter键 |
一次滚动手册页的一行 |
b |
回滚一屏 |
f |
前滚一屏 |
q |
退出 |
grep 搜索文本
选项 |
含义 |
-n |
显示匹配行和行号 |
-v |
显示不包含匹配文本的所有行 |
-i |
忽略大小写 |
常有的两种模式查找
参数 |
含义 |
^a |
行首,搜找以a开头的行 |
`ke |
参数 |
----- |
--------------------- |
^a |
行首,搜找以a开头的行 |
行尾,搜以ke结尾的行 |
|
(6) 其他:echo, 重定向>/>>, 管道|
echo 在终端中显示传递给的参数,类似print (一般和重定向一起使用)
重定向:将本应该输出到终端的内容输出到指定文本中
管道|:将一个命令的输出通过通道当做另一个命令的输入
常用的管道命令
3.2 远程管理命令
(1)关机、重启
# 重新启动操作系统,其中now表示现在
shutdown -r now
# 立刻关机
shutdown now
# 系统会在20:00 关机
shutdown 20:00
# 系统在10分钟后关机
shutdown +10
# 取消关机
shutdown -c
(2)查看或配置网卡信息
命令 |
作用 |
ifconfig |
查看/配置计算机当前的网卡配置信息 |
ping ip 地址 |
检测到目标ip地址的连接是否正常 |
网卡:
- 负责网络通讯的硬件设备
- IP地址就是设置在网卡上的地址信息
(3)远程登录ssh和复制文件
ssh是linux中非常常用的工具,通过ssh客户端我们可以连接到运行了ssh服务器的远程机器上面去
- SSH客户端是一种使用
Secure sheel (SSH)
协议链接到远程计算机的软件程序
SSH
是目前比较可靠,专门为远程登录会话和其他网络服务提供安全性的协议
- 通过SSH协议,可以游戏防止远程管理过程中的信息泄露
- 通过SSH协议,可以对所有传输的数据进行加密
域名和端口号
域名
- 由一串用点分隔的名字组成
www.baidu.com
- IP地址的别名
端口号
- IP地址:通过IP地址找到网络上的计算机
- 端口号:通过端口号可以找到计算机上运行的应用程序
- 常见的服务端口号列表
服务 |
端口号 |
SSH服务器 |
22 |
Web服务器 |
80 |
HTTPS |
443 |
FTP服务器 |
21 |
ssh客户端的简单使用
ssh [-p port] user@remote
- user是在远程机器的用户名
- remote是远程机器的地址,可以是IP或者域名,或者别名
- port是SSH server监听的端口,如果不指定,默认22
提示
- 使用
exit
退出当前用户的登录
- Window系统中,可以安装
XShell
来使用shell
XShell连接到ubuntu
- 首先在ubuntu中查看是否安装和开启ssh服务
# 查看是否安装ssh
ssh localhost
# 安装ssh-server
sudo apt-get install openssh-server
# 启动服务
sudo /etc/init.d/ssh start
# 检查是否启动成功
ps -e|grep ssh
(4) scp 远程拷贝文件
- scp用于远程拷贝文件
- 它的地址格式和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
选项 |
含义 |
-r |
将递归复制该目录下的所有子目录和文件 |
-P |
若远程SSH的端口不是22,需要使用大写字母-P选项指定端口 |
FileZilla: 传输文件
3.3. 用户权限命令
基本概念
- 用户是linux系统的重要部分,包括用户和组的管理
- Linux中,可以指定每一个用户针对不同的文件或者目录的不同权限
- 对于文件/目录的权限包括
权限 |
缩写 |
数字代码 |
读 |
r |
4 |
写 |
w |
2 |
执行 |
x |
1 |
组
- 为了方便用户管理,提出了组的概念
- 在实际应用中,可以预先对组设置好权限,然后将不同的用户添加到对应的组中,从而不用依次为每个用户设置权限
(1)ls -l扩展:查看目录详细信息
- 权限:第一个字符如果是d表示目录
- 硬链接数:有多少种方式可以访问到当前目录/文件
- 拥有者:家目录下 文件/目录 的拥有者通常是当前用户
- 组,在linux中,很多时候会出现组名和用户名相同的情况
- 大小
- 时间
- 名称
(2)chmod 修改用户/组 对文件/目录的权限
chmod +/- rwx 文件名|目录名
对于目录的修改
(3)root超级用户
- Linux系统的root账号通常用于系统的维护和管理,对于操作系统的所有资源具有访问权限
- 大多数linux中,都不推荐直接使用root账号登录系统
sudo
- su是substitute user的缩写,表示使用另外一个用户的身份
- sudo命令用来以其他身份来执行命令,预设为root
- 用户使用sudo时,需要输入密码
3.4 组管理sudo-based
创建组/删除组都需要用sudo执行
命令 |
作用 |
groupadd 组名 |
添加组 |
groupdet 组名 |
删除组 |
cat /etc/group |
确认组的信息 |
chgrp -R 组名 文件/目录名 |
递归修改文件/目录的所属组 |
3.5 用户管理sudo-based
创建用户/删除用户/修改其他用户密码需要通过sudo
(1) 创建用户/设置密码/删除用户useradd, passwd, userdel
命令 |
作用 |
说明 |
useradd -m -g 组 新建用户名 |
添加用户名 |
-m 自动建立用户家目录
-g :指定用户所在的组,否则会建立一个和同名的组 |
passwd 用户名 |
设置用户名 |
如果是普通用户,直接用passwd |
userdel -r 用户名 |
|
|
创建用户
(2)查看用户信息id, who, whoami
命令 |
说明 |
id [用户名] |
查看用户UID和GID信息 |
who |
查看当前所有登录的用户列表 |
whoami |
查看当前登录用户的账户名 |
id: 用户代号和组代号
passwd文件
/etc/passwd
文件存放的是用户的信息,由6个分号组成的7个信息,分别是:
- 用户名
- 密码(x,表示加密的密码)
- UID:用户识别
- GID:组识别
- 用户全面或本地账号
- 家目录
who/whoami
(3)usermod:设置用户的主组/附加组和登录shell: sudo-based
- 主组:通常在新建用户时指定,在
etc/passwd
的第四列GID对应的组
- 附加组:在
etc/group
中的最后一列表示该组的用户列表,用于指定用户的附加权限
# 修改用户的主组
usermod -g 组 用户名
# 修改用户的附加组
usermod -G 组 用户名
# 修改用户登录shell
usermod -s /bin/bash 用户名
# 添加用户到sudo
usermod -G sudo 用户名
设置用户的主/附加组
设置登录shell
- 登录使用的是shell,就是登录后,使用的终端命令,ubuntu默认的是dash,需要改成shell的bash,更好
(4) which:查看命令所在位置
/etc/passwd
:是用于保存用户信息的文件,只是文本文件无法执行
/usr/bin/passwd
:是用于修改用户密码的程序,可执行
which
可以查看执行命令所在位置
which ls
bin和sbin
- 在linux中,绝大多数可执行文件都是在保存在
/bin
,/sbin
,/usr/bin
,/usr/sbin
/bn
: 二进制执行文件目录,主要用于具体应用
/sbin
:是系统管理员专用的二进制代码存放目录,主要用于系统管理
/usr/bin
:后期安装的一些软件
/usr/sbin
:超级用户的一些管理程序
(5)su 切换用户
命令 |
作用 |
su -用户名 |
切换用户,并且切换到目标用户得家目录 |
exit |
退出当前登录账号 |
(6)修改文件权限chown, chgrp, chmod
命令 |
作用 |
chown |
修改拥有者 |
chgrp |
修改组 |
chmod |
修改权限 |
# 修改文件|目录的拥有者
chown 用户名 文件名|目录名
# 递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
# 递归修改文件权限
chmod -R 755 文件名|目录名
chmod的数字表示
chmod设置权限时,可以简单的使用三个数字分别对应拥有者/组合其他用户的权限
# 直接修改文件|目录的 读写执行权限,但是不能精确到 拥有者|组|其他
chmod +/1 rwx 文件名|目录名
3.6. 系统信息
- 本节主要为方便远程终端维护服务器,查看服务器上当前的系统日期和时间/磁盘情况等情况
(1) 时间和日期
命令 |
作用 |
date |
系统时间 |
cal |
查看日历,-y 可以查看一年的日历 |
(2)磁盘信息
命令 |
作用 |
df -h |
disk free 显示磁盘剩余空间 |
du -h [目录名] |
disk usage显示目录下的文件大小 |
(3) 进程信息
命令 |
作用 |
ps aux |
process status 查看进程的详细情况 |
top |
动态显示运行中的进程并排序 |
kill [-9] 进程代号 |
终止指定代号的进程,-9表示强制终止 |
ps: 全部显示
ps
默认只会显示当前用户通过终端启动的应用程序
ps
的选项
选项 |
含义 |
a |
显示终端上所有的进程,包含其他用户的进程 |
u |
显示进程的详细状态 |
x |
显示没有控制中终端的进程 |
- 使用kill命令时,最好只终止当前用户开启的进程,而不要终止root身份开启的进程,不然系统会崩溃
top: 动态显示并排序
3.7 其他命令
(1)查找文件find
命令 |
作用 |
find [路径] -name "*.py" |
查找指定路径下扩展名为.py的文件,包括子目录 |
- 如果省略路径,就会在当前文件夹下查找
- 之前学习的通配符,可以在这里使用
(2)软链接: 类似快捷方式
命令 |
作用 |
ln -s 被链接的源文件 链接问价 |
建立文件的软链接,类似快捷方式 |
- 没有
-s
选项建立的是一个硬链接
- 两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接
- 源文件要使用绝对路径,不能使用相对路径,可以方便移动链接文件后,仍然能正常使用
软链接和硬链接区分
(3)打包和压缩
打包/解包 tar
tar
是linu常用的备份工具,此命令将一系列文件打包成一个大的文件中,也可以将一个大的文件包恢复成一系列文件
# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径
# 解包文件
tar -xvf 打包文件.tar
打包操作
解包操作
压缩/解压缩 gzip
- tar和gzip命令结合可以实现文件打包压缩
- tar负责打包,不压缩
- gzip压缩tar打包后的文件为
xxx.tar.gz
- tar命令中有一个选项
-z
可以调用gzip,从而实现压缩和解压缩的功能
# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径
# 解压缩文件
tar -zxvf 打包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
(4)软件安装 apt
通过apt安装/卸载软件
- apt是
Advanced packaging tool
,是linux下得一款安装包管理工具
- 可以再终端中方便的安装/卸载/更新软件包
# 安装软件
sudo apt install 软件包
# 卸载软件
sudo apt remove 软件名
# 更新软件
sudo apt upgrade
配置软件源
- 如果希望linu中安装软件,更加快速,可以通过设置镜像源,选择一个访问网速更快的服务器来提供软件下载/安装服务
- 镜像源:就是所有服务器的内容都是相同的,但是根据所在位置不同,国内服务器通常速度更快一些
4. Vim编辑器
4.1. 打开文件
(1)打开
vi 文件名
- 如果文件存在,直接打开
- 如果文件不存在,新建并打开
(2)打开文件并定位行
vi 文件名+行数
(3)异常处理
- 如果vi异常退出,在磁盘上可能保存有交换文件
- 下次再使用vi的时候,会看到如下信息,按下字母
d
可以删除交换文件即可
4.2. 工作模式
vi有三种工作模式:
- 命令模式
- 打开文件首先进入命令模型,是使用vi的入口
- 通过命令对文件进行常规编辑操作,例如:定位、翻页、复制粘贴、删除......
- 在其他图形编辑器下,通过快捷键或者鼠标实现的操作,都能在命令模式下实现
- 末行模式: 执行保存、退出等操作
- 要退出vi,需要在末行模式下输入命令
- 末行模式是vi的出口
- 编辑模式: 正常的编辑文字
末行模式命令
命令 |
功能 |
w |
保存 |
q |
退出,如果没保存,不允许退出 |
q! |
强行退出,不保存退出 |
wq |
保存并退出 |
x |
保存并退出 |
4.3. vi常用命令
命令线路图
- 重复次数
- 在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令重复执行指定次数
- 移动和选择
- vi之所以快,关键在于能够快速定位到要编辑的行
- 移动命令能够和编辑操作命令结合使用
- 编辑操作
- 删除、复制、粘贴、替换、缩π
- 撤销和重复
- 查找替换
- 编辑
4.3. 移动选中命令
(1)上、下、左、右
命令 |
功能 |
h |
向左 |
j |
向下 |
k |
向上 |
l |
香油 |
(2)行内移动
命令 |
功能 |
w |
向后移动一个单词 |
b |
向前移动一个单词 |
数字0 |
行首 |
^ |
行首,第一个不是空白字符的未知 |
` |
命令 |
----- |
------------------------------ |
w |
向后移动一个单词 |
b |
向前移动一个单词 |
数字0 |
行首 |
^ |
行首,第一个不是空白字符的未知 |
行尾 |
|
(3)行数移动
命令 |
功能 |
gg |
文件顶部 |
G |
文件底部 |
数字gg |
移动到数字对应行数 |
数字G |
移动到数字对应行数 |
:数字 |
移动到数字对应行数 |
(4)屏幕移动
命令 |
功能 |
Ctrl + b |
向上翻页 |
Ctrl + f |
向下翻页 |
H |
屏幕顶部 |
M |
屏幕中间 |
L |
屏幕底部 |
(5)移动命令
段落移动
- 在vi中使用空行来区分段落
- 在程序开发时,通常一段功能相关的代码会写在一起--之间没有空行
括号切换
标记
- 在开发时,某一块代码可能需要稍后处理
- 此时先使用
m
增加一个标记,这样可以在需要时快速的跳转回来或者执行其他编辑操作
- 标记名称可以是a-z或者A-Z的任意一个字母
- 添加了标记的行如果被删除,标记也会被删除
- 如果在其他行添加了相同名称的标记,之前添加的标记会被替换
命令 |
功能 |
mx |
添加标记x,x是a-z或者A-Z的任意一个字母 |
'x |
直接定位到标记x所在位置 |
(6)选中文本
- 学习复制命令前,应该先学会如何选中代码
- 在vi中要选择文本,需要现在visual命令切换到可视模式
- vi提供三种可视模式,可以方便程序员选择选中文本的方式
- 按
ESC
可以放弃选中,返回到命令模式
命令 |
模式 |
功能 |
v |
可视模式 |
从光标位置开始按照正常模式选中文本 |
V |
可视行模式 |
选中光标经过的完整行 |
Ctrl + v |
可视块模式 |
垂直方向选中文本 |
4.4. 撤销删除命令
(1)撤销命令 u
命令 |
说明 |
u |
撤销上次命令 |
Ctrl + r |
回复撤销的命令 |
(2)删除命令x,d
命令 |
说明 |
[数字]x |
删除光标所在字符,或者选中文字 |
d |
删除移动命令对应的内容 |
[数字]dd |
删除光标所在行,可以ndd复制多行 |
D |
删除至行尾 |
- 如果使用可视模型中已经选中了一段文本,那么无论使用d还是x,都可以删除
- 删除命令和移动命令可以结合使用:
dw # 从光标位置删除到单词末尾
d0 # 从光标位置删除一行的起始位置
d} # 从光标位置删除到段落结尾
ndd # 从光标位置连续向下删除n行
d代码行G # 从光标所在行,删除到指定代码行,之间的代码
d'a # 从光标所在行,删除到标记a,之间的代码
4.5. 复制、粘贴:y / yy / p
命令 |
说明 |
y(移动命令) |
复制 |
yy |
复制,nyy可以复制多行 |
p |
粘贴 |
提示:
- 命令
d,x
类似剪切操作
- 命令
y
类似复制操作
- 命令
p
类似粘贴操作
4.6. 替换命令
命令 |
说明 |
r |
替换当前字母 |
R |
替换当前行光标后的字符 |
- R命令可以进入替换模式,替换完成后,按下ESC就可以回到命令行模型
4.7. 缩排和重复命令
- 一次性在选中代码前增加4个空格:增加缩进
- 一次性在选中代码前删除4个代码:减少缩进
命令 |
功能 |
>> |
向右增加缩进 |
<< |
向左增加缩进 |
. |
重复上次命令 |
4.7. 查找和替换命令
(1)查找
- 查找到指定内容后,使用
Next
查找下一个出现的位置:
单词快速匹配
命令 |
功能 |
* |
向后查找当前光标所在单词 |
# |
向前查找当前光标所在单词 |
(2)查找并替换
:%s///g
全局替换
:%s/旧文本/新文本/g
替换可视区域范围
:s/旧文本/新文本/g
确认替换
:%s/旧文本/新文本/gc
y-yes
替换
n-no
不替换
a-all
替换所有
q-quit
退出替换
l-last
最后一个
^E
向下滚屏
^r
向上滚屏
4.8 进入编辑模式的6个命令
命令 |
功能 |
i |
在当前字符前插入文本 |
I |
在行首插入文本 |
a |
在当前字符后添加文本 |
A |
在行末添加文本 |
o |
在当前行后面插入一空行 |
O |
在当前行前面插入一空行 |