- Linux能干什么
- Linux的目录结构
- 目录操作
- 文件类操作
- 系统管理
- 命令解释
- configure 是一个脚本文件,用于告诉gcc编译器,python3即将安装到哪里,以及对基础的开发环境检查,检查openssl,检查sqllite,等等
- 编译第一曲,结束后,主要是生成makefile,用于编译的
- 编译第二曲:开始进行软件编译
- 编译第三曲:编译安装,生成python3的可执行程序,也就是生成/opt/python369/
- 编译的第二曲,和第三曲,可以简写成 make && make install #代表make成功之后,继续make install
- 网络命令
- The primary network interface - use DHCP to find our address
- 把对方的文件拿到本机/opt/目录
- 把本地文件发给服务器的指定目录
- 查公网ip地址的命令
详情地址:https://www.cnblogs.com/pyyu/p/9485268.html
Linux能干什么
- 操作系统
- 开源免费
- 服务器
- 效率高
- LNMP 高效免费组合 Linux Nginx MySQL Python
- 服务器集群 虚拟机
Linux的目录结构
1. dev 虚拟设备文件
2. lib 系统软件
3. bin 可执行文件
4. etc 配置文件
5. home 用户目录
6. var 日志
7. usr
8. root 根目录用户
目录操作
- 目录类命令
```shell
ls # 列目录
-l 列出明细,查看权限属性
-lh # -h参数,是显示文件单位,以kb mb gb大小为单位
-a 参看包括隐藏文件
cd # 改变目录位置
- 上次目录位置
~ home家目录
.. 上级目录
. 当前目录
cd ../.. 上退两级目录
pwd # 显示当前目录路径
mkdir # 创建目录
-p: 创建mydir目录以及mydir目录下面的dir_test文件。允许创建目录及子目录
举例: mkdir -p 斗鱼/lol 虎牙/王者农药 #在当前目录创建两个路径(包含子目录)
-m: 创建指定权限的目录
举例:mkdir -m770 filedir # 访问权限为rwxrwx—-
—help mkdir —help # 查看简短帮助信息
rmdir # 删除空目录
tree # 列出目录的树形结构
如果没有这个命令需要先安装
2. find 命令
```shell
语法
find 你要从哪找 -type 你要的文件类型是什么 -size 你要的文件内容多大 -name 你要的内容名字是什么
-type f 是找普通文本文件
-type d 是找 文件夹 类型
-name 是指定文件的名字内容
#在系统上 全局搜索,所有的.txt文件
find / -name "*.txt"
#指定在etc目录下,进行局部搜索,一个网卡配置文件,网卡名字是以ifcfg开头的 ,文本类型文件
find /etc -type f -name "ifcfg*"
1.语法
#用法一
grep "你想过滤的字符串" 需要过滤的文件
准备一个测试的文件test.txt
[root@s25linux tmp]# cat test.txt
跟着我左右右手一个慢动作
#左右右手慢动作重播
一个大西瓜,送给你,也不送给他
ALLOW_HOSTS=[]
2.过滤文件中的相关内容
#找出文件中含有 "大" 字的行,且显示此内容,在哪一行
grep -n "大" test.txt # -n 参数是显示行号
#忽略大小写,找出ALLOW_HOSTS=[]参数是否被修改
grep -i "al" test.txt -i 忽略大小写
#过滤出此文件非空白行,如何操作?
拆解如下
找出所有的空白行
[root@s25linux tmp]# grep "^$" test.txt # "^$" 以空开头,以空结尾,因此是空白行
[root@s25linux tmp]# grep -v "^$" test.txt # -v 翻转过滤结果 ,找出空白行以外的内容
#过滤掉注释行,和空白行 ,如何操作?
[root@s25linux tmp]# grep -v "^#" test.txt | grep -v "^$"
跟着我左右右手一个慢动作
一个大西瓜,送给你,也不送给他
ALLOW_HOSTS=[]
文件类操作
head tail
mv # 改文件名 移动文件
file # 显示文件类型
find # 按匹配模式查找文件
open # 打开文件
head # 显示文件头几行
tail # 显示文件尾部几行
cat # 读取文件,合并文件
touch # 新建文件
touch student_{01..10}_finish.sh 创建10个文件,分别是student_01_finish.sh ..
rename # 批量修改文件名 如果找不到,需要brew install rename mac包管理器
rename 's/old/new/' *.files # 把所有以files结尾的文件名中的old改为new
rename 's/.*/new.txt/' *.txt # 把所有以txt结尾的文件名中全部改为new.txt
这里 's/.*/' 中间.*是: regex表达式
/new.txt/ 是被替换的字符串
cp命令
#复制文件
[root@s25linux tmp]# cp 木兰诗.txt 新_木兰诗.txt
#复制文件夹,复制文件夹需要添加 -r 递归复制参数
[root@s25linux tmp]# cp -r a new_a
mv命令
1.重命名的功能
语法是
mv 旧文件名 新文件名
[root@s25linux tmp]# mv 木兰诗.txt new_木兰诗.txt
2.移动位置
语法
mv 你要移动的文件或是文件夹; 移动之后的目录名(如果文件夹存在,则移动,不存在是改名
案例
mv test.txt b #移动 test.txt文件 到 b文件夹下(b文件夹得存在)
vim编辑器
vi是初级版本编辑器
vim是高级版编辑器
vim directory/file_name
# 若指定路径的文件不存在,则新建空文件
vim的命令行模式:
- 第一次进入即在命令行模式,键入i或者a或者o进入编辑模式,esc退回到命令行模式
- 命令行功能:
- w 按单词向后移动光标
- b 按单词向前移动光标
- 0 移动光标到文件开头
- gg 移动光标到文件结尾 $ 该行结尾
- yy 复制一行到剪切板 p 复制到光标位置 3yy复制3行到剪贴板
- dd 删除一行 3dd 删除3行
- 数字 跳到指定行
- :set nu 显示行号(临时)
- :wq 保存退出
- :q! 不保存退出
- :w 保存
- /内容 搜索内容 n 下一个匹配, N 上一个匹配
其他的方法再学习,够用就行
在命令模式下,常用的指令
$ 快速移动到行尾
0 快速移动到光标的行首
x 删除光标所在的字符
g 移动到文件的第一行
G 移动到文件的最后一行
/string 你要从文件开头寻找的内容,例如 /to 找出文件中所有的to字符,按下n键,跳转到下一个匹配的字符
?string 从文件的第行,向上搜索字符串信息
% 找到括号的另一半
yy 复制光标当前行
3yy 复制光标后3行
p 打印yy所复制的内容
dd 删除光标所在行
4dd 删除光标向下的4行内容
dG 删除光标当前行,到行尾的所有内容
u 就是撤销上一次的动作
如何快速的复制,打印生成多行内容
例如 按下 9999yy 就是 复制 9999行,然后按下p打印,就能够快速的复制N多行了...
底线命令模式下
:wq!
:q! 不保存退出
:数字 快速的定位到某一行
:set nu 显示vim的行号
sed 编辑(Streem Editor)
对文件ab.txt的每一行第一个匹配到的字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt
对文件ab.txt 所有匹配到的字符串进行替换 /g global
sed -i 's/原字符串/新字符串/g' ab.txt
对文件ab.txt 所有匹配到的字符串进行删除 /d delete
sed -i 's/原字符串/d' ab.txt
批量修改文件名的方法:
比如有如下文件名,需要把finish改成ing
student_02_finish.sh student_04_finish.sh student_06_finish.sh student_08_finish.sh student_10_finish.sh
方法1: sed
for f in `ls student_*` ; do echo $f | mv $f `sed 's#finish#ing#g'`;done
由于-i需要并且必须带一个字符串,用来备份源文件,并且这个字符串将会加在源文件名后面,构成备份文件名。
所以正确的方法如下:
sed -i "" '2,4d' example.txt
cat查看文件
cat filename # 查看文件内容
cat -n filename # 参看带行号的文件内容
#利用cat写入文件内容,写一首诗
[root@s25linux tmp]# cat >> second.py << EOF
> #!coding:utf-8
> print("爱的魔力转圈圈")
> EOF
[root@s25linux tmp]#
[root@s25linux tmp]#
[root@s25linux tmp]#
[root@s25linux tmp]#
[root@s25linux tmp]# cat second.py
#!coding:utf-8
print("爱的魔力转圈圈")
重定向符号
> #重定向输出覆盖符 ,如同 python的 with open 中的 w模式
>> #重定向输出 追加符 ,如同 a模式
举例:
1.echo输出一个字符串,内容不在屏幕上打印,写入到一个文件中
[root@s25linux tmp]# echo "左手跟我一起画个龙" > 迪斯科.txt
[root@s25linux tmp]# echo "左手跟我一起画个龙" > 迪斯科.txt
[root@s25linux tmp]# cat -n 迪斯科.txt
1 左手跟我一起画个龙
2.追加写入文件内容
[root@s25linux tmp]# echo "右手和我划一道彩虹" >> 迪斯科.txt
结束举例
< #重定向写入覆盖符,用的很少,用在数据导入等操作中,mysql数据导入
<< #用在cat命令中,很少见
系统管理
clear # 清屏
chmod # 权限管理
man # 显示使用方法 q退出
env # 显示环境变量
passwd # 修改系统密码
命令行 | grep xx # 结果信息过滤xx之后的内容
初始化变量
>> name='新变量'
查看变量
>> echo $name #打印变量name的内容到屏幕
注:这种赋值临时有效,退出登录失效
PATH公共变量:存的是命令和执行程序的默认查找路径
查看PATH
>> echo $PATH
修改PATH,编辑初始化文件
>> vim /etc/profile
加入: export PATH='usr/bin:usr/local/bin:'
加入: export name='新变量'
单引号中的内容,仅仅就是个字符串了,不识别任何其他的特殊符号
双引号中的内容,能够识别特殊符号,以及变量
定时执行任务 crontab
# 单词释义:计划时间表 Cron 克龙 百万年 | Tab table 表格
crontab -e #编辑定时任务配置文件
crontab -l #查看定时任务的规则
crontab -r # 清空任务规则
任务后台执行,print命令不会显示在终端,因为print输出的对象不是当前终端屏幕,可以写到文件中
定时任务,注意的是 ,几号,和星期几不得共用
#每分钟执行一次命令
* * * * * 命令的绝对路径
分 时 日 月 周
9 * * * * /Library/Frameworks/Python.framework/Versions/3.9/bin/python3
/Users/wongbrank/test.py # 每小时的9分执行一次命令
// MacOS & Linux 命令程序存放位置:
查询程序和命令的绝对路径:
>> whereis 命令 # whereis echo
>> which 命令 # which python
系统预装可执行程序,(系统更新会连带着更新):
/usr/sbin/: root 权限下的基本命令。
/usr/bin/: 普通用户权限下的基本命令。
/usr/local/sbin/: root 权限下的基本命令。
/usr/local/bin/: 普通用户权限下的基本命令
//
#每小时的3,15分钟执行命令
* * * * * 命令的绝对路径
分 时 日 月 周
3,15 * * * * 命令
#在上午8-11点的第3和第15分钟执行
* * * * * 命令的绝对路径
分 时 日 月 周
3,15 8-11 * * *
#每晚9:30执行命令
* * * * * 命令的绝对路径
分 时 日 月 周
30 21 * * *
#每周六、日的下午1:30执行命令
* * * * * 命令的绝对路径
分 时 日 月 周
30 13 * * 6,7
#每周一到周五的凌晨1点,清空/tmp目录的所有文件,注意执行的命令请用绝对路径,否则会执行失败
* * * * * 命令的绝对路径
分 时 日 月 周
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
#每晚的零点重启nginx
0 0 * * * /usr/bin/systemctl restart nginx
#每月的1,10,22日的4:45重启nginx
* * * * *
分 时 日 月 周
45 4 1,10,22 * * /usr/bin/systemctl restart nginx
#每个星期一的上午8点到11点的第3到15分钟执行命令
* * * * *
分 时 日 月 周
3-15 8-11 * * 1 命令绝对路径
30 6 15 * * /usr/bin/systemctl restart nginx
分钟 小时 日期 月份 周 命令绝对路径 参数1 参数2
软件安装器
linux安装软件有哪些方式?
- rpm 软件包 手动安装,拒绝此方式,需要手动解决依赖关系
- yum 自动化安装,自动处理依赖关系,非常好用
- 源代码编译安装,可自定义的功能更多,指定软件安装路径
- 二进制源代码下载,此软件已经被编译安装过,生成了可执行的文件
- 下载压缩包后,直接解压缩即可使用
yum安装器
yum install software_name
sudo yum install software_name # sudo 以管理员身份运行命令
apt安装器
apt install software_name
不同版本之间问题比较多,只能一点点看百度来做,十分麻烦。所以建议弄不了就不弄,浪费时间。这里简短的记一点,给点思路:
第一步: ubuntu其实自带了拼音,可以在setting - region&language - manage input method里面进行设置,直接找到pingyin chinese即可,但是发现没有生效,不知道有什么依赖没有装好。
第二步: 安装fcitx, 这是一个输入法管理器,比较强大。重启之后在应用里面找到fcitx,添加pingyin到输入法列表即可
mac下使用包管理器,或者叫brew安装器 (全称HomeBrew)
先试试brew是否安装 sudo brew, 如果说command not found,则下一步
- 安装: 通过国内镜像源安装
sudo /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
会提示5个下载源,主要是腾讯,阿里,清华等等,随便选清华大学的可能会好一点
下载中,有点慢。。。fetching objects 97xxxx ,克隆Homebrew Core, 克隆HomeBrew Cask图形化,等等做个笔记。
HomeBrew本体安装成功, 然后配置国内镜像源
安装成功 但还需要重启终端 或者 运行 source /Users/wongbrank/.zprofile 否则可能无法使用
安装过程可能会报错,按照这个博客的路径来处理即可: https://gitee.com/cunkai/HomebrewCN/blob/master/error.md
给原文作者点赞,欢迎右键点击下方地址-打开URL 来给点个赞
https://zhuanlan.zhihu.com/p/111014448
安装大功告成!!☺ ☺ ☺
- 使用
brew -v # 查看brew版本
brew install xxx # brew安装包xxx
比如:brew install rename
- 源码安装方式 ```
解压源文件 tar -zxvf 源文件
配置 .config
安装 make & make install
- 获取python的源代码,下载且安装,下载源代码包的形式,自由选择 用windows的迅雷极速下载,下载完了之后,发送给linux机器即可 mac的同学,可以用scp或者等传输工具
windows的同学可以用lrzsz(yum install lrzsz -y ),xftp(自行去网站下载,支持断点续传,大文件传输)等文件传输工具
wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
3.下载完源代码包之后,进行解压缩 tar -zxvf Python-3.6.9.tgz
4.解压缩完毕之后,生成了python369的源代码目录,进入源代码目录准备开始编译 cd Python-3.6.9
5.此时准备编译三部曲 ,编译的第一曲:指定python3的安装路径,以及对系统的开发环境监测,使用如下命令
命令解释
configure 是一个脚本文件,用于告诉gcc编译器,python3即将安装到哪里,以及对基础的开发环境检查,检查openssl,检查sqllite,等等
编译第一曲,结束后,主要是生成makefile,用于编译的
[root@s25linux Python-3.6.9]# ./configure —prefix=/opt/python369/
编译第二曲:开始进行软件编译
直接输入 make指令即可
编译第三曲:编译安装,生成python3的可执行程序,也就是生成/opt/python369/
make install
编译的第二曲,和第三曲,可以简写成 make && make install #代表make成功之后,继续make install
6.等待出现如下结果,表示python3编译安装结束了 Successfully installed pip-18.1 setuptools-40.6.2
7.此时可以去检查python3的可执行程序目录 [root@s25linux bin]# pwd /opt/python369/bin
8.配置PATH环境变量 ,永久修改PATH,添加Python3的bin目录放入PATH开头位置 vim /etc/profile 写入如下内容 PATH=”/opt/python369/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:”
9.手动读取/etc/profile,加载文件中的所有变量 source /etc/profile
10.检查python3的目录,以及pip3的绝对路径 [root@s25linux bin]# which pip3 /opt/python369/bin/pip3
- 下载器 Wget
```python
第一步:官网下载得到:wget-1.5.3.tar
第二步:mac终端 >> tar -zxvf /Users/wongbrank/Desktop/wget-1.5.3.tar
得到: 解压后的文件夹 wget-1.5.3
第三步:mac终端 >> cd wget-1.5.3
第四步:mac终端 >> ./configure --with-ssl=openssl --host=TARGET
此处可能会报错 cannot guess host type 目前还不搞清楚啥意思
第五步:mac终端 >> make
第六步:mac终端 >> sudo make install
大功告成
- 安装ubuntu虚拟机
```python mac版本PD安装ubuntu
- pd - 控制中心 - 右边加号
- 选择 免费系统 - ubuntu下载
- 输入新登录密码,长度6位以上
- 打开右下角 应用面板,选择terminal终端
ifconfig
- 如果报错,安装 sudo apt install net-tools
infconfig
- 找到ethxxx后面的ip地址
<a name="gJW4R"></a>
### 别名alias
```shell
alias #直接输入可以查看当前系统的别名
案例
1.给系统添加一个别名
当你敲下start就是在执行后面的长串命令,很方便
alias start="python3 /home/mysite/manager.py runserver 0.0.0.0:8000"
alias restart_all='supervisorctl -c /etc/supervisord.conf'
需求: 怎么长久保存alias,不因为重启而丢失
解决方案:
使用VIM编辑 ~/.bashrc这个文件,加上:
alias restart_all='supervisorctl -c /etc/supervisord.conf'
并且加一个注释# 自己加的功能,以及注意事项等等,为了以后维护方便
重读文件,使生效
source ~/.bashrc (发现必须用绝对路径) macos的文件 ~/.zprofile
查看是否生效
alias
以上适用于centos,其他系统可以参考,这样就可以了
原理:.bashrc文件 保存着批处理命令,系统重启时会自动读取
2. alias带参数的用法,更加灵活一些
比如:
alias t_alias='test(){ scp $1 root@101.42.229.xxx:/opt/env2;};test'
$1 是别名后面传递的第一个参数,可以放上要传输的文件名的绝对路径
alias myscp='test(){ scp $1 root@101.42.229.175:/opt/env2;};test'
3. 如果要同时执行两条命令
alias setenv='cd /opt/env2/paycrm; git status' # 加分号
alias setenv='fun(){ cd /opt/env2/paycrm; git status'; git status}; fun' # 定义函数方式
grep命令
grep是linux强大的三剑客之一,从文本中,过滤有用信息的命令
1.语法
grep "你想过滤的字符串" 需要过滤的文件 #用法一
准备一个测试的文件test.txt
[root@s25linux tmp]# cat test.txt
跟着我左右右手一个慢动作
#左右右手慢动作重播
一个大西瓜,送给你,也不送给他
2.过滤文件中的相关内容
#找出文件中含有 "大" 字的行,且显示此内容,在哪一行
grep -n "大" test.txt # -n 参数是显示行号
#忽略大小写,找出ALLOW_HOSTS=[]参数是否被修改
grep -i "al" test.txt
#过滤出此文件非空白行,如何操作?
拆解如下
找出所有的空白行
[root@s25linux tmp]# grep "^$" test.txt # "^$" 以空开头,以空结尾,因此是空白行
找出所有的非空白行
# -v 参数是 翻转过滤结果 ,找出 空白行以外的内容
[root@s25linux tmp]# grep -v "^$" test.txt
#过滤掉注释行,和空白行 ,如何操作?
[root@s25linux tmp]# grep -v "^#" test.txt | grep -v "^$"
跟着我左右右手一个慢动作
一个大西瓜,送给你,也不送给他
ALLOW_HOSTS=[]
显示123.txt中的非空行非注释行的内容
grep -v "^$" 123.txt | grep -v "^#" # -v前面不能加-n,因为序号也是内容之一
批处理命令
第一步: vim 一个xx.command的文件,比如:加密以-请加密-开头的pdf.command
在里面写上命令,命令和文件都用绝对路径,因为命令环境中可能不存在path变量
保存退出
第二步: 给上述文件加上可执行权限,chmod +x xx.command
第三步: 双击,或者直接在终端>> xx.command,执行批处理命令
第一步:vim 一个xx.sh的文件,在里面写入:
#! /bin/bash
ping www.baidu.com
echo 'complete'
第二步:加上可执行权限, chmod 700 xx.sh
第三步:终端执行, >> xx.sh
网络命令
ifconfig # 查看网络配置
ping # ping服务器地址,一般服务器都会放行ping的请求
netstat -tunlp # 查看网络端口使用情况
scp 命令
功能:网络传输文件
命令格式:scp 本地资源路径 root@服务器ip地址
下载
curl -o newName.tar http://a.b.c/a.tar
curl -o 下载后保存的路径和名字 下载地址 (说明)
sed -i
SSH 远程连接linux服务器
ssh -p 22 root@192.168.1.53 # 远程连接 端口号22 用户@远程ip地址
注:端口号22不写,默认22
ip addr show # 显示当前服务器ip地址等信息
- 配置ip文件
```python IP地址配置文件: /etc/ network/ interfaces 打开后里面可设置DHCP或手动设置静态ip。前面auto eth0,让网卡开机自动挂载.
1.以DHCP方式配置网卡 编辑文件/etc/ network/ interfaces: sudo vi /etc/ network/ interfaces 并用下面的行来替换有关eth0的行:
The primary network interface - use DHCP to find our address
auto eth0 iface eth0 inet dhcp 用下面的命令使网络设置生效: sudo /etc/init.d/ networking restart 也可以在命令行下直接输入下面的命令来获取地址 sudo dhclient eth0
- netstat 显示所有机器的网络连接状态
```python
netstat -tunlp
- scp linux机器之间传输文件
```shell
把对方的文件拿到本机/opt/目录
scp root@192.168.1.134:/temp/xxx.txt /opt/ - 如果是拷贝整个目录,加上-r参数
把本地文件发给服务器的指定目录
scp /temp/file.zip root@192.168.1.134:/temp/xxx.txt
- du 命令 统计文件夹大小
```python
du -sh # 所有文件大小
du -h ./* # 每个文件的大小
- ps 查看linux进程
```python
ps -ef # 所有进程信息
ps -e | grep vim # 筛选跟vim有关的进程
kill ps_id # 杀死进程 kill -9 ps_id # 强制杀死进程
^C # 强制终止命令运行
- 压缩和解压缩
```shell
tar -xzvf this.tar.gz 解压
tar -zcvf /opt/* optfile.tar.gz
DNS管理
## DNS域名解析
什么是dns解析?
linux的dns客户端配置文件/etc/resolv.conf
里面定义了主备的两个dns服务器地址
[root@s25linux ~]# cat /etc/resolv.conf
# Generated by NetworkManager
#search localdomain
nameserver 119.29.29.29 # 百度的域名服务器
nameserver 223.5.5.5
linux的本地dns强制解析文件 /etc/hosts,可以写入一些测试的域名,用于本地机器使用,
*** 域名解析优先级更高
[root@s25linux ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 pythonav.cn
nslookup 域名查找命令
域名查找命令(交互式查询 域名对应的ip地址 nslookup www.pythonav.cn #寻找dns对应关系
查本机公网ip地址 ```python
查公网ip地址的命令
curl ifconfig.me 或者 curl cip.cc
<a name="Pwcyy"></a>
## 安装应用程序
**yum方法(傻瓜型)**
**编译安装方法(手动型) **<br />第一步: 下载源文件 <br />第二步: 解压<br />第三步:配置 <br />第四步:编译安装<br />第五步:加入PATH
```shell
PATH='/usr/bin:/usr/etc/sbin:'
用户管理
- 新建用户
useradd caixukun #创建用户caixukun
- 修改密码
passwd caixukun #给用户修改密码,
- 删除用户
userdel caixukun #删掉caixukun这个用户
- 删除用户和对应家目录
userdel -rf caixukun #删除用户,且删除用户的家目录
- 用户登录切换
su - 用户名 #用户登录切换,普通用户切换,需要输入密码,root用户想干嘛都不需要密码
#这个减号必须加上,叫做,完全的环境变量切换,是正确的切换方式
比如
su - pyyu
su - root
- 用户权限
对于linux系统而言,文件、文件夹,
用户身份:
user 所有者
group 属组
other 其他人
权限:
r read 4
w write 2
x delete 1
场景:
- root用户在/tmp目录下 创建了一个 文件 叫做 root.txt ,因此这个文件默认就属于root用户,属于root用户组
2.此时 一个普通用户,登录了机器 ,如
ssh chaoge@192.168.178.134 登录机器之后,chaoge对于这个 root.txt文件而言,就是一个其他人的身份了
top 资源管理器
能够显示 动态的进程信息
cpu、内存,网络,磁盘io等使用情况 ,也就是一个资源管理器
那么linux的资源管理器 就是top命令
第一行 (uptime)
系统时间 主机运行时间 用户连接数(who) 系统1,5,15分钟的平均负载
第二行:进程信息
进程总数 正在运行的进程数 睡眠的进程数 停止的进程数 僵尸进程数
第三行:cpu信息
1.5 us:用户空间所占CPU百分比
0.9 sy:内核空间占用CPU百分比
0.0 ni:用户进程空间内改变过优先级的进程占用CPU百分比
97.5 id:空闲CPU百分比
0.2 wa:等待输入输出的CPU时间百分比
0.0 hi:硬件CPU中断占用百分比
0.0 si:软中断占用百分比
0.0 st:虚拟机占用百分比
第四行:内存信息(与第五行的信息类似与free命令)
total:物理内存总量
used:已使用的内存总量
free:空闲的内存总量(free+used=total)
buffers:用作内核缓存的内存量
第五行:swap信息
total:交换分区总量
used:已使用的交换分区总量
free:空闲交换区总量
cached Mem:缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
- MacOS 终端快捷键 ```python 使用“终端”窗口和标签页
操作 快捷键 新建窗口 Command-N 使用相同命令新建窗口 Control-Command-N 新建标签页 Command-T 使用相同命令新建标签页 Control-Command-T 显示或隐藏标签页栏 Shift-Command-T 显示所有标签页或退出标签页概览 Shift-Command-反斜杠 () 新建命令 Shift-Command-N 新建远程连接 Shift-Command-K 显示或隐藏检查器 Command-I 编辑标题 Shift-Command-I 编辑背景颜色 Option-Command-I 放大字体 Command-加号键 (+) 缩小字体 Command-减号键 (–) 下一个窗口 Command-重音符键 (`) 上一个窗口 Command-Shift-波浪符号 (~) 下一个标签页 Control-Tab 上一个标签页 Control-Shift-Tab 将窗口拆分为两个面板 Command-D 关闭拆分面板 Shift-Command-D 关闭标签页 Command-W 关闭窗口 Shift-Command-W 关闭其他标签页 Option-Command-W 全部关闭 Option-Shift-Command-W 滚动到顶部 Command-Home 滚动到底部 Command-End 上一页 Command-Page Up 下一页 Command-Page Down 上一行 Option-Command-Page Up 下一行 Option-Command-Page Down
编辑命令行
操作 快捷键 重新定位插入点 在按住 Option 键的同时将指针移到新的插入点 将插入点移到行的开头 Control-A 将插入点移到行的结尾 Control-E 将插入点前移一个字符 右箭头键 将插入点后移一个字符 左箭头键 将插入点前移一个字词 Option-右箭头键 将插入点后移一个字词 Option-左箭头键 删除行 Control-U 删除到行的结尾 Control-K 向前删除到字词的结尾 Option-D(选中将 Option 键用作 Meta 键后可用) 向后删除到字词的开头 Control-W 删除一个字符 Delete 向前删除一个字符 向前删除(或使用 Fn-Delete) 转置两个字符 Control-T
在“终端”窗口中选择和查找文本
操作 快捷键 选择完整文件路径 按住 Shift-Command 键并连按路径 选择整行文本 点按该行三下 选择一个词 连按该词 选择 URL 按住 Shift-Command 键并连按 URL 选择矩形块 按住 Option 键并拖移来选择文本 剪切 Command-X 拷贝 Command-C 不带背景颜色拷贝 Control-Shift-Command-C 拷贝纯文本 Option-Shift-Command-C 粘贴 Command-V 粘贴所选内容 Shift-Command-V 粘贴转义文本 Control-Command-V 粘贴转义的所选内容 Control-Shift-Command-V 查找 Command-F 查找下一个 Command-G 查找上一个 Command-Shift-G 使用选定的文本查找 Command-E 跳到选定的文本 Command-J 全选 Command-A 打开字符检视器 Control-Command-Space
使用标记和书签
操作 快捷键 标记 Command-U 标记为书签 Option-Command-U 取消标记 Shift-Command-U 标记命令行并发送返回结果 Command-Return 发送返回结果但不标记 Shift-Command-Return 插入书签 Shift-Command-M 插入包含名称的书签 Option-Shift-Command-M 跳到上一个标记 Command-上箭头键 跳到下一个标记 Command-下箭头键 跳到上一个书签 Option-Command-上箭头键 跳到下一个书签 Option-Command-下箭头键 清除到上一个标记 Command-L 清除到上一个书签 Option-Command-L 清除到开头 Command-K 在标记之间选择 Shift-Command-A
其他快捷键
操作 快捷键 进入或退出全屏幕 Control-Command-F 显示或隐藏颜色 Shift-Command-C 打开“终端”偏好设置 Command-逗号键 (,) 中断 键入 Command-句点键 (.) 等于在命令行上输入 Control-C 打印 Command-P 软重置终端仿真器状态 Option-Command-R 硬重置终端仿真器状态 Control-Option-Command-R 打开 URL 按住 Command 键并连按 URL 添加至文件的完整路径 从“访达”将文件拖移到“终端”窗口中 将文本导出为 Command-S 将选定的文本导出为 Shift-Command-S 反向搜索命令历史 Control-R 开关“允许鼠标报告”选项 Command-R 开关“将 Option 键用作 Meta 键”选项 Command-Option-O 显示备用屏幕 Shift-Command-下箭头键 隐藏备用屏幕 Shift-Command-上箭头键 打开所选内容的 man 页面 Control-Shift-Command-问号键 (?) 搜索所选内容的 man 页面索引 Control-Option-Command-斜杠 (/) 完整的目录或文件名称 在命令行上,键入一个或多个字符,然后按下 Tab 键 显示可能的目录或文件名称补全列表 在命令行上,键入一个或多个字符,然后按下 Tab 键两次 ———————————————— 版权声明:本文为CSDN博主「zjj778899」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/zjj778899/article/details/116117907
<a name="keQu5"></a>
## 腾讯轻量服务器
<a name="dnDvq"></a>
### 登录
- **macOS ssh登录方式 **
```shell
- 找到公网ip,username,password
- ssh username@ip_addr
- 按提示输入密码
备注:
查看网络信息使用: ifconfig, 如果不能用yum install ifconfig -y (进行安装 -y 所有问题回答yes)
登录过程中出现以下报错:
原因:轻量服务器的初始密码没有重置,在服务器端重置密码即可
或者可能是防火墙造成的,可以使用 一下命令关闭防火墙
iptables -F # 清空防火墙规则
systemctl stop firewalld.service # 关闭防火墙
systemctl disable firewalld.service # 禁止防火墙重启
systemctl status firewalld.service # 查看防火墙状态
使用密钥对方式登录 ```shell 原理: 目前最安全的加密方式,公钥存在服务器,私钥发给客户端,只有两者能匹配的情况下才能允许登录
win下面安装putty
- 服务器端生成密钥对,私钥自动下载到本地
- putty的generate key读取本地的私钥文件
- putty的session设置ip和端口,open登录
```
创建虚拟环境
- 安装虚拟环境 virtualenv
为什么要安装它
避免单个解释器负载过高
避免不同的应用的应用环境冲突,术语叫做:解耦
根据实际情况灵活删改,不影响其他环境和解释器本体
保持每个虚拟环境只保留必要的依赖模块怎么安装
pip3 install -i https://pypi.douban.com/simple virtualenv创建虚拟环境
virtualenv —python=python3 env1
# —no-site-packages 不带任何默认的模块,一个完全干净的空间
# — python=python3 指定解释器
# env1 虚拟环境的名字
- 虚拟机下面安装模块
pip3 install -i https://pypi.douban.com/simple django==1.11.9
正常安装,没有特别
- 启动虚拟环境
source /opt/env1/bin/activate
# opt是虚拟环境的安装目录 # source的作用只是在PATH变量前面加上了usr/env1/bin:
因为每个虚拟环境对应都是不同的解释器,且依赖环境不同,所以没有冲突问题
- 快速复制当前环境到虚拟机
pip3 freeze > requirements.txt # 把当前解释器所有用到的模块导出到文件
把文件发送给linux机器,然后安装此文件即可,自动读入安装
linux机器>> pip3 install -i https://pypi.douban.com/simple -r requirements.txt
只要有一个模块失败,都失败,所以可以vim他,删掉失败的模块。 注意参数-r表示read
- 退出虚拟环境
deactivate
部署CRM步骤
- python3安装环境
```shell
which python3 # 查看python3已经安装好 /usr/bin/python3 pip3 list # 查看python已安装模块
asn1crypto (0.24.0) attrs (19.3.0) cffi (1.11.5) chardet (3.0.4) cloud-init (17.1) configobj (5.0.6) cryptography (2.3) dbus-python (1.2.4) decorator (4.2.1) file-magic (0.3.0) gpg (1.10.0) idna (2.5) importlib-metadata (1.2.0) iniparse (0.4) insights-client (3.0.5) isc (2.0) Jinja2 (2.10.3) jsonpatch (1.24) jsonpointer (2.0) jsonschema (3.2.0) MarkupSafe (1.1.1) more-itertools (8.0.2) netifaces (0.10.6) nftables (0.1) oauthlib (3.1.0) pciutils (2.3.6) perf (0.1) pip (9.0.3) ply (3.9) prettytable (0.7.2) pycairo (1.16.3) pycparser (2.14) pygobject (3.28.3) pyOpenSSL (18.0.0) pyparsing (2.1.10) pyrsistent (0.15.6) PySocks (1.6.8) python-dateutil (2.6.1) python-dmidecode (3.12.2) python-linux-procfs (0.6) pyudev (0.21.0) PyYAML (3.12) requests (2.20.0) rhnlib (2.8.6) rpm (4.14.2) schedutils (0.6) selinux (2.9) sepolicy (1.1) setools (4.2.2) setroubleshoot (1.1) setuptools (39.2.0) six (1.11.0) slip (0.6.4) slip.dbus (0.6.4) sos (3.8) SSSDConfig (2.2.3) syspurpose (1.26.20) systemd-python (234) urllib3 (1.24.2) zipp (0.6.0)
- django 安装
```shell
1. 安装django模块
pip3 install -i https://pypi.douban.com/simple django==3.2
2. 升级pip3工具
pip3 install -i https://pypi.douban.com/simple --upgrade pip # 豆瓣源比较快
3. 创建django项目
django-admin startproject mycrm
4. 创建app
cd mycrm # 必须在项目文件夹下创建app
django-admin startapp app01
5. 编写一个测试视图函数
5.1 vim urls.py # 编辑路由
5.2 vim app01/views.py #编辑视图函数
5.3 注册app vim settings.py
6. 启动django
6.1 python3 manage.py makemigrations # 迁移数据库
6.2 python3 manage.py migrate # 迁移数据库
6.3 python3 manage.py runserver 0.0.0.0:9000 # 启动9000端口
报错:9000端口没有反应,应该是防火墙没放行此端口
如果服务器的防火墙没有放行这个端口,则需要在服务器上放行这个端口,或者选用系统已经放行的端口,比如443
宝塔面板上展示的防火墙页面: 防火墙新增一个端口:
备注: 端口要在8000以上,避免冲突,如果是http一般选择TCP协议 ,可以勾选限制访问IP来源
- 从pycharm里面导入一个项目到centos 服务器 ```shell 部署crm的步骤: 第一步: 创建虚拟环境
第二步:快速复制当前环境到虚拟机 pip3 freeze > requirements.txt # 把当前解释器所有用到的模块导出到文件
把文件发送给linux机器,然后安装此文件即可,自动读入安装
linux机器>> pip3 install -i https://pypi.douban.com/simple -r requirements.txt
第三步:把项目文件传输到服务器上
scp /user/mycrm.zip root@ipxxx:/opt/env2
unzip mycrm.zip # 解压到当前目录
第四步: cd mycrm
python3 manage.py runserver # 试跑一下,看看报什么错误
第五步: 发现sqlite3数据总是报错,干脆装一个mysql 安装mysql yum install mariadb-server mariadb -y
# 第一个是服务器端,第二个是客户端 -y 一律回答yes
第六步: 修改settings里面数据库连接的参数和 mycrm.init.py的内容,具体参考django章节
第七部: 数据库内容导入
<a name="kkXjl"></a>
### 安装uWSGI
它是c语言编写的高效网关socket,把网络传输来的二进制数据转成python可读数据
- 安装
pip3 install -i https://pypi.douban.com/simple uwsgi<br />报错如下: <br />plugins/python/uwsgi_python.h:2:10: 致命错误:Python.h:没有那个文件或目录<br />#include <Python.h>
原因和解决:缺少依赖模块 python-devel, 装上就好了<br />yum install python36-devel # 注意 python36是python版本号,36不能省略
然后再次尝试pip3 install ,有点慢,先去喝点水 <br />🙂 Successfully installed uwsgi-2.0.20 小小成功
- 编写uWSGI的配置文件
```shell
[uwsgi]
# Django-related settings
# the base directory (full path)
# 填写crm项目的第一层绝对路径
chdir = /opt/env2/mycrm
# Django's wsgi file
# 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py
# 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件
module = mycrm.wsgi
# the virtualenv (full path)
# 填写虚拟环境解释器的第一层工作目录
home = /opt/env2
# process-related settings
# master
master = true
# maximum number of worker processes
# 代表定义uwsgi运行的多进程数量,官网给出的优化建议是 2*cpu核数+1 ,单核的cpu填写几?
# 如果是单进程,十万个请求,都丢给一个进程去处理
# 3个工作进程,十万个请求,就分给了3个进程去分摊处理
processes = 3
# the socket (use the full path to be safe
# 这里的socket参数,是用于和nginx结合部署的unix-socket参数,这里临时先暂停使用
# socket = 0.0.0.0:8000
# 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问
# 后端程序是运行在防火墙内部,外网是无法直接访问的
# 临时使用http参数,便于我们用浏览器调试访问
http = 0.0.0.0:80
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
- 启动uWSGI
uwsgi —ini ./uwsgi.ini #指定配置文件启动后端
安装nginx : engine x
- 安装
- 配置
- 启动 ```shell
- 找到nginx的安装目录 ps -ef | grep nginx # 腾讯服务器默认安装nginx,且默认启动,所以可通过进程查看 显示如下: /usr/local/lighthouse/softwares/nginx/sbin/nginx 猜测: /usr/local/lighthouse/softwares/nginx 是nginx的安装目录
- cd /usr/local/lighthouse/softwares/nginx
- ls # 找到conf文件夹
- vim conf/nginx.conf # 查看编辑配置文件
```
ubuntu系统密码重置
解决方案:
在系统开机前常按shift或者ESC键进入grub界面
选择*ubuntu 高级选项按enter键进入启动选项
通过up键和down键选中recovery mode选项,然后按e键进入编辑,将光标移动到下面内容,用键盘编辑
将“ro recovery nomodeset”替换为“quiet splash rw init=/bin/bash” 【有的系统替换内容需要加上ro “ro quiet splash rw init=/bin/bash”】,按下[F10]或者[Ctrl+x]重启系统。
- 启动后进入命令行 root@(none) #
- 命令行输入 passwd 用户名 , 重置密码,提示password update successfully,下一步
- reboot -nf 重启