linux常用命令
谷歌国内开发平台地址:
https://developer.android.google.cn/?hl=zh-cn
免费SSL证书签发:
https://letsencrypt.org/
系统可用性计算方法:
可用性 = 系统正常运行时间/(系统正常运行时间+停机时间)
#比如:如果系统可用性目标为99.99%,那么一年中的停机时间大约为52分钟,计算方法是360/360+x=99.99%,计算出x即可
公共DNS地址:
8.8.8.8 #谷歌公司
8.8.4.4 #谷歌公司
1.1.1.1 #Cloudflare公司
1.0.0.1 #Cloudflare公司
4.2.2.1 #美国Level 3 Parent公司
4.2.2.2 #美国Level 3 Parent公司
4.2.2.3 #美国Level 3 Parent公司
4.2.2.4 #美国Level 3 Parent公司
4.2.2.5 #美国Level 3 Parent公司
4.2.2.6 #美国Level 3 Parent公司
94.140.14.14 #AdGuard提供
94.140.15.15 #AdGuard提供
94.140.14.15 #AdGuard提供
94.140.15.16 #AdGuard提供
9.9.9.9 #IBM
149.112.112.112 #IBM
101.101.101.101 #台湾网络资讯中心
101.102.103.104 #台湾网络资讯中心
180.76.76.76 #百度
223.5.5.5 #阿里
223.6.6.6 #阿里
119.29.29.29 #腾讯
centos镜像下载地址:
https://vault.centos.org/
https://mirrors.ustc.edu.cn/help/centos.html #中国科学技术大学
Linux应用商店:https://flathub.org/
开源音视频转换工具:
- ffmpeg #在命令行工作的
ffmpeg -i input.mp4 -c:v libx264 -s 1920x1080 -r 25 -b:v 1024k -c:a aac -b:a 128k output.mp4
-i input.mp4:指定输入文件。
-c:v libx264:指定视频编码器为 H.264。
-s 1920x1080:设置视频分辨率。
-r 25:设置帧率为 25 帧/秒。
-b:v 1024k:设置视频码率为 1024Kbps。
-c:a aac:指定音频编码器为 AAC。
-b:a 128k:设置音频码率为 128Kbps。
output.mp4:指定输出文件名。
SSH工具:
- Xshell
- Tabby
- WindowTerm
- Remmina #在Linux系统上运行的可链接linux和win的工具https://remmina.org/
软件包下载地址:
https://pkgs.org/ #全平台
https://ubuntu.pkgs.org/24.04/ubuntu-universe-amd64/ #ubuntu
https://centos.pkgs.org/7/centos-x86_64/ #centos7
https://vault.centos.org/6.8/isos/x86_64/ #centos6
http://ftp.osuosl.org/pub/centos/
http://mirrors.163.com/centos/7/os/x86_64/Packages/
https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/os/x86_64/Packages/
openjdk下载地址:
https://jdk.java.net/archive/
Lustre分布式存储系统
rpm命令:
rpm -ivh filename.rpm #安装rpm包
rpm -ivh --nodeeps package.rpm #安装rpm包而忽略依赖关系警告
rpm -e package.rpm #删除rpm包
rpm -Uvh package.rpm #更新rpm包不改变配置
rpm -qa package.rpm #查看所有已安装的rpm软件包
rpm -qi package.rpm #查看rpm包的详细信息
rpm -qc package.rpm #查看已安装的rpm包提供的配置文件列表
rpm -ql package.rpm #查看已安装的rpm包提供的文件列表
yum命令:
- yum repolist all //列出所有仓库
- yum list all //列出仓库中所有软件包
- yum info 软件包名称 //查看软件包信息
- yum install 软件包名称 //安装软件包
- yum localinstall package.rpm //安装一个rpm包,使用自己的仓库解决依赖关系
- yum reinstall 软件包名称 //重新安装软件包
- yum update 软件包名称 //升级软件包
- yum remove 软件包 //移除软件包 ,保留配置文件和数据文件
- yum erase 软件包 //删除软件和它所有的文件
- yum clean all //清除所有仓库缓存
- yum clean packages //清理rpm缓存删除下载的包
- yum check-update //检查可更新的软件包
- yum grouplist //查看系统中已经安装的软件包组
- yum groupinstall 软件包组 //安装指定的软件包组 ,例如安装桌面
- yum groupremove 软件包组 //移除指定的软件包组
- yum groupinfo 软件包组 //查询指定的软件包组信息
- yum search 软件包 //查找软件包名称
- yum deplist 软件包 //显示软件包对应的依赖包
systemctl命令:
- systemctl start foo.service //启动服务
- systemctl restart foo.service //重启服务
- systemctl stop foo.service //停止服务
- systemctl reload foo.service //重新加载配置文件(不终止服务)
- systemctl status foo.service //查看服务状态
- systemctl enable foo.service //开机自动启动
- systemctl disable foo.service //开机不自动启动
- systemctl is-enabled foo.service // 查看特定服务是否为 开机自动启动
- systemctl list-unit-files –type=service // 查看各个级别下服务 的启动与禁用情况
- systemctl set-default multi-user.target //将图形界面模式切换为命令行模式
- systemctl set-default graphical.target //将命令行模式切换为图形界面模式
- systemctl enable foo.service –now //设置开启自启动并启动,等价于enable+start
- systemctl daemon-reload //重新加载所有修改过的配置文件
- systemctl list-unit-files | grep enabled //查看已启动的服务列表
基本命令:
echo Linux #echo 命令用于在终端输出字符串或变量提取后的值
date #date 命令用于显示及设置系统的时间或日期
date "+%Y-%m-%d %H:%M:%S" #按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间
date "+%Y-%m-%d %H:%M:%S" #按照“年-月-日 小时:分钟:秒”的格式查看当前系统时间
date -s "20170901 8:30:00" #将系统的当前时间设置为 2017 年 9 月 1 日 8 点 30 分
reboot #reboot 命令用于重启系统,其格式为 reboot
poweroff #poweroff 命令用于关闭系统,其格式为 powerof f
wget #wget 命令用于在终端中下载网络文件 ps -aux //查看系统中的进程状态
top #top 命令用于动态地监视进程活动与系统负载等信息
top i #不显示没有使用CPU的进程
top d 2 n 5 #每2秒输出一次,输出5次
pidof #pidof 命令用于查询某个指定服务进程的 PID 值,例如:pidof sshd
kill #kill 命令用于终止某个指定 PID 的服务进程 kill -9 pid
killall #用于终止某个指定名称的服务所对应的全部进程
ifconfig #用于获取网卡配置与网络状态等信息
uname #用于查看系统内核与系统版本等信息 uname -a/r
cat /etc/redhat-release #查看当前linux版本信息
cat #用于查看纯文本文件 cat -n 文件名 可以查看文件编号
cat anaconda-ks.cfg | tr [a-z] [A-Z] #把某个文本内容中的英文全部 替换为大写
cat > output.txt <<EOF abcdefg EOF #向文件中写入多行内容,以<<EOF开始,遇到EOF结束
uptime #用于查看系统 1 分钟、5 分钟、15 分钟 的负载信息
free #显示当前系统中内存的使用量信息 free -m/h
who #查看当前登入主机的用户终端信息
last #查看所有系统的登录记录
history #用于显示历史执行过的命令 !+编号可以重新执行
sosreport #用于收集系统配置及架构信息并输出诊断文档
pwd #用于显示用户当前所处的工作目录
cd #用于切换工作路径 例如:cd - 返回上层目录
cd ~user #进入个人主目录
ls #用于显示目录中的文件信息 ls -a查看隐藏文件 ll -d /etc 查看目录权限
ls -lSr |more #以尺寸大小排列文件和目录
tac file #从下往上反向查看文件
more #用于查看纯文本文件 ,内容较多的,不支持上翻
less #用于查看纯文本文件 ,内容较多的,支持上翻
head #用于查看纯文本文档的前 N 行 head -n 10 file 查看前10行
tail #用于查看纯文本文档的后 N 行或持续刷新内容 tail -n 10 file
tail -f 文件名#实时查看最新日志文件
tr #用于替换文本文件中的字符
wc #用于统计指定文本的行数、字数、字节数 常用wc -l 文件(统计行数)
stat file #查看文件时间(访问时间如:vim打开但是不修改,修改时间,状态改变时间,如:chmod命令)
cut #用于按“列”提取文本字符
diff #用于比较多个文本文件的差异
touch #用于创建空白文件或设置文件的时间 -m(修改时间)/-a(读取时间)/-d(同时改变读取时间和修改时间)
mkdir #用于创建空白的目录 mkdir -p a/b/c/d/e 创建多层目录
cp #用于复制文件或目录 cp -a 文件名
mv #用于剪切文件或将文件重命名
rm #用于删除文件或目录 rm -i/rf 文件名,rm -rf 文件
dd #用于按照指定大小和个数的数据块来复制文件或转换文件
file #用于查看文件的类型 file 文件名
tar -zcvf + 压缩后的名字 要压缩的文件或者目录,默认情况下tar压缩是采用相对路径的,如果绝对路径,此时需要使用P参数,命令为tar -zcvPf 进行打包
tar -zxvf + 压缩包
tar -zxvf 压缩包 -C 目录 #解压到指定目录
tar -xf 包名 --force-local #包名中包含冒号时候解压会报错,加上--force-local即可解决
tar -zcvf a.tgz -C /data/abcd . #打包abcd路径下内容,但是不包括abcd路径,注意后面有个点(.)
tar -zcvf a.tgz --directory=/data/abcd . #跟上面-C 功能一样,写法不同而已,注意后面有个点(.)
grep #用于在文本中执行关键词搜索,并显示匹配的结果,常用参数-n表示显示行号, -v 表示反向选择
find / -type f -mtime +10 -size +20M #表示查找修改时间10天以前大于20M的文件
find / -type f -mtime -10 -size -20M #表示查找修改时间10天以内小于20M的文件 -atime表示访问时间,用法一样,再次不列举
find / -type f -name "*.txt" -mmin +30 #查找根目录下30分钟之前的txt文件
find / -type f -name file1 -or -name file2 -or -name file3 -or -name file4 #查询多个文件
find /root -name install.sh -exec cp -a {} /data/ \; #查找文件名字为install.sh 并将其复制到/data目录下 -exec的用法
find ./* -type f -name "*.png" -print | tar -zcvf png.tgz -T - #查找当前目录下png文件,并压缩,-T后面如何跟"-"表示从标准输入读取文件列表,此命令就是find后通过管道传递过来,-T后还可以跟文件名,文件中包含了要打包的文件列表,比如-T abc.txt,这个abc.txt中的内容是a.go b.go c.go这类文件,表示将这三个文件打包
find / -user gong 搜索属于用户 'gong' 的文件和目录
find /usr/bin -type f -atime +10 搜索过去100天内未被使用过的执行文件,atime表示访问时间
find / -name \*.abc -exec chmod 755 '{}' \; 搜索以 '.abc' 结尾的文件并定义其权限
find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
alias #设置别名 用法:alias 别名='命令 ' 取消:unalias 别名
env #查看所有环境变量
mount #挂载文件系统 参数: -t 指定文件系统类型,可写入/etc/fstab
mount -o loop file.iso /mnt/cdrom #挂载一个文件或ISO镜像文件
mount -t cifs -o username=user,password=pass //192.168.1.1/share /mnt/share #挂载一个windows网络共享到Linux的/mnt/share目录
umount #用于卸载已经挂载的设备文件 umount -l /dev/sdb2
umount -n /mnt/data #卸载磁盘并不写入/etc/fstab
fdisk #用于管理磁盘分区 ,常用参数fdisk -l
partprobe #手动将分区信息同步到内核,连续两次执行该命令,效果更好
mkfs #用于格式化操作的命令 mkfs.xfs /dev/sdb1
du #用来查看一个或多个文件占用了多大的硬盘空间 du -sh /abc/
ln #创建连接文件 ln -s file1 file2 不加-s为硬链接,加-s为软链接
scp #将文件传送到远程服务器或者从远程服务器下载到本地,例如:scp root@192.168.1.1:/root/a.txt /root/ 表示将远程主机的a.txt文件下载到本地/root目录下,scp -P 2300 /root/b.txt root@192.168.1.1:/root 表示将b.txt传送到远程机器的/root目录下,参数-P可以指定远程主机端口、参数-r可以用来传送文件夹(递归)
echo -e "\003"#一般在脚本中使用,表示ctrl +c
lsof /home | grep -i delete #查找哪个应用对应的inode没有释放,一般用于处理清理磁盘空间后空间还是满的,实际大小与显示大小不一致
hdparm -t /dev/sda #查询磁盘的读取速度
vmstat #报告内存以及cpu使用情况
dmesg #显示开机信息
lscpu #显示cpu信息
getconf LONG_BIT #获取主机的位数
sed '0,/happy/{//d}' file #删除所有匹配行的第一行
sed -n '/2021-08-21 20:50:05/,/2021-08-21 21:42:05/p' info.log #匹配时间段内日志,要精确到秒,否则不准, 后面还可以跟grep搜素要检索的具体字段
sort 文件名 | uniq #将文件内容排序并去除重复的内容
sort 1.txt 2.txt #排序两个文件的内容
sort 1.txt 2.txt | uniq #取出两个文件并集(重复的行只保留一份)
sort 1.txt 2.txt | uniq -u #删除交集行(行内容一模一样),留下其他行
sort 1.txt 2.txt | uniq -d #保留交集行,其余行不要
md5sum 文件名 #查看文件的md5值,用来文件数据做对比是否有缺失
sha256sum 文件名 #查看文件的sha256值,用于对比文件是否有缺失
yum provides */netstat #找到提供netstat命令的软件包
:set paste #原样粘贴,解决粘贴位置乱的问题
ll -hrS #将文件大小按照升序方式进行排序
jar -xvf abc.jar #解压jar包
jar -cvf0M abc.jar BOOT-INF/ META-INF/ org/ #重新打成Jar包
jar -uvf hello-0.0.1-SNAPSHOT.jar BOOT-INF/classes/abc.yml #将文件abc.yml添加进入jar包中
cat /sys/class/net/ens33/address #查看机器的mac地址,与ifconfig等效
openssl x509 -in server.crt -noout -dates #查看证书过期时间
cat error.log | egrep "2022/01/10 11" | awk -F':' '$2 >= 20 && $2 <= 40' #打印11点20到40分日志,注意,标点符号要是英文状态下的才可以,否则报错
touch {1..100}.txt #批量创建100个文件
grep -l linux a.txt b.txt c.txt #搜索多个文件,找出linux位于哪个文件中
dmidecode -t processor | grep 'ID' | head -1 | awk -F : '{print $2}' #获取cpuid
dmidecode -t 4 | grep ID |head -1 #获取cpuid
bash -c "ps -ef |grep nginx" // bash 加-c #可以将字符串作为命令
bash shell.sh #bash后只能加脚本,不可以加命令
dmidecode -s system-serial-number | tail -n 1#获取机器的sn
grep -w abc #精确匹配abc字符串
:set ff=unix #设置换行符为unix格式
:set ff=dos #设置换行符为windows格式
cat -e a.sh #查看文件换行符方式如果结尾为^M,说明为windows,如果为$说明为windows
ulimit -n #查看当前系统打开文件数,默认为1024,也可以使用ulimit -a
ulimit -n 65535 #设置打开文件数,只是临时生效,如果永久可以设置limit.conf或者在服务中配置
mtr www.baidu.com #探测网络是否有丢包,需要提前安装mtr,直接yum -y install mtr
pidof dockerd #查看docker进程的pid
ls -li #获取文件的节点号,然后可根据节点号删除文件
find -inum 节点号 -delete #根据节点号删除文件
grep -w "abcd" --exclude-dir=logs ./* -r #精准查询内容排除目录logs
lsof -i :3306 #查看3306端口被哪些进程使用,注意有冒号
wget -m url地址 #递归下载此地址下的全部文件
wget -c url 地址 #下载,并实现断点续传
wget -P /root/test url #下载文件到/root/test目录下,目录如果不存在会自动创建
journalctl --disk-usage #检查journal使用的磁盘量
journalctl --vacuum-time=2d #只保留journal 2天内的日志
journalctl --vacuum-size=500M #日志最大500M,大于500M的都会被清理掉
zip -r -o file.zip abc/ def/ #将abc和def目录压缩到file.zip中
zip -r -j a.zip /tmp/a.txt /tmp/b.txt #将a.txt和b.txt压缩进a.zip中,不带目录/tmp
uname -m #查看处理器架构
uname -r #查看内核版本
demidecode -d #查看系统硬件部件
cat /proc/cpuinfo #显示cpu信息
cat /proc/meminfo #显示内存信息
cat /proc/swaps #显示哪些swap正在被使用
cat /proc/version #显示内核版本
cat /proc/net/dev #显示网络适配器以及统计
cal 2010 #显示2010年的日历表
clock -w #将时间修改保存到BIOS
shutdown -h now #关机
init 0 #关机
telinit 0 #关机
shutdown -h hour:minute #按预定时间关闭系统
shutdown -c #取消按预定时间关闭系统
shutdown -r now #重启系统
reboot #重启系统
logout #注销
whereis halt #显示一个二进制文件、源码、或者man的位置
which halt #显示一个二进制文件或者可执行文件的完整位置
fuser -km /mnt/data #当设备繁忙时强制卸载
unoconv -f png a.jpg #将jpg格式转换为png,也可以转换doc、pdf等
chattr +a file #只允许以追加的方式读写文件
chattr +c file #允许这个文件能被内核自动压缩和解压
chattr +d file #在进行文件系统备份时,dump程序将忽略这个文件
chattr +i file #设置成不可变的文件,不能被删除、修改、重命名或者链接
chattr +s file #允许一个文件被安全地删除
chattr +S file #应用程序对这个文件执行了写操作,系统立刻把修改的结果写到磁盘
bzip2 -d abc.bz2 #解压bz2压缩包,通过bzip2命令(需要单独安装)
gunzip file.gz #解压gz压缩包
gzip file #压缩file文件
gzip -9 file #最大程度压缩
paste 1.txt 2.txt > 3.txt#合并文件1.txt和2.txt到3.txt中
paste -d "+" 1.txt 2.txt > 3.txt #合并后中间使用+连接
badclocks -v /dev/sda1 #检查磁盘sda1上的坏磁块
fsck /dev/hda1 #修复/检查hda1磁盘上linux文件系统的完整性
fsck.ext2 /dev/hda1 #修复/检查hda1磁盘上ext2文件系统的完整性
e2fsck /dev/hda1 #修复/检查hda1磁盘上ext2文件系统的完整性
e2fsck -j /dev/hda1 #修复/检查hda1磁盘上ext3文件系统的完整性
fsck.ext3 /dev/hda1 #修复/检查hda1磁盘上ext3文件系统的完整性
fsck.vfat /dev/hda1 #修复/检查hda1磁盘上fat文件系统的完整性
fsck.msdos /dev/hda1 #修复/检查hda1磁盘上dos文件系统的完整性
dosfsck /dev/hda1 #修复/检查hda1磁盘上dos文件系统的完整性
mkfs /dev/hda1 #在hda1分区创建一个文件系统
mke2fs /dev/hda1 #在hda1分区创建一个linux ext2的文件系统
mke2fs -j /dev/hda1 #在hda1分区创建一个linux ext3(日志型)的文件系统
mkfs -t vfat 32 -F /dev/hda1 #创建一个 FAT32 文件系统
fdformat -n /dev/fd0 #格式化一个软盘
mkswap /dev/hda3 #创建一个swap文件系统
split -b 10M a.txt b_ #将a.txt切割为以b_开头,大小为10M的文件,split后加--verbose显示过程
cat b_aa b_ab > a.txt #将split切割的文件,通过cat命令重新合并为a.txt
fc-cache -fv #刷新字体缓存
chage -M -1 username #设置用户密码用不过期,-1表示永不过期
chage -M 1000 username #设置用户过期时间为1000天
chage -l username #查看是否设置成功,-l是L的小写
lsof |grep deleted #查找被进程占用的已删除文件的id,可停止或重启释放inode
ftp ip 21 #登陆ftp,会提示输入账号密码
usermod -aG groupname username #将用户加入到新的组并保留原来的组
ll /proc/pid/fd | wc -l #查看进程打开的文件描述符
echo "hello" | tee file.txt #在终端输出内容并同步写入到file.txt中,文件不存在会自动创建
echo "world" |tee -a file.txt #在终端显示后追加到文件file.txt中,文件不存在会自动创建
echo "abcd" | tee file.txt file1.txt #输出到多个文件中
find ./* -name "*.txt" | xargs rm -rf #将find结果传给xargs变成命令行参数,作为rm -rf的参数
du --inodes -s /data/abc #查看目录abc以及子目录占用的inode数量
kill -TERM pid #请求进程正常终止,允许进程执行清理操作、释放资源等,等于kill -15
kill -9 pid #强制杀掉进程
kill -QUIT pid #请求进程推出并生成核心转储文件 等于kill -3
awk 'END {print NR}' filename #统计文件有多少行
cat filename | wc -l #统计文件有多少行
wc -l filename #统计文件有多少行
grep -c '^' filename #统计文件有多少行
ss -tnp #查看所有远程链接
ss -tnp dst :443 #查看连接到远程443端口的所有链接
netstat -tnp | grep ESTABLISHED | grep 443 #查看连接到远程443端口的所有链接
ss -tnp src :22 #查看本地的22端口正在被哪些远程服务连接过来
ss -antp | grep ':9092' #查看本地的9092端口被哪些远程机器连接中
export TMOUT=3600 #配置shell终端会话超时时间,在/etc/profile
curl ifconfig.me #查看linux服务器本机的公网出口IP
curl icanhazip.com #查看linux服务器本机的公网出口IP
pgrep -x haproxy #精确找到haproxy
pgrep -x -o nginx #精确找到最新启动的nginx,一般为master进程
pgrep -x -n nginx #精确找到最后启动的Nginx,一般为worker进程
iostat -xmt 1 每秒刷新数据,如果%iowait>10%说明磁盘拖慢系统,await > 10 ms + aqu-sz > 1 + %util > 80% 同时出现,基本锁定磁盘问题
bash -c 'exec 3<>/dev/tcp/127.0.0.1/3306 && echo "3306 is open" && exec 3<&-' #Bash 内置的网络端口检测技巧,它不依赖外部工具(如 telnet或 nc),直接通过 Bash 的 /dev/tcp特性检查本地 3306 端口(通常是 MySQL)是否开放,如果检测其他端口,就把3306换成其他端口即可,此命令适合容器内,如果没有telnet,那么可以用此命令
grep -Fxf file1.txt file2.txt #查看两个文件共同的行(交集)
npm install --unsafe-perm #安装时保持当前用户权限
npm rebuild node-saas #重构下node-saas
输入输出重定向:
- 命令 < 文件 : 将文件作为命令的标准输入
- 命令 << 分界符 : 从标准输入中读入,直到遇见分界符才停止
- 命令 < 文件 1 > 文件 2:将文件 1 作为命令的标准输入并将标准输出到文件 2
- 命令 > 文件 : 将标准输出重定向到一个文件中(清空原有文件的数据)
- 命令 2> 文件 : 将错误输出重定向到一个文件中(清空原有文件的数据)
- 命令 >> 文件 : 将标准输出重定向到一个文件中(追加到原有内容的后面)
- 命令 2>> 文件: 将错误输出重定向到一个文件中(追加到原有内容的后面)
- 命令 >> 文件 2>&1或者 命令 &>> 文件 : 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
管道命令符: 把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输 入
- ls -l /etc/ | more :将/etc/目录下的文件传递给more命令
- echo “linux” | passwd –stdin root //修改root密码,编写脚本时使用
常用的转义符:
- 反斜杠(\): 使反斜杠后面的一个变量变为单纯的字符串echo “Price is \$5”
- 单引号(”): 转义其中所有的变量为单纯的字符串
- 双引号(“”): 保留其中的变量属性,不进行转义处理
- 反引号(“): 把其中的命令执行后返回结果
环境变量:
- HOME : 用户的主目录(即家目录)
- SHELL: 用户在使用的 Shell 解释器名称
- HISTSIZE: 输出的历史命令记录条数
- HISTFILESIZE: 保存的历史命令记录条数
- MAIL: 邮件保存路径
- LANG : 系统语言、语系名称
- RANDOM: 生成一个随机数字
- PS1: Bash 解释器的提示符
- PATH : 定义解释器搜索用户执行命令的路径
- EDITOR : 用户默认的文本编辑器
Vim命令:
- dd : 删除(剪切)光标所在整行
- 5dd : 删除(剪切)从光标处开始的 5 行
- yy : 复制光标所在整行
- 5yy : 复制从光标处开始的 5 行
- n : 显示搜索命令定位到的下一个字符串
- N : 显示搜索命令定位到的上一个字符串
- u : 撤销上一步的操作
- p : 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
- :w : 保存
- :q : 退出
- :q! : 强制退出 ,不保存
- :wq :保存并推出
- :wq! 强制保存退出
- :set nu : 显示行号
- :set nonu : 不显示行号
- :整数 : 跳转到该行
- 10G 跳转到第10行
- :s/a/b :将当前光标所在行的第一个 a 替换成 b
- :s/a/b/g : 将当前光标所在行的所有a 替换成b
- :%s/a/b/g : 将全文中的所有a 替换成b
- :n,ms/a/b/g : 将行号n到m之间的所有a替换为b
- ?字符串 : 在文本中从下至上搜索该字符串 ,反向查找
- /字符串 : 在文本中从上至下搜索该字符串,正向查找
- /\<字符串\> : 在文本中精确查找字符串,严格匹配,\表示转义字符
- a/i/o:按住键盘a或i或o进入编辑模式
- Esc:从编辑模式返回命令模式,此时可以执行保存
- ctrl +v 然后移动光标选择要操作的行,打开大写键,点击i,输入内容,按两次esc,可以实现批量添加内容(比如注释或其他特殊符号)
- shift + zz //在vim普通模式(按了ESC)下输入shift zz即可实现快速保存并退出
- ggdG //在vim普通模式(按了ESC)下输入此内容可清空文件全部内容
用户身份与权限:
uid: 表示用户标识,root的uid为0,普通用户uid从1000开始,id root可查看
gid: 表示组标识 root的gid为0
useradd: 用于创建新的用户, useradd -d /home/linux -u 8888 -s /sbin/nologin linux 参数:-d表示指定用户家目录,-u表示指定用户的UID,-s表示指定默认shell解释器,-g表示指定基本组 -G表示指定扩展组
groupadd group_name: 创建用户组
groupdel group_name: 删除用户组
groupmod -n new_group_name old_group_name: 重命名一个用户组
usermod: 用于修改用户的属性 参数: -g更改基本组,-G更改扩展组,-L锁定用户禁止其登录,-U解锁用户,-u修改UID,-s改成默认解释器,例如:useradd -a G group user 将用户user加入到组group中
passwd: 用于修改用户密码、过期时间、认证信息,-l(L的小写)表示锁定指定用户,也无法通过FTP登录 如: passwd -l admin,-u解除锁定,-e强制下次登录修改密码,--stdin允许标准输入修改密码
userdel: 用于删除用户 ,参数:-f强制删除,-r同时删除家目录
chattr: 用于设置文件的隐藏权限 主要参数: i(无法对文件进行修改),a( 允许追加内容,无法覆盖/删除内容 ), 使用方法:chattr +i/-i 文件名
lsattr: 用于显示文件的隐藏权限, 按照显示的隐藏权限的类型(字母),使用 chattr 命令将其去掉
chage -E 2005-12-31 user1 设置用户口令的失效期限
pwck: 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户
文件权限
find / -perm -u+s : 系统中所有使用了SUID控制的文件
chown: 设置文件或目录的所有者和所属组 chown -R root:root 文件/目录
chown user file: 修改文件的所有人属性
chgrp group file: 修改文件的群组
chmod u+s /bin/file: 设置一个二进制文件的 SUID
chmod u-s /bin/file: 禁用一个二进制文件的 SUID
chmod g+s /home: 设置一个目录的SGID
chmod g-s /home: 禁用一个目录的SGID
chmod o+t /test: 设置一个目录的 STIKY
chmod o-t /test: 取消一个目录的 STIKY
chmod +x 文件路径: 为所有者、所属组和其他用户添加执行的权限
chmod -x 文件路径: 为所有者、所属组和其他用户删除执行的权限
chmod u+x 文件路径: 为所有者添加执行的权限
chmod g+x 文件路径: 为所属组添加执行的权限
chmod o+x 文件路径: 为其他用户添加执行的权限
chmod ug+x 文件路径: 为所有者、所属组添加执行的权限
chmod =wx 文件路径: 为所有者、所属组和其他用户添加写、执行的权限,取消读权限
chmod ug=wx 文件路径: 为所有者、所属组添加写、执行的权限,取消读权限

其他
1、vim无法输入中文,编辑/etc/vimrc或者/etc/vimc,添加如下内容:
set encoding=UTF-8
set langmenu=zh_CN.UTF-8
set fileencoding=utf-8
2、新增硬盘,挂载到指定位置:
1、添加新分区
fdisk /dev/sda
2、按照如下输入:
n 回车
p 回车
1 回车
两次回车
w 回车
3、查看分区
fdisk -l
4、格式化分区
mkfs -t xfs -c /dev/sda1 #-c用来检查坏道,如果新硬盘那么不需要-c
5、挂载
mount /dev/sda1 /data
3、cpu读取数据问题:
- 64位CPU每次读取8个字节的数据
- 32位CPU每次读取4个字节的数据
4、linux内核下载地址:
https://elrepo.org/linux/kernel/el7/x86_64/RPMS/
http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/
5、linux配置登录超时锁定
(1)、修改/etc/ssh/sshd_config中参数,设置登录失败次数与锁定时间,如图:

- MaxAuthTries:登录失败次数为2次
- LoginGraceTime:锁定时间为2分钟
上图的意思是如果一个用户连续两次登录失败将被锁定2分钟后才可以登录
(2)、除了上述方法外,也可以在/etc/pam.d/sshd文件中添加如下内容:
auth required pam_tally2.so deny=5 unlock_time=60 #登录失败5次锁定60s
6、linux设置密码有效期
vim /etc/login.defs
PASS_MAX_DAYS 90 #最大天数
PASS_MIN_LEN 5 #最小长度
7、passwd -l 和/sbin/nologin都是禁止用户登录有什么区别?
1、passwd -l admin 将设置admin用户不能通过shell登录,也不能通过FTP工具登录
2、修改/etc/passwd将/bin/bash改为/sbin/nologin只是禁止用户不能通过shell登录但是还是可以通过FTP登录
8、通过openssl自签名证书
openssl genrsa -out abcd.key 2048 #生成key
openssl req -new -key abcd.key -out abcd.csr #生成csr
openssl x509 -req -days 36500 -in abcd.csr -signkey abcd.key -out abcd.crt #根据key和csr申请crt #证书有效期100年
9、设置服务器禁止ping
编辑文件/etc/sysctl.conf,添加如下语句:
net.ipv4.icmp_echo_ignore_all = 1
添加成功后,执行sysctl -p 即可
美团CAT开源监控工具
10、实时操作系统
- Azure RTOS ThreadX
11、文件格式问题
将windows下的文件上传到linux后,打开文件可以看到内容后缀显示^M,这是^M字符是 Windows 换行符 在 Linux/Unix 系统中的显示问题,不同操作系统的换行符差异:
- Windows:使用
\r\n(回车+换行) - Linux/Unix:使用
\n(仅换行) - Mac OS:历史上使用
\r,现在多数也用\n
解决办法:
apt install dos2unix
dos2unix 文件名