linux 是后端项目运行的环境,很多开发者都是在windows 下编写代码,后部署到linux 上运行。所以linux 是很重要的基础,是开发人员需要了解的。学习资料参考
linux 起源
Unix、GUN、Linux起源, 追求先求有且能运行,再求进一步改善。linux 的版本是指内核版本。linux 版本分为两类,一种使用RPM 方式安装软件系统,包括Red Hat、Fedora、SuSE、CentOS; 另外一种 dpkg 方式安装软件,包括 Debian、Ubuntu、B2D。linux 多用户、多任务,与Windows系统不同。文件的属性可分为可读,可写,可执行,属性可分为文件拥有者、文件所属用户组、其他非拥有者与用户组者。
linux的缺点是没有特定的支持厂商,游戏支持度不够、专业软件的支持度不够(如:绘图软件)。
文件权限
linux 是多人多任务的, 用户的配置信息在etc/xx 下面。进入文件夹要x 权限,r 只能查看文件夹的文件列表。linux 下面全部都是文件,文件没有后缀,也有一些常见的 .sh、 .tar.gz 只是为了启动见名知义, linux 各个目录存放的规范详见这里,比如安装软件一般放在usr/local 或者 opt
常用操作命令
# 查看环境变量
echo PATH
# 把目录添加到系统环境变量,并保存
echo 'export PATH=/usr/local/wkhtmltox/bin:$PATH' >> /etc/profile
source /etc/profile
# which 在环境变量中查找文件, whereis 寻找特定文件速度快
which php
whereis php
# 删除目录下修改时间超过150天的文件
find /backup/backup -mtime +150 -name "dev_all_databases.*.sql.gz" -exec rm -f {} \;
# touch创建文件, mkdir 创建一级目录,-p 连续创建a/b/c 目录
touch test.php
mkdir a
mkdir -p a/b/c
# 查看文件
cat a.php
# 移动,第一条是改名,第二条移到b目录下
mv a.php b.php
mv a.php b/
# 复制
cp a.php b.php
cp a.php b
cp -r a b/
# scp [A] [B] 把A机器的文件考到B机器上面,r把目录a 拷贝得/web/dev 目录下,直接覆盖
scp P22 ~/Desktop/a.php ~/work@192.168.1.88:/web/dev/
scp -rP22 ~/Desktop/a ~/work@192.168.1.88:/web/dev/
# 删除命令,生产环境慎用
rm -rf a.php
rm -rf a/*
# 修改文件或者目录的拥有者和操作权限
chmod 755 a.php
chmod -R 755 a/
chown work:work php
chown -R work:work php
# 添加用户、组
groupadd work
useradd -g work work
passwd work
文件的压缩与打包
压缩,文件用0,1 存储后还有很多空间未填满或者有很多重复数据,将这些空间填满或者减少空间就是压缩技术的目的。比如数字1,由于 1byte = 8bits,其他7bits 默认为0,第一位为1;比如重复有100 个1, 并不需要真正存储100个1,标记100个1,减少空间。
常用的压缩命令有zip/tar,不同的压缩命令用了不同的压缩规则,所以解压也要用相对应的命令。
# z 代表用gzip 算法压缩,c create 创建压缩包,v view 是否显示压缩过程(一般不带该参数),f代表文件
tar -zcvf a.tar.gz a/
# x 代表extract 提取,就是解压到当前目录
tar -zxvf a.tar.gz
# -C 解压到b目录下
tar -zxvf a.tar.gz -C b/
项目中常用命令
# 查看进程是否运行
ps -aux | grep nginx
# 查看端口号被那个进程占用
netstat -anp | grep 9000
# mac 下的命令
lsof -i:9000
# 监听日志
tail -f a.log
# 前十条命令
history | head -n 10
# 分析当前目录各文件大小,并排序。在打包迁移目录是非常常用
# a all 全部文件,h human-readable 对人友好的方式展示
du -ah --max-depth=1 | sort -h
# 观察分区大小,在清理磁盘是很常用
df -ah
# a.php文件软连接到b标识
ln -s a.php b
# mount 这样直接操作b目录就能操作分区
mount [磁盘分区] b
查看系统参数的命令
# 查看内核/操作系统/CPU信息
uname -a
# 查看操作系统版本
head -n 1 /etc/issue
lsb_release -a
# /proc 目录下面很多系统属性文件,查看CPU信息
cat /proc/cpuinfo
# 查看计算机名
hostname
# 查询当前系统的centos版本号$releasever、cpu指令集$basearch,在安装软件时很常用
rpm -qi centos-release
安装软件
在linux 下安装软件是必须掌握的技能,安装方式一般有yum install,直接安装rmp包,编译安装源码包等方式。yum install 原理。先查看当前yum 源有没有可用的安装包。
# 列出可用的 rpm 包
yum list | grep 包名
yum rearch 包名
# 删除
yum remove xx
以安装Nginx 为例子展示一下过程
# 比如增加yum repo,安装nginx version: nginx/1.21.0
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 当前系统的centos 版本号$releasever、cpu指令集$basearch
rpm -qi centos-release
# 地址换成,并加到 /etc/yum.repos.d/nginx.repo
baseurl=http://nginx.org/packages/centos/7/x86_64
# 如果有缓存就清除缓存
yum clean all
# 查看该yum repo 能安装的Nginx 版本有那些
yum list nginx --showduplicates
# 选择想安装的版本
yum install nginx-1.10.2
nginx -v
- 源码编译安装,比如 centos 安装 git 工具,源码下载
# 解压 .tar.xz 或者 .tar.gz
tar -Jxvf git-2.9.5.xz -C .
# 源码安装先配置安装目录,有助后期卸载、迁移
./configure prefix=/usr/local/git-2.9.5
# 编译安装
make && make install
# 一般再设置一个git 软连接,安装软件的习惯
ln -s git-2.9.5 git
# 添加环境变量
export "PATH=/usr/local/git/bin:$PATH" >> /etc/profile
source /etc/profile
文本处理技巧
在linux 编辑文本是很常见的操作,比如修改配置文件、查看项目日志、处理文件数据、编写shell script 等等,这些都要用文本处理。编写文本一般用vim 编辑器,vim 有三种状态,点击esc 普通模式,i 进入编辑模式,冒号进入命令行模式。
:q! 放弃修改
:wq 或者 :x 保存文件并退出vim 。
# 撤销、恢复,普通模式下
u 点击一次恢复上一步
ctr+r 恢复
# 显示取消行号
:set number
:set nonumber
# 复制,删除。普通模式下
yy 复制当前行至存储缓冲区
nyy 复制n行到缓冲区
p 在当前行之后黏贴缓冲区中的内容
dd 删除行,并把改行放在暂存区
dnd 删除n行
dG 删除当前行到最后一行
# 移动光标,普通模式下
^ 首
$ 尾
G 最后一行
# 查找,普通模式下输入/a (a 是想搜索的内容)
n 下一个
N 上一个
# 替换
# 检索第一个 “a” 字符串并将其替换成 “b”,g代表检索并将所有
:%s/a/b
:%s/a/b/g
# 检索出所有的 “a” 字符串,在替换成 “b” 前,先询问是否替换
:%s/a/b/gc
# 注释
# v模式多行编辑
1. Ctrl+v进入v模式
2. 上下方向键选中要注释的行
3. shift+i(即大写的I)行首插入
4. 输入注释符//
5. 按esc返回
# 反注释
1. Ctrl+v进入v模式
2. 上下方向键选中要注释的行,左右键选择要删除的字符//
3. 按d删除
crontab 定时任务
任务列表有用户属性,不用reload crontab,它本身每分钟就会读取一下任务列表。
# 针对当前用户,如work/root
# 编辑当前用户的定时任务列表
crontab -e
# 输出当前用户的定时任务
crontab -l
# crontab 基本语法
*/10 * * * * 每隔10分 执行
比如用定时任务调整服务器时间
# 借助定时任务调整时间
*/10 * * * * /usr/sbin/ntpdate -u ntp5.aliyun.com
性能分析命令
补充
文本三剑客grep/sed/awk
补充
欢迎大家给我留言,提建议,指出错误,一起讨论学习技术的感受!
网友评论