目录

title: Linux命令查看手册
date: 2021-02-23
categories: [Linux]
tags: [Linux]
draft: true

导论

bash快捷键

ctrl+a #光标到行首
ctrl+e #光标到行尾
ctrl+u #剪切整行
ctrl+k #剪切光标位置到行尾
ctrl+w #删除光标前一个单词
ctrl+y #粘贴
ctrl+d #退出当前shell
ctrl+z #暂停任务 bg fg可以恢复
ctrl+c #终止前台进程
ctrl+r #搜索历史命令

开关机

#-h:halt的意思
#shutdown会进行一些清理工作 然后调用init 0
shutdown -h now #立刻关机
shutdown -h 1 #1分钟之后 shutdown不加参数默认就是这个
shutdown -h 11:00 #11点关机
shutdown -r  now #立刻重启
sync #将内存数据同步到磁盘 关机前都要执行这个命令
last #查看关机和启动的日志

其它

ctrl+x+e #如果需要在命令行输入多行命令可以通过此快捷键召唤vim输入命令 然后保存就出现在命令行上了

文件和目录

mkdir

-p  #递归创建 如果存在则忽略不会报错

tree

-a #显示所有文件
-d #只显示目录
-i #不显示树枝

ls

-l #长格式输出
-t #按最后修改时间降序(默认按照文件名)
-r #反序 ps: -tr按照时间升序号
-h #以人类可读的方式显示大小等信息
-a #列出所有文件
-S #根据文件大小降序
--time-style long-iso #指定时间格式 long-iso最完美

#--------不常用----------
--time atime#默认输出的是修改的时间,指定输出哪种时间 atime ctime
-u #按最后访问时间atime降序
-c #按最后状态修改时间ctime降序
-p #目录后面加上'/'
-F #在每个文件下加上文件类型指示符号 @/|=*....
-i #显示inode号
-d #只显示当前目录本身信息

https://raw.githubusercontent.com/biningo/cdn/master/2021-04/linux_file.png

stat

通过stat可以查看文件的详细信息

stat a.txt

cp

cp -r abc ../home #递归copy abc->../home拷贝目录
cp -i  #如果有覆盖则提示是否需要覆盖
cp -d #如果copy的是符号连接则copy的是原文件 -d表示仅仅copy符号链接
cp -a #拷贝所有 -r -d 结合 包括创建时间等

mv

mv -i #覆盖提示
mv -f #强制覆盖

rm

删除应对策略:

  • 禁止使用rm -rf
  • rm指令用mv代替,将文件移动到其它路径
rm -f #强制删除
rm -i #删除确认
rm -r #递归删除

rmdir

删除空目录

rmdir -p A/AA/AAA  #递归删除 如果父子目录都为空

*ln

建立软硬链接

ln target newfile #建立硬连接 目录不可以建立硬连接
ln -s target newfile #建立软连接 目录可以建立软连接

*find

-atime: 访问时间

-mtime: 修改时间

+1: 1天前 -1: 1天内

find . -atime -2 #查找两天内被访问过的文件
find . -mtime -5 #查找两天内被修改过的文件

-type按类型查找

find . -type f #f|d|s|p 普通文件|目录|socket|管道

反向查找!

find . ! -type d #查找不是目录的文件 

-perm按照目录权限来查找

find . -perm 700

-size按照大小来查找cwbkMG

find . -size +100M #查找大于100M的文件
find . -size -10b #查找小于10字节的文件

-path -prune 忽略搜索路径

#-prune 和-path结合使用表示忽略搜索路径  -path为真时执行-prune忽略,为假时执行-pint 这句话其实是 -path "xxx" -a -prune -o -print的缩写
find $PWD -path "$PWD/pkg" -prune -o -print

-user查找指定用户的文件

find .  -user abc

-newer查找比指定文件新的文件

ind . -newer act ! -newer caddy #查找比act新 比caddy旧的文件

-maxdepth指定查找的目录深度

find . -maxdepth 1 #查找当前路径下所有一级深度的文件

