Linux
Linux
目录
[TOC]
Linu终端
Linux发展历史
Unix
1968Multics项目(MIT,Bell,美国通用电气有限公司)1970Unix诞生(汇编语言)1973C语言重写UnixLinux
1991Linux之父——LinusLinux与GNU协议
GNU开源协议 Linux特点
开源、多用户(同时),多任务,稳定性好
Linux分支
Ubuntu,debian,centOS(redhat分支),redhat,suse等
Linux其他
“Linux一切皆文件”
虚拟机相关
虚拟机备份
快照又称还原点,侧重短期,无需关闭Linux)
克隆侧重长期,要关闭Linux
Linux文件目录1
计算机
驱动器
文件系统
文件系统
| 目录名称 | 英文全拼 | 说明 |
|---|---|---|
| bin -> usr/bin | binary | 二进制文件 |
| boot | 启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件 | |
| dev | device | 外接设备 |
| etc | 配置文件 | |
| home | 家,类似windows的C:\User | |
| lib -> usr/bin | 有着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件 | |
| lib64 -> usr/bin64 | ||
| lost+found | 一般情况下是空的,当系统非法关机后,这里就存放了一些文件 | |
| media | ||
| misc | ||
| mnt | 有四个目录,外接设备挂载的地方。如将光驱挂载在/mnt/cdrom上,然后就可以查看里面内容 | |
| net | ||
| opt | ||
| proc | process | 进程 |
| root | roor用户的“home” | |
| sbin -> usr/sbin | super binary | super权限的二进制文件 |
| selinux | 安全策略/防火墙 | |
| srv | ||
| sys | ||
| tmp | temporary | 临时文件,类似windows的C:\Windows\Temp |
| usr | 用户安装的软件,类似windows的C:\Program Files | |
| var | 系统日志 |
Linux文件目录2

bin
boot
data
dev
etc
home
lib -> usr/lib
lib64 -> usr/lib64
lost+found
media
mnt
opt
proc
root
run
sbin -> usr/sbin
srv
sys
tmp -> 多个/tmp
usr
var
软件安装路径
- 图1

- 图2

- 图3

