Skip to content

Latest commit

 

History

History
2181 lines (1706 loc) · 69 KB

linux-命令.md

File metadata and controls

2181 lines (1706 loc) · 69 KB

Table of Contents generated with DocToc

系统管理

👉groupadd - 添加用户组

👉用户文件/etc/group。

groupadd [options] ${group_name}

#	常用options
-g, --gid GID # 用户组 组id

👉groupmod - 修改用户组

👉groupdel - 删除用户组

👉useradd - 添加用户

👉用户文件/etc/passwd。

 useradd [options] ${user_name}
 
 #	常用options
 -d, --home-dir HOME_DIR  #	用户工作目录
 -g, --gid GROUP   # 用户组id
 -p, --password PASSWORD #	用户密码
 -u, --uid UID # 用户id
 
 #	例子 
 useradd stonebird

👉usermod - 修改用户

usermod [options] ${user_name}
# 和useradd一致
# 例子
usermod -g 1002 stonebird

👉userdel - 删除用户

userdel [options] ${user_name}
# options
-r, --remove 删除用户目录

# 例子
userdel stonebird
userdel -r stonebird

👉passwd - 修改用户密码

👉用户文件/etc/shadow。

passwd ${user_name}

# 非交互模式 root 
--stdin             read new tokens from stdin (root only)
echo "123456"|passwd --stdin stonebird

👉su - 切换用户

中间带 - 使用用户的环境变量

# options
-c	执行完指定的指令后,即恢复原来的身份

sudo - 以系统管理者的身份执行指令

chpasswd - 修改当前用户

👉date - 显示或设置系统日期与时间

date [OPTION]... [+FORMAT]

## 例子
date  +"%Y-%m-%d %H:%M:%S"
date +%s

finger - 查询其他使用者的资料

finger root

👉who/whoami/w - 查看当前登录用户信息

👉sleep - 延迟当前命令的执行(s)

## 常用options
number 	时间长度,后面可接 s、m、h 或 d
<数字>s	秒数
<数字>m	分钟
<数字>h	小时
<数字>d	日期

## 例子
sleep 10  # 默认 s
sleep 3m

usleep - 延迟当前命令的执行(us)

# 延迟0.1秒
sleep 0.1
usleep 100000
 
# 延迟 10 毫秒
sleep 0.01
usleep 10000

👉crontab - 管理定时计划任务

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

"*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
"-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
","分散的数字(不一定连续),如1,2,3,4,7,9。

## 常用options
-e	编辑任务
-l	列出任务
-r	删除任务
-u	指定用户名字

## 例子
3,15   *    *    *    *  command  # 每小时的第3和第15分钟执行command
3,15  8-11  *  *  *  command # 8-10点,每小时的第3和第15分钟执行command
*  */1  *  *  *  /etc/init.d/smb restart # 每小时重启一次

at - 一次性定时计划任务

## 常用options
atq	查看系统中的等待作业
-d	删除系统中的等待作业(等效于atrm命令)

batch - 指定时间执行任务

👉alias - 设置命令别名

## 常用options
-p	打印已经设置的命令别名

## 例子
alias ll=ls -lt
alias -p

👉time - 指令执行时所消耗的时间

time command

declare - 声明shell变量

## 常用options
-a	声明数组变量
-f	仅显示函数
-F	不显示函数定义
-i	先计算表达式,把结果赋给所声明变量
-p	显示给定变量的定义的方法和值,当使用此选项时,其他的选项将被忽略
-r	定义只读变量
-x	将指定的Shell变量转换成环境变量

## 例子
declare -x file_name="test.txt"

👉export - 查看或设置环境变量

推荐使用,内部会转成declare

-f	指定函数名称
-n	删除指定的变量
-p	列出所有的环境变量
## 例子
export file_name="test.txt"
export |grep file_name

👉systemctl - 管理系统服务

##	常用options
start	启动服务
stop	停止服务
restart	重启服务
enable	使某服务开机自启
disable	关闭某服务开机自启
status	查看服务状态
cat     查看服务配置
list -units --type=service	列举所有已启动服务

## 例子
systemctl start httpd

👉service - 管理系统服务

## 例子
systemctl httpd [stop|start|restart|stauts]

👉clear - 清除屏幕

原理是向后翻页

👉dmesg - 显示开机信息

排查系统开机问题的重要参数 /var/log/dmesg

👉halt - 关闭当前服务器系统

## 常用options
-w	模拟关机,把过程写入到日志文件
-d	不写入日志纪录
-f	强制关机或重启
-i	关机或重启前关掉所有的网络服务

shutdown - 关闭服务器的系统

-r	将系统重启
-t	送出警告信息和删除信息之间要延迟多少秒

👉reboot - 重启系统

lsmod - 加载kernel模块管理

lsmod命令的指定结果共有三列。 Module:模块名。 Size:模块大小。 Used by:模块是否被其他模块调用。

👉modprobe - kernel模块智能加载工具

## 常用options
-a	加载命令行给出的全部的模块
-c	显示所有模块的设置信息
-d	使用排错模式
-l	显示可用的模块
-r	从内核中移除模块
-t	指定模块类型
-s	记录错误信息到系统日志中

insmod - 用于载入kernel模块

install mod

