跳至主要內容

Linux

LincZero大约 11 分钟

Linux

目录

[TOC]

Linu终端

Linux发展历史

  • Unix

    1968Multics项目(MIT,Bell,美国通用电气有限公司)

    1970Unix诞生(汇编语言)

    1973C语言重写Unix

  • Linux

    1991Linux之父——Linus

  • Linux与GNU协议

    GNU开源协议 Linux特点

    开源、多用户(同时),多任务,稳定性好

  • Linux分支

    Ubuntu,debian,centOS(redhat分支),redhat,suse等

  • Linux其他

    “Linux一切皆文件”

虚拟机相关

虚拟机备份

快照又称还原点,侧重短期,无需关闭Linux)

克隆侧重长期,要关闭Linux

Linux文件目录1

计算机

驱动器

文件系统

文件系统

目录名称英文全拼说明
bin -> usr/binbinary二进制文件
boot启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件
devdevice外接设备
etc配置文件
home家,类似windows的C:\User
lib -> usr/bin有着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件
lib64 -> usr/bin64
lost+found一般情况下是空的,当系统非法关机后,这里就存放了一些文件
media
misc
mnt有四个目录,外接设备挂载的地方。如将光驱挂载在/mnt/cdrom上,然后就可以查看里面内容
net
opt
procprocess进程
rootroor用户的“home”
sbin -> usr/sbinsuper binarysuper权限的二进制文件
selinux安全策略/防火墙
srv
sys
tmptemporary临时文件,类似windows的C:\Windows\Temp
usr用户安装的软件,类似windows的C:\Program Files
var系统日志

Linux文件目录2

img
img

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
img
img
  • 图2
img
img
  • 图3
img
img

Linux指令

通用格式:指令主体 [选项] [操作对象]

指令网站:man.linuxde.net

基础命令

终端操作

指令说明参数
clear/ctrl+L伪·清除终端信息

系统操作

关机(很少用)

指令说明
shutdown关机(正常关机),或shutdown -h now
halt关机(关闭内存)
inito关机(一般不用)

路径操作

命令英语说明参数
ls [-lah] [路径]list查看当前目录
技巧:ls -l可简写为ll
路径可接筛选文件名!
-l以列表形式显示
-a包含隐藏文件
-h可读性优化显示
pwdprint 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
+-daymonthyear
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
whoamiwho 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-v

Node.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

  1. 查看报错内容

    vim pm2.log

    有可能是node版本过低

  2. 安装新版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  //./的意思是当前文件夹下,现在 nodenpm 还不能全局使用
    	v10.13.0
    bin$ pwd  //pwd查看当前目录,记住这个目录,我们下面要用
    	/root/node-v10.13.0-linux-x64/bin
    
  3. 全局使用node、npm

    bin$ cd ~  //回到~目录
    ~$ vim .bashrc  //打开.bashrc文件夹
        i  //进入编辑模式
        export PATH=/root/node-v10.13.0-linux-x64/bin/:$PATH  // 插入该语句
        编辑完成后,按esc键退出编辑状态,再输入(shift):wq保存并退出文件
    ~$ source .bashrc  // 使环境变量生效
    
  4. 检查

    ~$ node -v
    	v10.13.0
    ~$ npm -v
    	6.4.1
    ~$ pm2 -v
    

方案比较

img
img
img
img

踩坑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:

两种解决方案

img
img

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 grade

GPT:

这个错误信息表示你正在尝试安装一个名为 ubuntu-pro-client:amd64 的软件包,但是在你的包缓存中找不到这个包。这可能是因为这个软件包在你的源列表中不存在,或者你的包缓存没有更新。

以下是一些可能的解决方案:

  1. 更新你的包缓存:运行 sudo apt-get update,这将更新你的包缓存,包括所有可用的软件包和它们的最新版本。
  2. 检查你的源列表:在 /etc/apt/sources.list 文件和 /etc/apt/sources.list.d/ 目录下的文件中查看你的源列表。确保你的源列表包含了你想要安装的软件包。如果你不确定,你可以搜索 ubuntu-pro-client:amd64 这个包在哪个源中。
  3. 修复未满足的依赖关系:运行 sudo apt-get install -f,这将尝试修复所有未满足的依赖关系。
  4. 重新安装软件包:如果你之前尝试安装 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 版本中并不存在,或者已经被重命名或删除了。在这种情况下,你可能需要寻找替代的软件包,或者联系软件包的维护者寻求帮助。