linux

校验是否是同一个文件

md5sum

1
md5sum 文件名

sha1sum

1
sha1sum 文件名

shell

默认值

  1. ${var:=初始值} 调用初始值后,变量var也赋予了一个值
  2. ${var:-初始值} 临时调用,变量var并不改变,仍然为空
1
2
3
4
5
6
7
8
9
10
11
[root@server0 ~]# a=${b:-12}
[root@server0 ~]# echo $a
12
[root@server0 ~]# echo $b


[root@server0 ~]# a=${b:=12}
[root@server0 ~]# echo $a
12
[root@server0 ~]# echo $b
12

删除日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#################删除文件#################
#!/bin/sh
DAY=${1:-100} #默认值100天

BEFORE_COUNT=$(find ./microservice/logs -type f|wc -l) #统计原来的数量

# 删除100天前的操作
find ./microservice/logs -mtime +$DAY -type f -name "*.log" | xargs rm -rf

if [ $? = 0 ]
then
AFTER_COUNT=$(find ./microservice/logs -type f|wc -l)
echo clear success!before_count=$BEFORE_COUNT,after_count=$AFTER_COUNT
else echo 'clear fail!'
fi


#################删除目录#################
#!/bin/sh
DAY=${1:-100} #默认值100天

BEFORE_COUNT=$(find . -type d|wc -l) #统计原来的数量

# 删除100天前的操作
find . -mtime +$DAY -type d -name "*-M*" |xargs rm -rf

if [ $? = 0 ]
then
AFTER_COUNT=$(find . -type d|wc -l)
echo clear success!before_count=$BEFORE_COUNT,after_count=$AFTER_COUNT
else echo 'clear fail!'
fi

变量赋值

  1. 直接赋值,格式为:变量名= 变量值

    1
    VAR='nice'
  2. Read 命令是系统内置命令

    1
    2
    read -p "input a val:" VAR    #获取键盘输入的 VAR 变量
    read -p "please input your age: ,sex: " age sex #多个变量,以空格的形式截取
  3. 使用命令行参数赋值

1
2
3
4
5
6
$0	#shell脚本程序名
$1 #第一个参数
$2 #第二个参数
$# #参数总数
$* #所有位置的参数(所有参数)
$? #上一次命令执行返回值
  1. 利用命令的输出结果赋值:
1
2
3
currentdir=`pwd`  

echo $currentdir
  1. 从文件中读入数据
1
2
3
HOSTLIST=$(cat hostList.txt)

for HOST in $HOSTLIST

https://www.cnblogs.com/Dxd-python/articles/11125968.html

隐藏属性

root

  1. chattr [+/-] [参数] [目录或文件]

  2. lsattr [参数] [目录或文件]

1
2
3
4
5
chattr +a test
lsattr test

chattr -a test
lsattr test

ACL

给文件/目录,赋予某用户/组的权限

  1. setfacl
  2. getfacl
1
2
3
4
5
setfacl -m u:luxia:rw- test

-rw-rw-r--+ 1 root root 6 Jun 25 10:14 test

getfacl test

su / sudo

su

su 需要输入目标用户的密码

  1. su 不加用户,默认切到 root用户
  2. su 用户名 只能获得root的执行权限,不能获得环境变量(不改变当前用户的变量)
  3. su - 用户名 彻底切换为root用户(也切换了用户变量)

sudo

sudo 需要输入当前用户的密码

sudo 命令 在当前用户下,执行root用户才能执行的命令。需要root给当前用户用visudo命令(或者编辑/etc/sudoers文件)配置权限

1
2
3
4
5
6
7
8
9
10
11
12
13
# root用户
visudo 或者直接vim /etc/sudoers

want ALL=(ALL) ALL

# 切换到want用户
sudo -l

# 提示无权限
ls /root

# 可以查看
sudo ls /root