-f  不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。
-k  将模块设置为自动卸除。
-m  输出模块的载入信息。
-o<模块名称>  指定模块的名称,可使用模块文件的文件名。
-p  测试模块是否能正确地载入kernel。
-s  将所有信息记录在系统记录文件中。
-v  执行时显示详细的信息。
-x  不要汇出模块的外部符号。
-X  汇出模块所有的外部符号,此为预设置

rmmod - 用于删除kernel模块

rmmod [-as][模块名称...]

modinfo - 显示kernel模块的信息

## 常用options
-a	显示模块开发人员

👉sysctl - 配置内核参数

配置内核参数,sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录“/proc/sys”中。

sysctl命令对内核参数的修改仅在当前生效,重启系统后参数丢失。如果希望参数永久生效可以修改配置文件“/etc/sysctl.conf”。

-n	打印值时不打印关键字
-e	忽略未知关键字错误
-N	仅打印名称
-w	当改变sysctl设置时使用此项
-p	从配置文件“/etc/sysctl.conf”加载内核参数设置
-a	打印当前所有可用的内核参数变量和值
-A	以表格方式打印当前所有可用的内核参数变量和值

## 读取
sysctl net.ipv6.neigh.lo.locktime
net.ipv6.neigh.lo.locktime = 0

## 修改
sysctl net.ipv6.neigh.lo.locktime=1
net.ipv6.neigh.lo.locktime = 1 

👉kdump - 系统崩溃时记录日志

lsscsi - 列出SCSI设备及属性

列出SCSI设备及属性 ,了解即可

lscpu - 列出cpu信息

显示CPU架构的有关信息,了解即可

wall - 给所有打开的终端发送email

输出信息 wall命令用于向系统当前所有打开的终端上输出信息

wall this is a test line

jobs - 显示shell的作业信息

-l	显示作业列表时包括进程号
-n	显示上次使用jobs后状态发生变化的作业
-p	显示作业列表时仅显示其对应的进程号
-r	仅显示运行的(running)作业
-s	仅显示暂停的(stopped)作业

👉chronyc - 同步时间

配置文件 /etc/chrony.conf,是ntp命令的替代品

# 安装
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd

# 查看时间同步状态
timedatectl status
# 开启网络时间同步
timedatectl set-ntp true

# 查看 ntp_servers
chronyc sources -v

# 查看 ntp_servers 是否存活
chronyc activity -v

chronyc sourcestats -v
# 强制同步时间
chronyc -a makestep

👉timedatectl - 查看日期时间、时区及 NTP 状态

# 列出时区
timedatectl list-timezones

# 修改时区
timedatectl set-timezone Asia/Shanghai

# 修改时间
timedatectl set-time "2021-04-15 15:50:20"

# 开启ntp 
timedatectl set-ntp true/flase

👉 journalctl - 查看系统日志

/var/log/message , /var/log/dmesg

检索 systemd 日志,是 CentOS 7 才有的工具。

Flags:
 --system               # 显示系统日志
 --user                 # 显示当前用户的用户日志
-M --machine=CONTAINER  # 在本地容器上操作
-S --since=DATE         # 显示不早于指定日期的条目
-U --until=DATE         # 显示不晚于指定日期的条目
-c --cursor=CURSOR      # 显示从指定光标开始的条目
  --after-cursor=CURSOR # 在指定光标后显示条目
  --show-cursor         # 在所有条目之后打印光标
-b --boot[=ID]          # 显示当前启动或指定启动
  --list-boots          # 显示有关已记录引导的简洁信息
-k --dmesg              # 显示当前启动的内核消息日志
-u --unit=UNIT          # 显示指定单元的日志
-t --identifier=STRING  # 显示具有指定系统日志标识符的条目
-p --priority=RANGE     # 显示具有指定优先级的条目
-e --pager-end          # 在pager中立即跳转到末尾
-f --follow             # 关注期刊
-n --lines[=INTEGER]    # 要显示的日志条目数
  --no-tail             # 显示所有行,即使在跟随模式下
-r --reverse            # 首先显示最新的条目
-o --output=STRING      # 更改日志输出模式 (short, short-iso,
                                   short-precise, short-monotonic, verbose,
                                   export, json, json-pretty, json-sse, cat)
--utc                   # 以协调世界时 (UTC) 表示的时间
-x --catalog            # 在可用的情况下添加消息说明
   --no-full            # Ellipsize 字段
-a --all                # 显示所有字段,包括长的和不可打印的
-q --quiet              # 不显示特权警告
   --no-pager           # 不要将输出通过管道传输到寻呼机
-m --merge              # 显示所有可用期刊的条目
-D --directory=PATH     # 显示目录中的日志文件
   --file=PATH          # 显示日志文件
   --root=ROOT          # 对根目录下的目录文件进行操作
   --interval=TIME      # 更改 FSS 密封键的时间间隔
   --verify-key=KEY     # 指定FSS验证密钥
   --force              # 使用 --setup-keys 覆盖 FSS 密钥对 

Commands:
-h --help              # 显示此帮助文本
   --version           # 显示包版本
-F --field=FIELD       # 列出指定字段的所有值
   --new-id128         # 生成新的 128 位 ID
   --disk-usage        # 显示所有日志文件的总磁盘使用情况
   --vacuum-size=BYTES # 将磁盘使用量减少到指定大小以下
   --vacuum-time=TIME  # 删除早于指定日期的日志文件
   --flush             # 将所有日志数据从 /run 刷新到 /var
   --header            # 显示期刊头信息
   --list-catalog      # 显示目录中的所有消息 ID
   --dump-catalog      # 在消息目录中显示条目
   --update-catalog    # 更新消息目录数据库
   --setup-keys        # 生成新的 FSS 密钥对
   --verify            # 验证日志文件的一致性
   

