常用shell命令

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

  1. 显示行号

    sudo vim /etc/vim/vimrc
    # 添加
    set number
    复制代码
  2. scp

    # 本地 --文件--> 远程
    # 本地 --公钥--> 远程
    # 拷贝文件
    scp <file> ubuntu@172.16.0.1:/home/ubuntu/
    # ssh连接
    ssh ubuntu@172.16.0.1
    复制代码

注意:命令行yes/no的时候,不要直接回车,应输入yes回车。

  1. 安装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;
    复制代码
  2. 安装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 / 用户名 "." "." ".*"
    
    复制代码
  3. 安装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
    
    复制代码
  4. 启动jar包

    nohup java -jar xxx.jar > ./nohup.out 2>&1 &
    复制代码
  5. 解压zip

    # 解压到指定目录
    unzip -d 指定目录 xxx.zip
    复制代码
  6. 安装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
    复制代码

    www.jianshu.com/p/f2592d106…

  7. ubuntu 16.04添加开机自启脚本

    /etc/rc.local中添加启动命令

    # 脚本文件为/ubuntu/home/script/mount.sh
    ./ubuntu/home/script/mount.sh
    复制代码
  8. Ubuntu增加账号密码登录方式

    云服务器一般使用公钥方式登录,有时候需要以账号密码方式时,需要增加这种登录方式。比如提供给云厂商客服解决工单问题的时候。

    1. 首先查看当前登录用户:

      who
      复制代码
    2. 为用户创建密码:

      # sudo useradd elastic 增加用户
      sudo passwd ubuntu # ubuntu是账户名
      # 输入并确认密码
      复制代码
    3. 修改sshd配置

      sudo su
      vi /etc/ssh/sshd_config
      
      # 修改2处
      PermitRootLogin yes # 允许root账户登录
      PasswordAuthentication yes # 允许密码登录
      复制代码
    4. 重启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。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享