-name按照文件名进行查找

find . -name "*.jpg" #查找以jpg结尾的文件
find . -name "?.jpg" #查找a.jpg这样的文件
find . -name "[abcdef].jpg" #查找a.jpg b.jpg c.jpg d.jpg e.jpg f.jpg

-exec执行: 如果文件很多则效率很低,exec和xargs的区别就是exec是逐一执行的xargs是一起执行的

find . -type f -exec ls -l {} \; #最后\是转义;号的 -exec必须以;结尾 {}是占位符
#和下面的命令效果一样
find . -name "go*"  | xargs ls -l

find结合xargs

find . -type f | xargs -i mv {} dir/ #-i表示将查询出来的插入到{}中
find . -type f | xargs -p rm #-p表示有提示
find . -type f | xargs  tar -zcvf file.tar.gz #将当前路径下的文件都打包
find . -type f | xargs sed -i "s/hello/hi/g" #将所有文件中的hello替换为hi

多条件

find src1 src2 -name README.md #也可以指定多个目录

通过find移动文件的3种方法

find . -name "a" | xargs -i  mv {} dir/
find . -name "a" | xargs -i  mv -t dir/ #mv -t表示反转
mv `find . -name "c"` ./B #反引号表示解析命令结果

*xargs

cat a | xargs #表示合并为一行 这里没有接命令 所以会输出到屏幕上
cat a | xargs -n 2 #只显示两列 每行最多输出2个

find -name "*.js" | xargs wc -l # 等价于 wc -l a.js b.js c.js ...
cat download.txt | xargs wget #批量下载
find . -name "*.js" | xargs -i mv {} dir1/ #{}代表占位符 -I [] 指定占位符
find . -name "*.js" | xargs -ip mv {} dir1/ #-p表示询问

basename、dirname

basename /a/b/c #显示文件名或者目录名  c
dirname /a/b/c #显示目录路径 /a/b

lsattr、chattr

[TODO]列出和改变文件的扩展熟悉

展示和改变文件的扩展属性

file

file A #显示文件的类型
file -b A #不输出文件名 只显示精简信息
file *

md5sum

生成文件的md5值,可以用于校验备份文件是否损坏

md5sum file #计算文件的md5值
md5sum file > md5sumVal
md5sum -c md5sumVal #检查md5值和现在文件的md5值是否一样 也就是文件是否改变

*chown

更改文件所属的用户或则用户组

chown 用户 a.txt
chown :组 a.txt
chown 用户:组 a.txt
chown -R #递归更改

*chmod

更改文件的读写权限

chmod u+x
chmod a+x #a=u+g+oaa
chmod a-x
chmod 653 #用数字代替
chmod u=rwx,g=xw
chmod -R #递归

umask

定义了文件创建时的默认权限的掩码

666 #默认初始权限
022 - #掩码
-----
644

umask #默认是数值方式输出
umask -S #以字符方式输出掩码
umask 003 #修改掩码

文件权限和数字的一个对应可以查看这个网址 https://linxz.github.io/tianyizone/linux-chmod-permissions.html

Linux信息显示和搜索文件

*uname

显示系统相关的参数信息

uname -a #显示所有
uname -n #主机名称
uname -v #内核版本

*hostname

hostname #显示主机名称
hostname -I #显示主机所有IP

*du

统计磁盘使用情况

du -h #统计当前路径下的文件磁盘使用情况 -h表示文件大小以人类可读的方式展示
du -a #显示所有文件
du -h test #指定目录
du -s #当前目录总大小

*date

显示系统时间

date +%Y #2021
date +%Y-%m-%d-%H:%M:%S #完整显示
date +%Z #显示时区
date +%R # %H:%M
date +%F # %Y-%m-%d
date '+%F %R' #%Y-%m-%d %H:%M:%S
date +%N # 显示纳秒

cal

cal #显示当前月份的日历
cal 2020 #显示2020年的日历
cal 5 2020 #显示5月日历 可以查看星期几