# 例子
journalctl -u etcd

journalctl -k 

# 显示本次启动后的所有日志:
journalctl -b
journalctl -b -0 # 显示本次启动的信息
journalctl -b -1 # 显示上次启动的信息
journalctl -b -2 #  显示上上次启动的信息 `journalctl -b -2`

journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"

文件管理/目录管理

👉chown - 更改文件用户、属组

 chown [OPTION]... [OWNER][:[GROUP]] FILE
 
 # 常用options
 -R	递归目录
 
 # 例子
 chown root test.txt
 chown -R stonebird:stonebird test.txt

👉chmod - 更改文件权限

chmod [OPTION]... MODE[,MODE]... FILE...

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

# 例子
chmod +x test.sh
chmod 644 test.sh
chmod a=rwx file
chmod ug=rwx,o=x file

👉touch - 创建文件或修改文件访问时间

touch ${file_name}

👉tree - 树状图列出目录的内容

tree path

👉vi/vim - 编辑文件内容

# 常用快捷键
:set nu=每行显示行号  
:set nonu=取消显示行号
:${line}   ## 0,$
## 编辑模式
0=单行首  
$=单行末
gg=文件首行  
G=文件末行  
u 撤销
:m,ns/old/new/g=第m行到n行,所有“old“串替为“new“  

👉ls - 列出文件目录

ls [OPTION]... [FILE]...

# 常用options
-a	# 显示所有文件 含.开头
-l  # 详细信息
-d  # 只列出文件夹
-f  # 只列出文件
-r  # 对列出的排序
-t  # 通过时间排序access time (-u): atime, access, use;
	# change time (-c): ctime, status;

👉dir - 列出文件

dir [OPTION]... [FILE]...

# 常用和 ls 一样 

👉cd - 切换工作目录

cd dir

# 常用例子
cd # 切换工作目录
cd dir # 切断到dir
cd - # 切换到之前的目录
cd . # 当前
cd .. # 切换到上层

👉pwd - 显示当前工作目录

👉dirs - 显示当前工作目录

👉cp - 文件文件或者目录

cp [OPTION]... [-T] SOURCE DEST

## 常用options 
-f	若目标文件已存在,则会直接覆盖原文件
-i	若目标文件已存在,则会询问是否覆盖
-p	保留源文件或目录的所有属性
-r	递归复制文件和目录

👉scp - 基于SSH协议远程复制文件或目录

scp [OPTION]... SOURCE DEST

## 常用options 
-4	使用ipv4
-6	使用ipv6
-P	指定远程主机的端口号
-q	不显示复制进度
-r	以递归方式复制

# 例子
scp -r 192.168.10.10:/root/stonebird /root
scp -r /root 192.168.10.10:/root/stonebird

rcp - 远程复制文件或目录

rcp [OPTION]... SOURCE DEST

## 常用options 
-r	递归处理,将指定目录下的文件与子目录一并处理
-D	指定远程服务器的端口号

👉mkdir - 创建文件或者目录

mkdir [OPTION]... DIRECTORY...

## 常用options
-m, --mode=MODE   设置文件或者目录权限, not a=rwx - umask
-p, --parents     递归创建多级目录

## 例子
mkdir -p /home/stonebird/data/run.sh
mkdir -m 755 -p /home/stonebird/data/run.sh

rmdir - 删除一个空文件夹

rmdir [OPTION]... DIRECTORY...

## 常用options
-p	用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
-v	显示命令的详细执行过程

👉rm - 删除文件或目录

rm [OPTION]... [FILE]...

## 常用options
-f	强制删除(不二次询问)
-i	删除前会询问用户是否操作
-r/R	递归删除
-v	显示指令的详细执行过程

## 例子
rm -rf /home/stonebird

👉mv - 移动或改名文件

mv [OPTION]... SOURCE... DIRECTORY

## 常用options
-i	若存在同名文件,则向用户询问是否覆盖
-f	覆盖已有文件时,不进行任何提示
-b	当文件存在时,覆盖前为其创建一个备份

## 例子
mv data /home/stonebird/
mv run.sh run_test.sh

👉cat - 查看文件内容

cat [OPTION]... [FILE]...

## 常用options
-n	显示行数(空行也编号)
-s	显示行数(多个空行算一个编号)
-b	显示行数(空行不编号)
-E	每行结束处显示$符号
-T	将TAB字符显示为 ^I符号
-v	使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e	等价于”-vE”组合
-t	等价于”-vT”组合
-A	等价于 -vET组合

## 例子
cat -A run.txt
cat -n run.txt

more - 分页显示文件内容

more [options] <file>...

## 常用options
-num	指定每屏显示的行数
-l	more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
+/pattern	在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 	从第 num 行开始显示

## 常用键
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏

👉less - 分页显示文件内容

less  [options] <file>...

## 常用键
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页

👉head - 显示文件开头的内容

head [OPTION]... [FILE]...
 
## 常用options
-n <数字>	定义显示行数
 
## 例子
head -n 50 run.txt

👉tail - 显示文件结尾的内容

tail [OPTION]... [FILE]...
 
## 常用options
-f	持续显示文件最新追加的内容
-n <N>	输出文件的尾部N(N位数字)行内容

