Linux界两大主流:RPM与DPKG
RedHat系列:Redhat、Centos、Fedora
- 常见的安装包格式rpm,安装rpm包的命令是”rpm -i *.rpm“
- 包管理工具yum
Debian系列:Debian、Ubuntu
- 常见的安装包格式deb,安装命令是”dpkg -i *.deb”
- 包管理工具apt
APT
常用apt命令:
# 更新软件包列表
apt-get update
# 安装一个新的软件包
apt-get install <packagename>
# 卸载一个已安装的软件包(保留配置)
apt-get remove <packagename>
# 卸载一个已安装的软件包(不保留配置文件)
apt-get --purge remove <packagename>
# 将已经卸载了的软件包的.deb安装文件从硬盘中删除
apt-get autoclean
# 将已经卸载和没有卸载的软件包的.deb安装文件从硬盘删除
apt-get clean
# 删除为了满足其它软件包的依赖而安装的,但是现在不需要的
apt-get autoremove
# 升级所有软件
apt-get upgrade
复制代码
Ubuntu
-
显示行号
sudo vim /etc/vim/vimrc # 添加 set number 复制代码
-
scp
# 本地 --文件--> 远程 # 本地 --公钥--> 远程 # 拷贝文件 scp <file> ubuntu@172.16.0.1:/home/ubuntu/ # ssh连接 ssh ubuntu@172.16.0.1 复制代码
注意:命令行yes/no的时候,不要直接回车,应输入yes回车。
-
安装mysql
sudo apt-get install mysql-server-5.7 # 开启外网访问 # bind 127.0.0.1 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 开启/关闭/重启 sudo service mysql start/stop/restart 复制代码
# 允许远程访问 use mysql; update user set host="%" where user="root"; flush privileges; 复制代码
-
安装rabbitmq
# 安装erlang sudo apt-get install erlang # 查看erlang版本 erl # 安装rabbitmq sudo apt-get install rabbitmq-server # 查看rabbitmq版本 sudo rabbitmqctl status | grep rabbit # 启动/停止/重启 sudo service rabbitmq-server start/stop/restart # 添加用户 sudo rabbitmqctl add_user 用户名 密码 # 给予用户管理员权限 sudo rabbitmqctl set_user_tags 用户名 administrator # 为用户设置读写权限 sudo rabbitmqctl set_permissions -p / 用户名 "." "." ".*" 复制代码
-
安装redis
# 安装redis sudo apt-get install redis-server # 启动/停止/重启 sudo service redis-server start/stop/restart # 修改配置 sudo vim /etc/redis/redis.conf # 开启远程访问 # bind 127.0.0.1 # 修改密码 requirepass xxx 复制代码
-
启动jar包
nohup java -jar xxx.jar > ./nohup.out 2>&1 & 复制代码
-
解压zip
# 解压到指定目录 unzip -d 指定目录 xxx.zip 复制代码
-
安装Node环境
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎。
安装nodejs:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs 复制代码
NPM是nodejs的包管理工具,新版的nodejs已经集成了npm。npm相关命令:
# npm查看版本 npm -v # npm升级 sudo npm install npm -g # npm安装模块,-g表示全局安装,不带-g会安装在./node_modules下 sudo npm install -g <Module Name> # 更新模块 sudo npm update <Module Name> # 卸载模块 sudo npm uninstall <Module Name> # 发布模块? sudo npm publish 复制代码
-
ubuntu 16.04添加开机自启脚本
在
/etc/rc.local
中添加启动命令# 脚本文件为/ubuntu/home/script/mount.sh ./ubuntu/home/script/mount.sh 复制代码
-
Ubuntu增加账号密码登录方式
云服务器一般使用公钥方式登录,有时候需要以账号密码方式时,需要增加这种登录方式。比如提供给云厂商客服解决工单问题的时候。
-
首先查看当前登录用户:
who 复制代码
-
为用户创建密码:
# sudo useradd elastic 增加用户 sudo passwd ubuntu # ubuntu是账户名 # 输入并确认密码 复制代码
-
修改sshd配置
sudo su vi /etc/ssh/sshd_config # 修改2处 PermitRootLogin yes # 允许root账户登录 PasswordAuthentication yes # 允许密码登录 复制代码
-
重启sshd服务
sudo service ssh restart 复制代码
-
常用命令
top
top中一些字段的含义:
-
内存
-
VIRT:virtual memory usage,虚拟内存
进程需要的虚拟内存大小
-
RES:resident memory usage,常驻内存
进程当前使用的内存大小,不包括swap out
-
SHR:shared memory,共享内存
某个进程所占物理内存:RES-SHR
-
DATA:数据占用的内存
-
-
CPU
- us:user,运行(未调整优先级的)用户进程的CPU时间
- sy:system,运行内核进程的CPU时间
- ni:niced,运行已调整优先级的用户进程的CPU时间
- wa:IO wait,用户等待IO完成的CPU时间
- hi:处理硬件中断的CPU时间
- si:处理软件中断的CPU时间
- st:这个虚拟机被hyperversor偷去的CPU时间
top -Hp [进程ID]
iostat(-x)
- tps:该设备每秒的传输次数
- kB_read/s:每秒从设备读取的数据量
- kB_wrtn/s:每秒向设备写入的数据量
- kB_read:读取的总数据量
- kB_wrtn:写入的总数据量
- rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(相同Block的读取请求会Merge)
- wrqm/2:每秒这个设备相关的写入请求有多少被Merge了
- await:每个IO请求处理的平均时间(ms)
- %util:在统计时间内所有处理IO时间,储以总共统计时间。表示设备的繁忙程度。
vim
替换字符串
[range]s/s1/s2/[option]
- [range]表示检索范围,缺省值为当前行
1,10
表示第一行到第10行%
表示整个文件,同1,$
.,$
表示当前行到文件尾
- s为替换命令
- s1为要被替换的串,s2为替换的串
- [option]表示选项
- /g表示整行
- /c表示每次替换之前需要确认
- 缺省时仅对每行第一个匹配串进行替换
判断
-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新 [ ``"/data/file1"` `-nt ``"/data/file2"` `]
-ot 判断file1是否比file2旧 [ ``"/data/file1"` `-ot ``"/data/file2"` `]
复制代码
MD5
Linux: md5sum filename
Windows: certutil -hashfile filename MD5
ssh
ssh-keygen -t rsa
ls
ls -lh
查看文件信息,h表示将文件容量以人类易读的方式展示
正则表达式
元字符 | 含义 |
---|---|
^ | 匹配行首 |
$ | 匹配行尾 |
^$ | 表示空行 |
. | 匹配一个任意字符 |
* | 匹配0或多个任意字符 |
\ | 转义元字符 |
[] | 匹配括号内的字符 |
grep
grep擅长查找过滤。
语法:grep [OPTIONS]... PATTERN [FILE]...
,FILE是要搜索的文件,OPTIONS如下。
OPTIONS:
-
正则说明类:
简写 全称 含义/用法 -E –extended-regrexp 使用ERE,扩展正则表达式语法 -F –fixed-strings 使用固定字符串 -G –basic-regexp 使用BRE,基本正则表达式语法 -e –regexp=PATTERN 使用BRE,基本正则表达式语法 -f –file=FILE 指定文件内容作为正则,文件中每行为一个正则 -i –ignore-case 忽略大小写 -w –word-regexp 匹配整个单词 -x –line-regexp 匹配整行 -
其它:
简写 全称 含义/用法 -v –invert-match 匹配不含指定正则的行 -
输出控制:
简写 全称 含义/用法 -n –line-number 打印行号 -o –only-matching 仅显示正则匹配到的字符串 -
上下文控制:
简写 全程 含义/用法 -B –before-context=NUM 打印前NUM行 -A –after-context=NUM 打印后NUM行 -C –context=NUM 打印前后NUM行 -NUM -NUM 打印前后NUM行
常用-v, -n, -w。
sed
sed擅长取行和替换。sed全称是Stream EDitor,流编辑器。
语法:sed [OPTION]... [动作] [input-file]...
。
OPTION:
简写 | 全称 | 含义 |
---|---|---|
-n | –quiet或–silent | 安静模式,只有经过sed特殊处理的行或操作才会列出来 |
-e script | –expression=script | 直接在命令行模式上进行sed的动作编辑 |
-f script-file | –file=script-file | 直接将sed的动作写在一个文件内,-f执行文件内的sed动作 |
-r | –regexp-extended | 使用扩展的正则表达式 |
-i[SUFFIX] | –in-place[=SUFFIX] | 直接读取和修改文件而不是输出到屏幕 |
动作:
[n1[,n2]]function
-
n1,n2表示进行动作的行范围。
-
function有下面这些参数:
参数 含义/用法 a 新增,a的后面可以接字符串,这些字符串会在新的一行出现(目前的下一行) c c的后面可以接字符串,这些字符串可以替换区间[n1,n2]的行 d d后面不带参数 i i的后面可以接字符串,这些字符串会在新的一行出现(目前的上一行) p 也就是将某个选择的数据打印出来,通常p会与参数sed -n一起运行,例如: sed -n '5,7p'
s 替换,可以直接进行替换的工作,通常可以搭配正则表达式,例如: 1,20s/old/new/g
awk
awk擅长取列。awk得名于其三个创始人的姓氏首字母。
语法:awk '条件类型1{动作1} 条件类型2{动作2}...' filename
,动作外的大括号不能省略。
内置变量:
变量名 | 属性 |
---|---|
$0 | 当前记录 |
$1-$n | 当前记录的第n个字段 |
FS | 输入字段分隔符,默认一个或多个空格 |
RS | 输入记录分隔符,默认换行 |
NF | 当前记录中的字段数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始 |
OFS | 输出字段分隔符,默认空格 |
ORS | 输出记录分隔符,默认换行 |
例子:
# test文件内容
a :b::c
awk -F[" ":]+ 'print NF"\t"$1"\t"$2"\t"$3'
# 输出
3 a b c
复制代码
抓包
使用tcpdump抓包,在windows wireshark图形界面上查看。
# 直接输出
tcpdump tcp port 80 -n -X -s 0
# 输出文件
tcpdump tcp port 80 -n -s 0 -w ./tcp.cap
# 结合管道流
tcpdump tcp port 80 -n -s 0 -X -l |grep xxx
复制代码
Ubuntu下安装jdk
版本:
cat /etc/issue
Ubuntu 16.04.1 LTS \n \l
复制代码
通过PPA源安装
PPA(Personal Package Archives):个人软件包文档。所有PPA都是寄存在Canonical公司的launchpad.net网站上的,只有Ubuntu用户可以用。类似于maven的中央仓库坐标,可以去launchpad.net上面搜软件获取安装命令。
添加源:
add-apt-repository ppa:xxx/xxx
更新系统源:
apt-get update
安装软件:
apt-get install xxx
复制代码
通过PPA源安装open jdk
安装命令
sudo su
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-8-jdk
复制代码
切换jdk版本
update-alternatives --config java
update-alternatives --config javac
复制代码
卸载
apt-get remove openjdk*
复制代码
通过PPA源安装oracle jdk
由于oracle修改了JDK许可证,通过ppa:webupd8team/java的方式就已经过时不可用了。
下载并安装Jdk
在WINDOWS上下载jdk叭,再传到ubuntu主机上。
解压在/usr/local/java/下。
环境变量:
export JAVA_HOME=/usr/local/java/jdk1.8.0_221
export PATH=$JAVA_HOME/bin:$PATH
# 生效环境变量
source /etc/profile
复制代码
建议在/etc/profile.d下新建jdk.sh,然后将环境变量放进去。
/etc/profile , /etc/profile.d ,~/.bashrc, ~/.bash_file的区别:
~/.bashrc, ~/.bash_file这两个看到~这个符合,应该明白,这是宿主目录下的,即里面的环境变量也叫shell变量,是局部的,只对特定的shell有效,修改过别忘了source 命令一下。
/etc/profile , /etc/profile.d,前面的是文件,后面一看也就明白.d表示目录, /etc/profile里面的变量是全局的,对所有用户的shell有效。
JDK 1.6之后不需要配CLASSPATH。