系统下载

CentOS:https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-NetInstall-2009.iso?spm=a2c6h.25603864.0.0.74092d1c5VBGBd

RPM资源下载

http://www.rpmfind.net/linux/rpm2html/search.php?query=&submit=Search+...&system=&arch=

常用命令

参考 https://wangchujiang.com/linux-command/

scp

1
2
3
cd /software
# 拷贝指定服务器指定目录拷贝到当前目录下
scp -r root@192.168.1.33:/software/fast-zhzf2 ./

查看 IP

1
ip add show

ssh 连接

1
ssh 账号@ip

查看 Linux 发行版名称和版本号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat /etc/os-release

/etc/*-release 文件

uname 命令

/proc/version 文件

dmesg 命令

YUM 或 DNF 命令

RPM 命令

APT-GET 命令

查看端口占用并杀死进程

  • netstat 命令

    1
    netstat -an | grep 3306

    3306 替换成需要 grep 的端口号

  • lsof 命令

    1
    2
    3
    4
    5
    6
    lsof -i:80

    lsof -i tcp:80

    lsof -i tcp:8080
    kill -9 PID

    -i 参数表示网络链接,:80 指明端口号

  • 查看所有进程监听的端口

    1
    sudo lsof -i -P | grep -i listen
  • 根据端口号杀死进程

    1
    kill -9 `lsof -t -i:8888`

统计命令耗时

1
2
3
4
5
6
7
time command

示例:
time curl https://www.baidu.com

...
curl https://www.baidu.com 0.03s user 0.03s system 31% cpu 0.182 total

统计指定目录文件内容总行数

  1. 包含空行、注释

    1
    find . -name "*.java"|xargs cat|wc -l
  2. 去除空行

    1
    find . -name "*.java"|xargs cat|grep -v ^$|wc -l

获取文件夹下的文件名

1
2
3
4
5
6
7
8
9
#!/bin/bash
# get all filename in specified path

path=$1
files=$(ls $path)
for filename in $files
do
echo $filename >> filename.txt
done

获取内存总大小

1
grep MemTotal /proc/meminfo 

获取交换分区大小

1
grep SwapTotal /proc/meminfo

查看 tomcat 进程打开文件数量

1
2
3
4
5
查看进程 pid:
ps aux|grep tomcat

根据 pid 查看打开文件数量:
lsof -p pid|wc -l

查看目录下文件或目录个数

1
ls -l|wc -l

查看磁盘空间分配情况

1
df -h 

查看当前目录下各目录大小

1
du -sh * 

查看当前目录下每个子目录的文件数量

1
find . -maxdepth 1 -type d | while read dir; do count=$(find "$dir" -type f | wc -l); echo "$dir : $count"; done

路径名中含空格

  • 使用转义字符 \
1
ls /Users/mac126/Library/Application\ Support/Beyond\ Compare/
  • 加双引号 “” 或 单引号’’
1
2
3
ls /Users/mac126/Library/"Application Support"/"Beyond Compare"/

ls /Users/mac126/Library/'Application Support'/'Beyond Compare'/

时间校准

  1. 安装 ntpdate,执行以下命令
    1
    yum install ntpdate -y
  2. 手工同步网络时间,执行以下命令,将从 time.nist.gov 同步时间
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ntpdate 0.asia.pool.ntp.org

    若上面的时间服务器不可用,也可以选择以下服务器同步时间

      time.nist.gov

      time.nuri.net

      0.asia.pool.ntp.org

      1.asia.pool.ntp.org

      2.asia.pool.ntp.org

      3.asia.pool.ntp.org
  3. 使用 crontab 计划任务定时更新网络时间,修改 crontab 文件
    1
    2
    3
    vi /etc/crontab

    * */1 * * * ntpdate 0.asia.pool.ntp.org //在末尾增加,每隔1小时同步一次时间。

    4) 使用 date 命令查看当前时间

    5) 系统时间同步到硬件,防止系统重启后时间呗还原

    1
    hwclock --systohc

防火墙设置「CentOS」

修改配置后要重启防火墙

查看 firewall 服务状态

1
2
3
4
systemctl status firewalld

出现Active: active (running)切高亮显示则表示是启动状态
出现 Active: inactive (dead)灰色表示停止

关闭防火墙命令

1
2
3
4
5
6
7
8
#centos7
systemctl stop firewalld.service

#以下为:centOS 6.5关闭防火墙步骤
#关闭命令:
service iptables stop
#永久关闭防火墙:
chkconfig iptables off

开启防火墙

1
systemctl start firewalld.service

关闭开机自启动

1
systemctl disable firewalld.service

开启开机启动

1
systemctl enable firewalld.service

查看 firewall 的状态

1
firewall-cmd --state

查看防火墙规则

1
firewall-cmd --list-all 

查询端口是否开放

1
firewall-cmd --query-port=8080/tcp

iptables 配置文件

1
/etc/sysconfig/iptables

开放 80 端口

1
firewall-cmd --permanent --add-port=80/tcp

移除 80 端口

1
firewall-cmd --permanent --remove-port=8080/tcp