## 例子
tail -n 50 run.txt
tail -f run.log

👉grep/egrep - 文本过滤

grep [OPTION]... PATTERNS [FILE]...

## 常用options
-i	忽略大小写
-n	列出所有的匹配行,显示行号
-v	显示不包含匹配文本的所有行
-o	仅显示匹配的行的非空部分
-E	支持扩展的正则表达式

👉awk - 文本和数据进行处理的编程语言

awk [POSIX or GNU style options] -f progfile [--] file ...

## 常用options
-F	指定输入时用到的字段分隔符

## 内置变量
ARGC	命令行参数个数
ARGV	命令行参数排列
ENVIRON	支持队列中系统环境变量的使用
FILENAME	awk浏览的文件名
FNR	浏览文件的记录数
FS	设置输入域分隔符,等价于命令行 -F选项
NF	浏览记录的域的个数
NR	已读的记录数
OFS	输出域分隔符
ORS	输出记录分隔符
RS	控制记录分隔符

👉sed - 批量编辑文本文件

sed [OPTION]... {script-only-if-no-other-script} [input-file]...
 
## 常用options
-i 在原文件编辑
-n或--quiet或--silent 仅显示script处理后的结果。

## 动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!

👉ln - 创建链接

软连接:L开始,删除源文件,会影响链接文件 硬链接:和源文件一样的基本信息,删除原文件对链接文件没影响

ln [OPTION]... [-T] TARGET LINK_NAME

## 常用options
-s  创建软连接

👉diff - 比较文件内容差异

diff [OPTION]... FILES

## 常用options
-a	逐行比较文本文件
-y	以并列的方式显示文件的异同之处

which - 找查命令文件路径

👉whereis - 找查命令文件路径

## 常用options
-b	查找二进制程序或命令
-B	从指定目录下 查找二进制程序或命令
-m	查找man手册文件

👉find - 查找文件位置

find [path...] [expression]

## 常用options
-name	按名称查找
-size	按大小查找
-user	按属性查找
-type	按类型查找
-iname	忽略大小写
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结

## 例子
find / -type d -perm 1777

👉locate/slocate - 查找文件位置

locate ${file_name}

## 常用options
-d 指定目录

👉sort - 将文件进行排序并输出

sort [OPTION]... [FILE]...

## 常用options
-n	依照数值的大小排序
-r	以相反的顺序来排序
-t <分隔字符>	指定排序时所用的栏位分隔字符
-k	指定需要排序的栏位

## 例子
sort -t : -k 3 -n user.txt

👉uniq - 去除文件中的重复内容行

uniq [OPTION]... [INPUT [OUTPUT]]

## 常用options
-c	打印每行在文本中重复出现的次数
-d	每个重复纪录只出现一次
-u	只显示没有重复的纪录
-i, --ignore-case   忽略大小写差异

👉split - 文件分割

split [OPTION]... [FILE [PREFIX]]

##  常用options
-b	指定每多少字节切成一个小文件
-l  指定多少行

👉shuf - 打乱顺序产生随机的排列

-e	将每个ARG视为输入行

👉tar - 归档使用工具

tar [OPTION...] [FILE]...

## 常用options
-c	建立新的备份文件
-C <目录>	仅压缩指定目录里的内容或解压缩到指定目录
-x	从归档文件中提取文件
-z	通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-f  <备份文件>	指定备份文件
-v	显示指令执行过程
-r	添加文件到已经压缩的文件
-v	显示操作过程
-j	通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2

# 例子
tar czvf backup1.tar.gz /etc
tar cjvf backup2.tar.bz2 /etc
tar xvf backup4.tar -C /etc

👉zip - zip格式压缩文件

## 常用options
-d	更新压缩包内文件

# 例子
zip -r backup1.zip /etc

👉unzip - 解压zip包

unzip backup1.zip

gzip 压缩和解压文件(.gz文件)

gzip 只能针对普通文件(regular file)进行压缩和解压,对于文件夹、符号链接等是不支持的。

-a	使用ASCII文字模式
-d	解开压缩文件  
-f	强行压缩文件
-l	列出压缩文件的相关信息
-c	把压缩后的文件输出到标准输出设备,不去更动原始文件
-r	递归处理,将指定目录下的所有文件及子目录一并处理 # 对目录下的单个文件
-q	不显示警告信息

gzip hero.avi
gzip -d hero.avi.gz

bzip2 - 压缩和解压文件

由于 bzip2 与 gzip 相比,其压缩稳定性和效果都更好,对应单个文件bzip2 命令和 bunzip2 命令,就可以实现了

 bzip2 abc1.txt 
 bunzip2 A.txt.bz2
 
 tar -xjvf curl-7.47.1.tar.bz2 /dir
 tar -zvf curl-7.47.1.tar.bz2

dd - 转换和复制文件

dd OPTION

## 例子
dd if=anaconda-ks.cfg of=ana.cfg count=1 bs=50

👉chattr - 更改文件隐藏属性

chattr [-pRVf] [-+=aAcCdDeijPsStTuFx] [-v version] files...

## 常用options
-R	递归处理目录下的所有文件
-v	设置文件或目录版本
-V	显示指令执行过程
+	开启文件或目录的该项属性
--	关闭文件或目录的该项属性
=	指定文件或目录的该项属性

# 常用权限
i	无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a	仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)

## 例子
chattr +i run.sh

👉lsattr - 显示文件隐藏属性