Linux指令
通用格式:指令主体 [选项] [操作对象]
指令网站:man.linuxde.net
基础命令
终端操作
| 指令 | 说明 | 参数 |
|---|---|---|
| clear/ctrl+L | 伪·清除终端信息 |
系统操作
关机(很少用)
| 指令 | 说明 |
|---|---|
| shutdown | 关机(正常关机),或shutdown -h now |
| halt | 关机(关闭内存) |
| inito | 关机(一般不用) |
路径操作
| 命令 | 英语 | 说明 | 参数 |
|---|---|---|---|
| ls [-lah] [路径] | list | 查看当前目录 技巧:ls -l可简写为ll 路径可接筛选文件名! | -l以列表形式显示-a包含隐藏文件-h可读性优化显示 |
| pwd | print working directory | 查看当前路径 | |
| cd [路径] | change directory | 定位到路径 |
文件操作
| 命令 | 英语 | 说明 | 参数 |
|---|---|---|---|
| mkdir [-p] [路径1 路径2] | make directory | 创建目录 | -p一次创建多层目录 |
| touch [路径n] | touch | 创建文件 | |
| cp [-r] [原路径 目标路径] | copy | 复制 | -r递归复制(recursion) |
| mv [原路径 目标路径] | move | 移动 / 重命名 | 话说这个没有递归 |
| rm [-rf] [路径n] | remove | 删除 | -r递归(recursion)-f不提示-强制删除(force) |
补充:chmod 000 文件名,设置文件权限为最高级(常用其他权限参数:777、754)
文件内容操作
| 命令 | 说明 | 参数 |
|---|---|---|
| vim [路径] 简写: vi [路径] | 查看文件 文件可以有也可以没有 vim是进入文件读取内容cat是在终端显示文件内容前者一般用来编辑,后者用来查看 | esc退出阅读模式 / 命令模式Shift + :进入编辑模式q + Enter执行退出命令wq + Enter保存退出q! + Enter强制退出 |
| cat [路径] | 查看文件 |
Vim更多退出操作(以下操作要先按esc退出某些状态(编辑)后才能输入)
i,插入模式,即编辑模式:w,保存文件但不退出vi:w file,将修改另外保存到file中,不退出vi:w!,强制保存,不推出vi:wq,保存文件并退出vi:wq!,强制保存文件,并退出vi:q,不保存文件,退出vi:q!,不保存文件,强制退出vi:e!,放弃所有修改,从上次保存文件开始再编辑命令历史
辅助操作
| 指令 | 说明 |
|---|---|
| [指令] > [路径] | 输出重定向 —— 覆盖输出,文件不存在则新建 |
| [指令] >>[路径] | 输出重定向 —— 追加输出,文件不存在则新建 |
进阶指令
系统操作
| 指令 | 说明 | 参数 |
|---|---|---|
| df [-h] | 查看磁盘空间 | -h可读性优化显示 |
| free [-h-m-g] | 查看内存空间 | -h可读性优化(旧版不能)-m兆字节-g吉字节 |
文件内容高级操作
| 指令 | 说明 | 参数 |
|---|---|---|
| head [-数字] [路径] | 查看文件的前n行,默认10行 | |
| tail [-数字-f-F] [路径] | 查看文件的后n行,默认10行 | -f查看文件的动态变化但这个变化内容不能是用户手动修改 一般用来查看系统日志 |
| less | 查看文件并以较少内容输出 | 辅助键:数字+Enter、空格+上下方向键 |
| wc [-lwc] | 统计文件内容信息 | -l行数line-w单词数words-c字节数bytes |
日期编辑类【重点】
| 指令 | 说明 | 参数 |
|---|---|---|
| data ["+%F %T"] data -d "+1 day" "+%F %T" | 操作时间和日期 可现实当前 / 指定某刻的数据 +%F %T等价于+%Y-%m-%d %H:%M:%S | %F年月日%T时分秒%Y年%m月%d日%H时%M分%S秒+前-后day日month月year年 |
| cal [-数字-y 年份] | 操作日历 | -1当月,-3上本下月,-y一年12个月-s周日开始-m周一开始 |
管道符 "|"
| 功能 | 例子 | 作用 |
|---|---|---|
| 过滤 | ls / | 过滤为有'y'的文件,grep为过滤指令 |
| 特殊 | cat 路径|less | 实现less的等价效果 |
| 扩展处理 | ls/ |wc -l | 统计某个目录下文档个数,前面的输出作为后面的输入 |
高级指令
文件高级操作
| 指令 | 说明 | 参数 |
|---|---|---|
| du [-sh] | 查看目录真实大 | -s只显示汇总大小(summaries)-h高可读性显示 |
| find [路径] [选项] | 查找文件 例:`find /etc -name *.conf | wc -f` |
系统与进程操作
| 指令 | 说明 | 参数 |
|---|---|---|
| hostname [-f] | 操作服务器主机名 | -f输出主机名中的FQDN(全限定域名) |
| id [用户名] | 查看用户的一些基本信息 | 用户id,用户组id,附加组id 验证用户信息:/etc/passwd 验证用户组信息:/etc/group |
| whoami | who am i 显示当前用户名,一般用于shell脚本来记录日志 | |
| ps [-ef] | 【重点】查看服务器进程信息 具体见下 | -e列出前部进程,等价于-A-f显示全部列(字段) |
| top | (动态显示)进程状态 具体见下 | 按M(MEM)内存排序按P(CPU)CPU排序按1CPU分核显示按q退出 |
| service [服务名] [操作] | 【重要】控制软件服务 例: service httpd start | start启动,stop停止,restart重启 |
| kill [进程PID] | 杀死进程,配合ps -ef使用 | |
| killall [进程名称] | 杀死进程 |
- ps [-ef] 的额外补充
UID用户id
PID进程id
STMIE启动时间
PPID进程的父级进程(父级没了就是僵尸进程)
CCPU占用率
TTY发起进程的终端设备(?表示非终端发起的)
TIME执行时间
CMD进程名称案例:
ps -ef | grep gnome-panel
- top的额外补充
sleeping睡眠进程
zombie僵尸进程(plants vs zombies里的zombie)
S/R进程状态(S睡眠,R运行)
PR优先级(权重)
VIRT虚拟内存
RES常驻(虚拟)内存
SHR共享内存(和依赖相关)注:一个进程实际使用的内存 =
RES常驻内存 -SHR共享内存
%CPU是CPU占用
%MEM是内存占用比
TIME+是执行时间
COMMAND进程名或路径
Linux下的包管理
Node篇
安装Nodejs
yum install -y nodejs
node-vNode.js保持后台运行
【方案1】forever
// 安装forever
sudo npm install -g forever
// 使用forever开启nodejs程序
forever start xxx.js
// 【或】使用forever开启npm程序
forever start -c "npm start" 路径【方案2】【更高级】pm2
// 安装
npm install -g pm2
// 运行
pm2 start app.js
// 一些命令
pm2 list 查看应用运行状态
pm2 monit 追踪资源运行情况
pm2 describe [app id] 查看应用详细部署状态
pm2 logs 查看日志
pm2 restart [app id] 重启应用
pm2 stop [app id] 停止应用
pm2 web 开启api访问更新Node && 处理pm2报错:spawning pm2 daemon with pm2
查看报错内容
vim pm2.log
有可能是node版本过低
安装新版node
~$ wget https://npm.taobao.org/mirrors/node/v10.13.0/node-v10.13.0-linux-x64.tar.xz //下载nodejs ~$ tar -xvf node-v10.13.0-linux-x64.tar.xz //下载nodejs安装文件node-v10.13.0-linux-x64.tar.xz ~$ cd node-v10.13.0-linux-x64/bin && ls //测试是否安装成功 node npm npx bin$ ./node -v //./的意思是当前文件夹下,现在 node 和 npm 还不能全局使用 v10.13.0 bin$ pwd //pwd查看当前目录,记住这个目录,我们下面要用 /root/node-v10.13.0-linux-x64/bin全局使用node、npm
bin$ cd ~ //回到~目录 ~$ vim .bashrc //打开.bashrc文件夹 i //进入编辑模式 export PATH=/root/node-v10.13.0-linux-x64/bin/:$PATH // 插入该语句 编辑完成后,按esc键退出编辑状态,再输入(shift):wq保存并退出文件 ~$ source .bashrc // 使环境变量生效检查
~$ node -v v10.13.0 ~$ npm -v 6.4.1 ~$ pm2 -v
方案比较