*watch

监视命令的执行

watch -n 1 -d netstat -ant #监视网络 -n表示变化间隔1s -d表示高亮变化了的部分
watch -n 1 -d cat a.txt #监视文件的变化

which和whereis

查找可执行命令或则文件的路径,在PATH路径下查找

which bash
which git

查看路径以及man路径

whereis bash

locate和updatedb

TODO

压缩与备份

**tar

打包和压缩工具,可以仅仅打包,也可以压缩并打包

#z:gzip压缩 v:详细信息 f:指定压缩名字

# c:创建一个新的tar包
tar -czvf  a.tar.gz ./* #压缩当前文件夹下的所有文件 并且压缩包的名字为a.tar.gz
du -h c-learn.tar.gz #压缩之后可以使用du命令对比大小

# t:不解压查看压缩包内容
tar -tzvf a.tar.gz

# x:解压
tar -xzvf a.tar.gz #默认解压到当前目录下
tar -xzvf a.tar.gc -C /tmp/ #指定解压路径

unzip

解压zip文件

unzip -O cp936 'Redis 5设计与源码分析.zip' # -0是为了防止乱码

scp

ssh方式传输文件

scp ./a.pdf root@aliyun:/root/ #上传文件到远程服务器
scp root@aliyun:/root/lyer-home/images ./images #从远程服务器中下载文件到本地

**rsync

文件同步工具,如果目标文件不存在则会自动创建

同步本地文件

#也可用于本地两个文件同步 source文件夹带斜杠就是同步文件夹下面的文件
# a:递归  v:详细
# 没带斜线则会将目录本身复制到目录下

#将data1目录下的文件全部同步到data2目录下
rsync -av data1/ data2/
#将data1复制到data2目录下
rsync -av data1 data2/
#以data1目录为准  两个目录完全一致 会将data2目录下的不一致的删除
rsync -av data1/ --delete  data2/ #--delete让两个目录完全一致 不同的会被删除

同步远程文件

rsync -av 192.168.0.23:/data1/ data2/  #拉取
rsync -av data1/ 192.168.0.23:/data2/  #推送

用户管理及用户信息查询

几个重要的文件

/etc/passwd #用户信息文件
/etc/shadow #用户密码文件
/etc/gshadow #组密码文件
/etc/group #用户组文件
/etc/login.defs #用户定义文件
/etc/default/useradd #创建用户的默认配置文件
/etc/skel #会将此目录下的文件复制到用户的家目录下
/etc/sudoers #sudo文件

/etc/passwd

testuser:x:1001:1001:TmpUser:/home/testuser:/bin/sh
用户名密码标识(都为x)用户ID用户组ID用户说明用户家目录shell解释器
testuserx10011001TmpUser/home/testuser/bin/sh

/etc/group

组名口令组标识号组内用户列表
dockerx134u1u2u3

useradd

useradd如果不指定用户组的话默认会创建一个和用户名相同的用户组

useradd -m testuser #-m家目录如果不存在则自动创建
useradd -s bash testuser #-s指定用户使用的sh类型
useradd -g testgroup -u 100 testuser #-g指定用户组 -u指定UID
useradd -e "2020-06-07" testuser #-e指定用户的过期时间
useradd -c TempUser testuser #-c指定用户的简短注释

userdel

userdel -r testuser #删除目录的同时删除其关联的文件
userdel -f testuser #强制删除 即使用户已经登入

*usermod

修改用户,和useradd参数一样

groupadd和groupdel

groupadd testgroup
groupadd -g 1002 testgroup
groupdel testgroup #删除用户组

*passwd

passwd #修改当前用户的密码
passwd testuser #修改指定用户的密码
echo "123456" | passwd --stdin testuser #一条设置密码

#5天内不能更改密码
#30天之后必须修改密码
passwd -n 5 -x 30 testuser

#账户过期前7天告诉用户
#过期后60天禁止用户登入
passwd -w 7 -i 60 testuser

chage

修改用户密码有效期

chpasswd

批量更新用户密码

*su和sudo

su切换用户 sudo根据/etc/sudoers文件借权代替执行

su root #切换到root用户
sudo ls /etc

*id

id #显示当前用户和用户组信息
id testuser #指定用户名

*w、who、users、whoami、last、lastb

#显示已经登入的用户
w
who
users
whoami #显示当前用户名
last #显示历史登入列表
lastb #显示登入失败记录
lastlog

?磁盘与文件系统管理

?进程管理

进程信息都保存在/proc下,进程信息展示都是通过读取目录下的信息进行展示的

*ps

ps -e #显示所有进程
ps -l #详细显示进程状况
ps -f #显示UID PPID C 等详细栏位
ps f #显示进程树结构

展示当前系统的所有进程

ps -ef #另外一种风格的进程信息
ps -aux #显示BSD风格的进程信息

查找指定进程

ps -ef | grep ssh 

*top

实时查看系统资源情况

top #默认按照CPU占用率排序
top -c #显示命令路径
top -d 1 #修改刷新间隔1s top进入之后按s再进行修改也可
top -n 5 #更新5次之后退出
top -H #显示线程  默认只显示进程
top -p 12355 #指定某个pid的进程
按键1 查看单独CPU的信息
按键s 修改更新时间

*pstree

显示某个进程的进程树

pstree 15835
-a #显示进程完整信息
-p #显示pid

pgrep

ps -ef和grep效果一样

pgrep docker #只显示pid
pgrep docker -a #等同于 ps -ef | grep docker

*kill

kill -l #列出所有信号
kill -15 12322 #发送指定信号到进程
kill -9 1111 #强制终止

killall

通过进程名字终止进程,如果有多个子进程则需要执行多次

killall mysql

*pkill

通过进程名终止进程包括子进程,只需要执行一次

pkill mysql

nice和renice

忽略

*nohup

no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行

nohup a.sh > /dev/null  2>&1 &

jobs fg bg & nohub

& jobs fg bg nohub

./exe & #后台运行 但是日志还会打印在标准输出
./exe > log.txt 2>&1 & #0:标准输入 1:标准输出 2:标准错误 2>&1是将标准出错重定向到标准输出 最终结果就是`标准输出`和`错误`都被重定向到`log.txt`中
etcd > /dev/null  2>&1 & #后台运行 同时输出日志重定向到垃圾桶
nohup etcd > /dev/null 2>&1 & #以守护进程方式运行 不会随着终端退出而退出
jobs #查看后台运行中的进程

#ctrl+z暂停任务 ctrl+c终止任务
fg $1 #将后台任务放到前台执行
bg $1 #将一个暂停的任务放在后台执行

**strace

跟踪进程TODO

**ltrace

跟踪进程使用了哪些系统调用TODO

**runlevel

输出当前系统的运行级别

runlevel

**init

TODO

**systemctl

管理系统服务(守护进程),systemctl命令是service命令和chkconfig命令的集合和代替

#系统服务都在此路径下:/usr/lib/systemd
systemctl start docker
systemctl stop docker 
systemctl restart docker
systemctl status docker
#开启/关闭服务开机启动
systemctl enable docker
systemctl disable docker
systemctl is-enabled docker

systemctl list-unit-files #列出所有守护进程的信息

?网络管理

*ifconfig

ifconfig #查看所有网卡信息
ifconfig wlp0s20f3 #查看指定网卡信息
ifconfig wlp0s20f3 up/down #开启/关闭网卡
ifconfig wlp0s20f3 192.168.0.24/24 #为网卡分配IP 同时也指定了子网掩码
ifconfig wlp0s20f3 192.168.0.24/24 up

ifup和ifdown

激活/关闭网卡,和ifconfig up/down 命令作用一样

ifup eth0
ifdown eth0

*route

显示本机的静态路由表

route -n

arp

显示本机ARP缓存

arp -n #显示IP

*ip

TODO

**netstat

-a #显示所有socket
-i #显示网卡
-n #直接显示IP 不显示域名
-u #只查看UDP
-t #只查看TCP
-s #查看统计信息
-4 #只显示ipv4的套接字
-6 #只显示ipv6的套接字
-l #只查看监听中的socket
-p #显示那个PID在监听

netstat -an #显示所有连接信息
netstat -ant
netstat -anu
netstat -antp

netstat -i #显示本机的网络接口
netstat -r #显示路由表

**ss

ssSocket Statistics的缩写,用来查看本机网络连接状况,和netstat一样,但是查询速度更快,用法和netstat一样

ss -an #所有
ss -ntlp #TCP
ss -antp #TCP
ss -nulp #UDP
ss -ntulp #TCP UDP正则监听的
ss -s #查看网络统计信息

*ping

-c 2 #发送次数2
-i 1 #发送间隔1s

#发送3个包 每隔2s发送 包大小为1024字节
ping -c 3 -i 2 -s 1024 google.com 

traceroute

telnet

arping

nc

wget

下载文件工具,支持FTP、HTTP

-q #静默模式 关闭下载日志输出
-b #后台下载
-O #指定下载文件名
wget https://mirrors.tuna.tsinghua.gz
wget -O a.tar https://mirrors.tuna.tsinghua.gz

utw

utw (centos下为firewall,ubuntu下为utw) ubuntu下防火墙iptables工具

默认的配置文件/etc/default/ufw

#注意 没有出现在iptables中的一律不允许访问
ufw enable/disable
ufw status

#日志文件储存在 /var/logs/ufw
ufw logging on/off #启用关闭日志
ufw logging low|medium|high #设置日志级别

ufw allow 1000 #开放1000短端口
ufw deny 1000 #关闭1000端口 有数据包直接丢弃 无响应
ufw reject 1000 #关闭1000端口 有数据包接受则返回一个拒接包
ufw delete  reject 1000 #删除规则

ufw allow ssh #允许指定端口号或则对应的服务名 这里和22一样
ufw allow 80/tcp #还可以指定TCP或则UDP 只允许80端口上的TCP包
ufw allow http/tcp

ufw allow from 192.168.1.1 #允许指定IP连接到任何端口
ufw allow from 192.168.1.0/24 #允许特定子网连接到任何端口
ufw allow from 192.168.1.1 to any port 8080 #允许指定IP连接到8080端口 tcp/udp都可
ufw allow from 192.168.1.1 to any port 8080 proto udp #指定协议UDP

ufw status numbered #列出每个规则的序号 可以按照序号进行删除
ufw delete 1

dig

dig 域名查询工具

dig @8.8.8.8 baidu.com #指定向8.8.8.8DNS服务器查询
dig @8.8.8.8 -p 53 baidu.com #还可以指定查询服务器的端口 默认是53
dig +trace baidu.com #显示整个DNS查询过程
dig +trace +additional baidu.com #显示更详细的信息
dig +short baidu.com #简化查询结果 只显示查询得到的IP
dig +x 111.111.111.111 #反向解析
dig ns baidu.com #查看这个域名的ns记录
dig a baidu.com #查看A记录
dig cname baidu.com

?Linux系统管理命令

开关机

#-h:halt的意思
#shutdown会进行一些清理工作 然后调用init 0
shutdown -h now #立刻关机
shutdown -h 1 #1分钟之后 shutdown不加参数默认就是这个
shutdown -h 11:00 #11点关机
shutdown -r  now #立刻重启
#重启
reboot #init 6

sync #将内存数据同步到磁盘 关机前都要执行这个命令
last #查看关机和启动的日志

?系统内置命令

参考

https://github.com/xjh22222228/linux-manual#cp

看完这篇Linux基本的操作就会了

《跟老男孩学Linux运维:核心命令系统实战》

《鸟哥的Linux私房菜》

《Linux命令行与Shell脚本编程大全》

应该知道的LINUX技巧

28个UNIX/LINUX的命令行神器