## 常用options
-a 	列出目录中的所有文件,包括隐藏文件
-d 	只显示目录名称
-R	递归地处理指定目录下的所有文件及子目录

## 例子
lsattr run.sh

cksum - 检查文件

cksum ${file_name}

👉md5sum - 检查文件md5值

md5sum ${file_name}

cmp - 比较文件差异

cmp file...

file - 命令用于辨识文件类型

file ${file_name}

👉cut - 按列提取文件内容

cut [OPTIONS] FILE...

## 常用options
-c	以字符为单位进行分割
-b	以字节为单位进行分割
-d	自定义分隔符,默认为制表符”TAB”
-f	显示指定字段的内容
-n	取消分割多字节字符

## 例子
cut -d : -f 1 /etc/passwd

od - 八进制输出文件内容

hexdump - 显示文件十六进制格式

-n length	只格式化输入文件的前length个字节
-C	输出规范的十六进制和ASCII码
-b	单字节八进制显示
-c	单字节字符显示
-d	双字节十进制显示
-o	双字节八进制显示
-x	双字节十六进制显示
-s	从偏移量开始输出
-e	指定格式字符串,格式字符串包含在一对单引号中
-v	显示所有输入数据

hexdump testfile

strings - 查找可打印的字符串

在对象文件或二进制文件中

ls |strings

stat - 显示文件或文件系统的详细信息

-L	支持符号链接
-f	显示文件系统的信息
-t	以简洁的方式输出

stat hurl.go
  File: hurl.go
  Size: 938             Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 929074      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/  ubuntu)   Gid: (  500/  ubuntu)
Access: 2021-12-05 12:05:42.491584506 +0800
Modify: 2021-12-05 10:50:02.472892197 +0800
Change: 2021-12-05 12:05:41.559580684 +0800
 Birth: -

diff3 - 比较3个文件的不同之处

-A	全部显示,有冲突内容用括号括起来
-a	将所有文件视为文本
-T	使制表符对齐

diff3 file1 file2 file3

vimdiff - 同时对比编辑多个文件

vimdiff file1 file2 

paste - 按对应行合并两个文件

## 例子
paste  f1 f2

tmpwatch - 删除暂存文件

## 常用options

-a	删除任何类型的文件
-f	强制删除文件或目录,其效果类似rm指令的”-f”参数

## 例子
tmpwatch 24 /tmp/  #删除tmp目录24小时未使用的文件

comm - 命令用于比较两个已排过序的文件

## 常用options
-1 	不显示只在第1个文件里出现过的列
-2	不显示只在第2个文件里出现过的列
-3	不显示只在第1和第2个文件里出现过的列

👉tr - 字符转换

## 常用options
-c ——complerment:取代所有不属于第一字符集的字符;
-d ——delete:删除所有属于第一字符集的字符;
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t --truncate-set1:先删除第一字符集较第二字符集多出的字符。

## 例子
echo "HELLO WORLD" | tr 'A-Z' 'a-z'

👉wc - 统计文件的字节数、单词数、行数

## 常用options
-w	统计字数,或--words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
-c	统计字节数,或--bytes或--chars:只显示Bytes数
-l	统计行数,或--lines:只显示列数
-m	统计字符数
-L	打印最长行的长度

## 例子
wc -l stonebird.txt

zcat/zgrep - 过滤压缩包里面的内容

zcat ${tar_name}

tac - 反向打印文本

tac ${file_name}

👉dos2unix - 将文本文件转成unix格式

dos2unix ${file_name}

进程和监控

👉ps - 查看进程

ps [options]

## 常用options
a	显示现行终端机下的所有程序,包括其他用户的程序
e	列出程序时,显示每个程序所使用的环境变量
f	用ASCII字符显示树状结构,表达程序间的相互关系
g	显示现行终端机下的所有程序,包括所属组的程序
-G <群组识别码>	列出属于该群组的程序的状况
h	不显示标题列
-H	显示树状结构,表示程序间的相互关系
-l	采用详细的格式来显示程序状况
L	列出栏位的相关信息
u	以用户为主的格式来显示程序状况
-U <用户识别码>	列出属于该用户的程序的状况
U <用户名称>	列出属于该用户的程序的状况
v	采用虚拟内存的格式显示程序状况
x	显示所有程序,不以终端机来区分

## 例子
ps -ef
ps -auxl

👉top - 实时显示系统运行状态

top [options]

## 常用options
-d <>	改变显示的更新速度
-p pid(s)  查看指定pid
-o field 
-w [cols]

## 例子
top
top -p 1

iotop - 监视磁盘I/O状态

## 常用options
-o	只显示有io操作的进程
-n NUM	显示NUM次,主要用于非交互式模式
-d SEC	间隔SEC秒显示一次
-p PID	监控的进程pid
-u USER	监控的进程用户

iftop - 套接字及进程的网络利用率

## 常用options
-i	指定要监控的网卡

iostat - 监视系统输入输出设备和CPU的使用情况

## 常用options
-c	仅显示CPU使用情况
-d	仅显示设备利用率

👉kill - 杀死进程

## 常用options
-l 列出信号量

## 常用信号量 -9 -15

pkill - 按照进程名杀死进程

## 常用options
-o	仅向找到的最小(起始)进程号发送信号
-n	仅向找到的最大(结束)进程号发送信号
-P	指定父进程号发送信号
-g	指定进程组
-t	指定开启进程的终端