重启防火墙

1
firewall-cmd --reload

CentOS7 如何开启 iptables 日志

https://www.crowsong.xyz/1294.html

lsof 命令不识别

1
安装命令:yum install lsof

Shell

shell 获取当前日期,当前时间

1
2
3
4
5
DATE="`date +%Y-%m-%d`"
echo $DATE

DATETIME="`date +%Y-%m-%d,%H:%m:%s`"
echo $DATE

查看当前shell

1
echo $SHELL

添加开机自启动脚本

在/etc/rc.local中添加

Linux 定时任务示例

重启 Tomcat 服务脚本 - restarttomcat.sh

添加定时任务,实现定时重启 Tomcat 服务器

1
crontab -e

添加内容:

1
0 1 * * * /bin/bash /home/wangwz/Desktop/restarttomcat.sh >> /home/restart.log

查看任务:

1
crontab -l 

用户

忘记 root 密码

以 单用户模式进入,修改 root 密码。如果 /etc/passwd 文件不存在,则需要手动创建,并填写如下内容「必需」

1
2
3
4
5
6
7
8
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sssd:x:989:986:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:988:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

切换为 root 用户

1
sudo -i

更换密码

1
2
passwd root
passwd zhangsan

开启 root

1
2
3
4
5
6
7
8
9
10
//给 root 用户设置密码
sudo passwd root

//使用 root 用户登陆
sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
在最后增加 greeter-show-manual-login=true

//关闭 guest 用户
sudo vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
在最后增加 allow-guest=false

Linux免密登录

  1. 环境

    1
    2
    A 机器 192.168.0.200
    B 机器 192.168.0.201
  2. 安装插件

    1
    2
    sudo apt-get install openssh-server
    sudo yum -y install openssh-clients
  3. 在 A 生成密钥配置

    1
    2
    // 不要输入密码
    ssh-keygen -t rsa
  4. 将 A 生成的公钥文件拷贝到 B

    1
    2
    3
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.201
    # 回车后输入 B 机器 root 用户的密码
    # 或者将 id_rsa.pub文件的内容拷贝至远程服务器的~/.ssh/authorized_keys文件中
  5. 验证是否成功

    1
    ssh root@192.168.0.201

问题

  1. 异常 /bin/sh^M: bad interpreter: No such file or directory

    • 在 windows 下转换:利用一些编辑器如 UltraEdit 或 EditPlus 等工具先将脚本编码转换,再放到 Linux 中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX

    • Linux 中转换

      1. 首先要确保文件有可执行权限

        1
        chmod +x filename
      2. 然后修改文件格式

        1
        vi filename
      3. 查看文件格式

        1
        :set ff 或 :set fileformat
      4. 修改文件格式

        1
        :set ff=unix 或 :set fileformat=unix

JDK

  1. 将 jdkXXX.tar.gz 放入/usr/java 文件夹中,解压

    1
    tar zxvf jdkXXX.tar.gz
  2. 设置环境变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    vi /etc/profile
    在最后添加:
    export JAVA_HOME=/usr/java/jdk1.8.0_191
    export JRE_HOME=/usr/java/jdk1.8.0_191/jre
    export PATH=$PATH:./:/usr/java/jdk1.8.0_191/bin:/sbin
    export CLASSPATH=./:/usr/java/jdk1.8.0_191/lib:/usr/java/jdk1.8.0_191/jre/lib

    //使刚才的修改生效
    source /etc/profile
  3. 建立软链接

    1
    2
    3
    4
    //先删除软连接
    rm -fr /usr/bin/java

    ln –s /usr/java/1.8.0_191/bin/java /usr/bin/java
  4. 测试 jdk 是否安装成功

    1
    java –version

更新 centos 上的 gcc

Linux升级安装GCC - IT笔录 (itbilu.com)

rsync 和 scp

  • rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点

  • rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去

rsync

基本语法

1
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname

命令 选项参数 要拷贝的文件路径 / 名称 目的用户 @主机:目的路径 / 名称

选项参数说明:

选项 功能
-r 递归
-v 显示复制过程
-l 拷贝符号连接

案例实操

(a)把 hadoop01 机器上的 /home/software/rhf001 目录同步到 hadoop02 服务器的 root 用户下的 /home/software/ 目录

img

xsync 集群分发脚本

需求

循环复制文件到所有节点的相同目录下

rsync 命令原始拷贝
1
rsync -rvl /home/software/rhf001 root@hadoop02:/home/software/
在 /usr/local/bin 目录下创建 xsync 文件,向里面添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
# 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args...;
exit;
fi
# 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
# 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
# 获取当前用户名称
user=`whoami`
# 循环
for((host=3; host<=4; host++)); do
echo $pdir/$fname $user@slave$host:$pdir
echo ==================slave$host==================
rsync -rvl $pdir/$fname $user@slave$host:$pdir
done
#Note:这里的slave对应自己主机名,需要做相应修改。另外,for循环中的host的边界值
修改脚本 xsync 具有执行权限
1
chmod 777 xsync
将 filename 分发到集群中的各个节点中
1
xsync filename