`

1
2
3
4
5
6
7
8
9
10
11
12
13
# root用户
visudo 或者直接vim /etc/sudoers

want ALL=(ALL) /usr/bin/cat

# 切换到want用户
sudo -l

# 提示无权限
cat /etc/shadow

# 可以查看
sudo cat /etc/shadow

ln

ln [参数] 源文件 目标文件

  1. 软连接,依赖源文件。
  2. 硬链接,不依赖源文件,类似于复制了一份文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
echo "test link" >> link.txt

## 软连接
ln -s link.txt link2

lrwxrwxrwx. 1 root root 8 Jun 25 11:37 link2 -> link.txt
-rw-r--r--. 1 root root 10 Jun 25 11:36 link.txt

## 硬链接
ln -s link.txt link3

# 原始文件的硬盘链接数增加到2
-rw-r--r--. 2 root root 10 Jun 25 11:39 link3
-rw-r--r--. 2 root root 10 Jun 25 11:39 link.txt

# 删除原始文件,软连接不能访问,硬链接仍然可以访问。
lrwxrwxrwx. 1 root root 8 Jun 25 11:38 link2 -> link.txt
-rw-r--r--. 1 root root 10 Jun 25 11:39 link3

网络

ping

1
2
3
4
5
6
7
ping -c 4 192.168.37.1

#参数
-c 指明发送数据报文的次数

#退出
Ctrl + C

telnet

安装(root用户)

1
2
3
4
5
6
7
8
9
10
11
12
# 检查是否安装telnet,如果安装会有返回
rpm -qa | grep telnet

# 查看可以查看的telnet相关的软件
yum list | grep telnet

# 安装
yum install -y telnet*

#或者指定具体安装内容
yum install -y telnet-server.x86_64
yum install -y telnet.x86_64
1
2
3
4
telnet 192.168.37.1 21

# 退出
输入quit

traceroute

  1. 从计算机A到另一端主机B所经历的全部网络路径。
  2. 每次数据包由同样出发点(source)到达同样目的地(destination)走的路径可能不一样,大部分是相同的。
  3. traceroute通过发送小的数据包到目的设备直到返回,来测量需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有)及其IP地址。
  4. 有些返回结果是星号*表示的,可能是防火墙封掉了ICMP的返回信息,所以得不到相关的数据包返回。

命令:

  1. Linux,traceroute
  2. Windows,tracert
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
traceroute 192.168.37.1
traceroute www.baidu.com

-q 默认向每个网关发送3个探测包,可以通过-q 指定次数。
-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关,最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。

-m 设置检测数据包的最大存活数值TTL的大小。【指定最多经过的路径跳数,默认30跳】

-n 直接返回IP地址而非主机名称。【避免了域名的解析】

-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。【绕过正常的路由表,直接发送到网络相连的主机】
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。【把对外发探测包的等待响应时间设置为XXX秒】
-x 开启或关闭数据包的正确性检验。

参考:

  1. traceroute https://blog.csdn.net/llq_200/article/details/81034345

磁盘df

查看所有磁盘分区的大小、已用、剩余

1
2
3
4
5
6
7
8
9
10
11
12
13
df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 50G 41G 9.7G 81% /
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 1.6G 15G 11% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/sda1 1014M 140M 875M 14% /boot
/dev/mapper/cl-home 142G 2.4G 139G 2% /home
tmpfs 3.2G 0 3.2G 0% /run/user/1001
tmpfs 3.2G 0 3.2G 0% /run/user/0
dynamic.caiyun-clu-03.com:/HASZ 5.0T 209G 4.8T 5% /data

查看指定目录的磁盘剩余空间

1
2
3
4
df -h /usr/

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 50G 41G 9.7G 81% /

文件夹du

查看文件占用大小。用于快速定位大文件的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 当前目录本身大小
du -sh

#指定文件、目录大小
du -sh 文件或者目录
------------------------------------------------------------------
# 当前目录下所有文件大小
du -sh *

#指定目录下每个文件大小
du -sh 目录/*

#指定根目录下每个文件大小
du -sh /*
------------------------------------------------------------------
# 目录+目录下所有子目录 大小
du -h 目录 #查看指定目录下所有目录大小(含子目录)
du -h --max-depth=1 /home/* #列出home下面所有一级目录的一级目录文件大小
------------------------------------------------------------------
# 单位是MB
du -sm

当前目录下的文件个数

1
2
3
4
5
6
7
8
#查看当前目录下有多少文件、目录
ls |wc -l

#只查看目录个数
find . -type d|wc -l

#只查看文件个数
find . -type f|wc -l
-------------Keep It Simple Stupid-------------
0%