## 例子
pkill httpd
pkill -o
pkill -n

killall - 使用进程名称来杀死一组进程

## 常用options
-u	杀死指定用户的进程

## 例子
killall -9 nginx

vmstat - 显示虚拟内存状态

## 常用options
-a	显示活动内页
-f	显示启动后创建的进程总数
-m	显示slab信息
-n	头信息仅显示一次
-s	以表格方式显示事件计数器和内存状态
-d	报告磁盘状态
-p	显示指定的硬盘分区状态

## 例子
vmstat -p /dev/vdb1

👉dstat - 全能系统信息统计工具

## 常用options
-c	显示CPU系统占用,用户占用,空闲,等待,中断,软件中断等信息
-d	显示磁盘读写数据大小
-n	显示网络状态
-l	显示系统负载情况
-m	显示内存使用情况
-g	显示页面使用情况
-p	显示进程状态
-s	显示交换分区使用情况
-r	I/O请求情况
-y	系统状态

## 例子
dstat -n
dstat -d

👉netstat - 显示网络状态

## 	常用options
-a	显示所有连线中的Socket
-p	显示正在使用Socket的程序识别码和程序名称
-l	仅列出在监听的服务状态
-t	显示TCP传输协议的连线状况
-u	显示UDP传输协议的连线状况
-i	显示网络界面信息表单
-r	显示路由表信息
-n	直接使用IP地址,不通过域名服务器

## 例子
netstat -a

👉ss - 显示活动套接字信息

## 常用options
-n	不解析服务名称,已数字方式显示
-a	显示所有套接字
-l	显示处于监听状态的套接字
-o	显示计时器信息
-e	显示详细的套接字信息
-m	显示套接字的内存使用情况
-p	显示使用套接字的进程
-i	显示内部的TCP信息
-s	显示套接字使用概况
-4	仅显示ipv4的套接字
-6	仅显示ipv6的套接字
-0	显示PACKET套接字
-t	只显示TCP套接字
-u	只显示UDP套接字
-d	只显示DCCP套接字
-w	只显示RAW套接字
-x	只显示 Unix套接字
-D	将原始TCP套接字信息转储到文件

## 例子
ss -t

👉free - 显示系统内存使用量情况

## 常用options
-b	以Byte显示内存使用情况
-k	以kb为单位显示内存使用情况
-m	以mb为单位显示内存使用情况
-g	以gb为单位显示内存使用情况

## 例子
free -m

👉lsof - 查看文件的进程信息

## 常用options
-a	列出打开文件存在的进程
-c <进程名>	列出指定进程所打开的文件
-g	列出GID号进程详情
-d <文件号>	列出占用该文件号的进程
+d <目录>	列出目录下被打开的文件
+D <目录>	递归列出目录下被打开的文件
-n <目录>	列出使用NFS的文件
-i <条件>	列出符合条件的进程
-p <进程号>	列出指定进程号所打开的文件
-u	列出UID号进程详情

## 例子
lsof -a

👉nohup - 后端挂起运行程序

nohup command > linuxcool.com 2>&1 

文件系统和磁盘

1、XFS是一个具有非常高性能且可扩展的文件系统,同时在大多数要求的应用程序中都会进行常规部署。XFS提供了一种健壮的、优秀的以及功能丰富的文件系统,它具有的可伸缩性能够满足最苛刻的存储需求。 2、ext4:ext3的升级版本,ext4对ext3做了很多深层次的改进,设计更合理、性能更好、更可靠,同时还引入了一些新功能。 3、ext3:ext2的升级版本,其主要优点是在ext2的基础上加入了记录数据的日志功能。 4、ext2:支持标准Unix文件类型,可用于多种存储介质,向上兼容性好。

👉fsck/fsck.ext2/fsck.ext3/fsck.ext4/fsck.xfs - 检查与修复文件系统

## 常用options
-a	自动修复文件系统
-f	强制检查
-A	依照/etc/fstab文件来检查全部文件系统
-N	不执行指令,仅列出实际执行会进行的动作
-r	采用互动模式,在执行修复时询问问题
-R	略过指定的文件系统不予检查
-t	指定要检查的文件系统类型
-T	执行fsck指令时,不显示标题信息
-V	显示指令执行过程

👉mount - 把文件系统挂载到目录

## 常用options
-t	指定挂载类型
-a	加载文件“/etc/fstab”中描述的所有文件系统
-r  以只读的形式挂载
-rw 以读写的形式挂载

## 例子
mount /dev/vdb /mnt/stonebird

👉umount - 卸载文件系统

## 常用options
-a	加载文件“/etc/fstab”中描述的所有文件系统

## 例子
umount /dev/sdb

👉du - 查看文件或目录的大小

## 常用options
-a	显示目录中所有文件大小
-k	以KB为单位显示文件大小
-m	以MB为单位显示文件大小
-g	以GB为单位显示文件大小
-h	以易读方式显示文件大小
--max-depth=N 指定统计深度
-s	仅显示总计

## 例子
du -sh . |sort -n

👉df - 显示磁盘空间使用情况

## 常用options
-a	显示所有系统文件
-h	以容易阅读的方式显示
-H	以1000字节为换算单位来显示
-t <文件系统类型>	只显示指定类型的文件系统
-T	输出时显示文件系统类型
## 例子
df -h

parted - 磁盘分区工具

parted [options] [device [command [options...]...]]