踩坑Nodejs - Fs路径问题
问题所在
fs模块读取文件的相对路径是以
启动server.js的位置为基准的,而不是以server.js文件的位置!即在本地调试时使用
npm run server时,./public/video是指向public的静态资源里的而在服务器中使用
pm2 start www时,需要../public/video来指向public
解决方案:使用绝对路径
nodejs官方也推荐在使用fs模块读取文件时使用绝对路径,而不是相对路径
const path = require('path') // 先引path包,这包还可以获取扩展名path.extname()
let PUBLIC_PATH = path.resolve(__dirname, '../public');Yum篇
Apache的使用
// 安装Apache
yum install -y httpd
apachectl -v
// 启动Apache
apachectl start
// 测试Apache
curl -l localhost
// 其他命令
apachectl stop 停止Apache
// 如果apache安装成为linux的服务的话,可以用以下命令操作:
service httpd start 启动
service httpd restart 重新启动
service httpd stop 停止服务
// 一键安装Lamp环境
yum install -y mysql* httpd* php*yum命令报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
两种解决方案

Pip与Python篇
Python
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz # 下载
tar -xf ***.gz # 解压
./configure && make && make install # 编译
# 这个时候要删除之前 装好的软连接,再添加的软连接里
ln -s /usr/local/bin/python3.7 /usr/bin/python # 创建软连接
# 【【会有BUG】】yum用python2编写,这样改会导致yum不可用。方案:这里用python3软连接或改yum配置
ln -s /usr/local/bin/python3.7-config /usr/bin/python-config
python -V # 再次查看py的版本号pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本
sudo python get-pip.py # 运行安装脚本杂记
linux下/bin和/usr/bin和/usr/local/bin的区别
/bin 是所有用户都可以访问并执行的可执行程序。包括超级用户及一般用户
/usr/bin 是系统安装时自带的一些可执行程序。即系统程序,轻易不要去动里面的东西,容易入坑
/usr/local/bin 是用户自行编译安装时默认的可执行程序的安装位置,这个不小心误删点什么,不会影响大局
Bug:右上角提示发生了一个错误
发生了一个错误,请通过右键菜单运行软件包管理器或通过中断执行apt-get来查看具体 错误 ,错误信息:“未知错误 :<class KeyError>("The cache has no package named 'ubuntu-pro-client:amd64;"")”。这通常意味着您安装的软件包有未满足的依赖关系反正我这样就完了:
# $apt-get
$apt-get update
$apt-get gradeGPT:
这个错误信息表示你正在尝试安装一个名为
ubuntu-pro-client:amd64的软件包,但是在你的包缓存中找不到这个包。这可能是因为这个软件包在你的源列表中不存在,或者你的包缓存没有更新。以下是一些可能的解决方案:
- 更新你的包缓存:运行
sudo apt-get update,这将更新你的包缓存,包括所有可用的软件包和它们的最新版本。- 检查你的源列表:在
/etc/apt/sources.list文件和/etc/apt/sources.list.d/目录下的文件中查看你的源列表。确保你的源列表包含了你想要安装的软件包。如果你不确定,你可以搜索ubuntu-pro-client:amd64这个包在哪个源中。- 修复未满足的依赖关系:运行
sudo apt-get install -f,这将尝试修复所有未满足的依赖关系。- 重新安装软件包:如果你之前尝试安装
ubuntu-pro-client:amd64但是失败了,你可以尝试先卸载它,然后再重新安装。运行sudo apt-get remove ubuntu-pro-client:amd64卸载软件包,然后运行sudo apt-get install ubuntu-pro-client:amd64重新安装。如果以上方法都不能解决问题,那么可能是因为
ubuntu-pro-client:amd64这个包在你的 Ubuntu 版本中并不存在,或者已经被重命名或删除了。在这种情况下,你可能需要寻找替代的软件包,或者联系软件包的维护者寻求帮助。