## 常用options
-a  为新创建的分区设置对齐方式
-s  脚本模式
-v  显示版本号
-l  列出所有块设备上的分区布局
-m  显示机器可解析的输出

👉fdisk - 管理磁盘分区

## 常用options
-l	列出指定的外围设备的分区表状况

## 菜单操作说明
m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能

👉lsblk - 查看块设备

-a	显示所有设备
-t	显示拓扑结构信息

👉fio - 测试磁盘性能

fio --name=/dev/sdX --ioengine=libaio --direct=1 --fsync=1 --readwrite=randwrite --blocksize=4k --runtime=300

网络配置与文件传输

👉ping - 测试主机间网络连通性

## 常用options
-d	使用Socket的SO_DEBUG功能
-c	指定发送报文的次数
-i	指定收发信息的间隔时间
-I	使用指定的网络接口送出数据包
-l	设置在送出要求信息之前,先行发出的数据包
-n	只输出数值
-p	设置填满数据包的范本样式
-q	不显示指令执行过程
-R	记录路由过程
-s	设置数据包的大小

ping -c 4 -i 3 www.linuxcool.com
ping6 2408:877e:31::7

ping -6 # windows

ping6 - 测试主机间IPv6网络连通性

👉ip - 显示与配置网卡参数

ip addr

👉route - 显示与设置路由信息

## 常用options
-n	直接显示数字形式的ip地址
-e	netstat格式显示路由表
-net	到一个网络的路由表
-host	到一个主机的路由表
add	增加指定的路由记录
del	删除指定的路由记录
gw	设置默认网关
dev	路由记录所表示的网络接口

## 例子
route -n
route add -net 192.168.10.0 netmask 255.255.255.0 dev ens160

ifup - 激活网络接口

ifup eth0

ifdown - 关闭网络接口

ifdown eth0

👉ifconfig - 显示或设置网络设备参数信息

## 常用options
add<地址>	设置网络设备IPv6的IP地址
del<地址>	删除网络设备IPv6的IP地址
down	关闭指定的网络设备
up	启动指定的网络设备
IP地址	指定网络设备的IP地址

## 例子
ifconfig ens160 down
ifconfig ens160 up
ifconfig ens160 192.168.10.20 netmask 255.255.255.0

👉telnet - 控制远程设备

telnet ip [port]

👉nc- 网络端口检查

nc命令 全称netcat,用于TCP、UDP或unix域套接字(uds)的数据流操作,它可以打开TCP连接,发送UDP数据包,监听任意TCP 和UDP端口,同时也可用作做端口扫描,支持IPv4和IPv6,与Telnet的不同在于nc可以编写脚本。

nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

## 常用options
-4 只使用IPV4
-6 只使用IPV6
-c 使用tls连接或者监听
-D 启用socket调试开关
-g <网关> # 设置路由器跃程通信网关,最多可设置8个。
-G<指向器数目> # 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> # 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> # 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> # 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> # 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用

👉curl - 文件传输工具

## 常用options
-o	指定新的本地文件名
-O	保留远程文件的原始名
-u	通过服务端配置的用户名和密码授权访问
-I	HEAD请求
-i  额外打印请求头
-L  追踪http重定向
-u	指定登录账户密码信息
-s	静默模式,不输出任何信息
-T	上传文件

## 例子
curl -iL "https://www.hjxstbserver.xyz"

wget - 下载网络文件

## 常用options
-O	定义本地文件名

## 例子
curl -iL "https://www.hjxstbserver.xyz/download/test.sh"

host - 域名查询

host linuxcool.com #查询域名对应的ip

👉dig - 查询域名DNS信息

## 常用options
@	指定进行域名解析的域名服务器
-b	使用指定的本机ip地址向域名服务器发送域名查询请求
-f	指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息
-p	指定域名服务器所使用端口号
-t	指定要查询的DNS数据类型(默认为A)
-x	执行逆向域名查询
-4	使用ipv4(默认)
-6	使用ipv6

dig www.linuxcool.com

👉nslookup - 域名查询

## 常用options
-sil	不显示任何警告信息
exit	退出命令
server	指定解析域名的服务器地址
set type=soa	设置查询域名授权起始信息
set type=a	设置查询域名A记录
set type=mx	设置查询域名邮件交换记录

nslookup linuxcool.com

👉tcpdump - 抓包,监听网络流量

notebook单独记录

👉firewalld - 防火墙

notebook单独记录

👉iptables - 防火墙

notebook单独记录

👉sz - 从Linux上下载文件到本地

-a	以文本方式传输(ascii)
-b	以二进制方式传输(binary)
-e	对控制字符转义(escape),这可以保证文件传输正确
-i	后接命令,在接收端执行命令

# mobaxterm
sz  filename
ctrl + 鼠标右键
Receive file using Z-modem

👉rz - 上传文件到linux

rz
ctrl + 鼠标右键
Send file using Z-modem
选择上传文件

👉ftp - ftp协议文件传送

FTP>ascii: 设定以ASCII方式传送文件(缺省值)
FTP>bell: 每完成一次文件传送,报警提示.
FTP>binary: 设定以二进制方式传送文件.
FTP>bye: 终止主机FTP进程,并退出FTP管理方式.
FTP>case: 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母.
FTP>cd: 同UNIX的CD命令.
FTP>cdup: 返回上一级目录.
FTP>chmod: 改变远端主机的文件权限.
FTP>close: 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除.
FTP>delete: 删除远端主机中的文件.
FTP>dir [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件.
FTP>get [remote-file] [local-file] 从远端主机中传送至本地主机中.
FTP>help [command] 输出命令的解释.
FTP>lcd: 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录.
FTP>ls [remote-directory] [local-file] 同DIR.
FTP>macdef: 定义宏命令.
FTP>mdelete [remote-files] 删除一批文件.
FTP>mget [remote-files] 从远端主机接收一批文件至本地主机.
FTP>mkdir directory-name 在远端主机中建立目录.
FTP>mput local-files 将本地主机中一批文件传送至远端主机.
FTP>open host [port] 重新建立一个新的连接.
FTP>prompt: 交互提示模式.
FTP>put local-file [remote-file] 将本地一个文件传送至远端主机中.
FTP>pwd: 列出当前远端主机目录.
FTP>quit: 同BYE.
FTP>recv remote-file [local-file] 同GET.
FTP>rename [from] [to] 改变远端主机中的文件名.
FTP>rmdir directory-name 删除远端主机中的目录.
FTP>send local-file [remote-file] 同PUT.
FTP>status: 显示当前FTP的状态.
FTP>system: 显示远端主机系统类型.
FTP>user user-name [password] [account] 重新以别的用户名登录远端主机.
FTP>? [command]: 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。
FTP>! 从 ftp 子系统退出到外壳。

shell 其他常用

👉chsh - 改变系统shell

/etc/shells 文件记录当前用户安装了那些shell,可以使用 chsh -lcat /etc/shells查看当前环境可以使用的shell

chsh -s /bin/bash

👉echo - 打印到终端

## 常用options
-e 支持转义
-e "\n"	换行,光标移至行首
-e "\r"	光标移至行首,但不换行

👉readonly - 只读变量

readonly name

👉expr - 算术表达式

## 例子
match	中匹配 REGEXP 字符串并返回匹配字符串的长度
substr	从 POS 位置获取长度为 LENGTH 的字符串
index	杳找子字符串的起始位置
length	计算字符串的长度

expr match "123 456 789" ".*5"  # 6 匹配字符串的长度,若找不到则返回 0
expr substr " this is a test" 3 5 # his i 
expr index "test for the game" "e" # 2 
expr length "this is a test" # 14
expr 10 + 10
expr 10 - 10
expr 20 / 10
expr 10 \* 10 # * 需要转义
expr \( 10 + 10 \) \* 2 + 100

👉let - 算术表达式

## 例子
a=1
let a++ # a=`expr $a + 1`

👉read - 读取输入

读取从键盘或文件输入的数据,常用参数

-a array 将读取的单词分配给数组的顺序索引变量 ARRAY,从零开始
-d delim 继续直到读到 DELIM 的第一个字符,而不是比换行符
-e 使用 Readline 获取交互式 shell 中的行
-p prompt 输出之前没有尾随换行符的字符串 PROMPT 尝试阅读
-r 不允许反斜杠转义任何字符
-s 不回显来自终端的输入
-t timeout 超时并返回失败
-u 从文件描述符 FD 读取而不是标准输入

读取用户输入

#!/bin/bash
echo -n "please input your name:"
read name
echo "welcome !!! $name"
exit 0

读取密码 -s 不回显

#!/bin/bash
read -s -p "please input your code:" password
echo "hehe, your password is $password"

读取文件 -u

#! /bin/bash
exec 3< test.txt

while read -u 3 var
do
    echo "$var"
done
echo "finished"
 
exec 3<&-
# 通过“exec 3<test.txt”生成了编号为 3 的文件描述符,接着通过“read-u 3 var”来读取文件内容。最后通过“exec 3<&-”关闭了 3 号文件描述符。

读取文件管道

#!/bin/bash
count=1
cat test.txt | while read line
do
echo "Line $count:$line"
let count=$count+1
done
echo "finished"
echo "Line no is $count"
exit 0

读取文件重定向 个人比较常用

#!/bin/bash
count=0
while read line
do
let count=$count+1
echo "Line $count:$line"
done < test.txt
echo "finished"
echo "Line no is $count"
exit 0

test - 检查条件是否成立

#test命令检测条件是否成立
if test $a = $b ;then
	Command
fi
$[a+b]=expr $a + $b

👉set - 设置shell

## 常用options
 -a:标示已修改的变量,以供输出至环境变量。 
 -d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 
 -e:若指令传回值不等于0,则立即退出shell。 
 -u:当执行时使用到未定义过的变量,则显示错误信息。 
 -x:执行指令后,会先显示该指令及所下的参数。
 -p:启动优先顺序模式。

## 例子
set -en

👉unset - 删除指定的shell变量或函数

-f	仅删除函数
-v	仅删除变量

unset -v hjx

👉printf - 格式化打印

printf "%-5s %-10s %-4s\n" NO Name Mark
printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345
printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323

👉xargs - 参数传递过滤器

配合着管道使用

常用参数

-n	多行输出
-d	自定义一个定界符
-I	指定一个替换字符串{}
-t	打印出 xargs 执行的命令
-p	执行每一个命令时弹出确认

cat test.txt | xargs -n3
cat arg.txt | xargs -I {} ./sk.sh -p {} -l

👉bc - 浮点数计算

echo "1.212*3" | bc 

👉seq - 打印数字序列

-f	格式
-s	字符串
-w	在列前添加0 使得宽度相同

## 例子
seq 1 5