linux常用命令
Linux 系统目录
├── bin -> usr/bin # 用于存放二进制命令 |
一、目录操作
pwd 查看当前工作目录 |
查看目录内信息
ll 查看当前目录下内容(LL的小写) |
创建目录
mkdir aaa 在当前目录下创建aaa目录,相对路径; |
递归创建目录(会创建里面没有的目录文件夹)
mkdir -p temp/nginx |
搜索命令
find / -name 'b' 查询根目录下(包括子目录),名以b的目录和文件; |
重命名
mv 原先目录 文件的名称 mv tomcat001 tomcat |
剪切命令(有目录剪切到制定目录下,没有的话剪切为指定目录)
mv /aaa /bbb 将根目录下的aaa目录,移动到bbb目录下(假如没有bbb目录,则重命名为bbb); |
复制目录
cp -r /aaa /bbb 将/目录下的aaa目录复制到/bbb目录下,在/bbb目录下的名称为aaa |
强制式删除指定目录
rm -rf /bbb 强制删除/目录下的bbb目录。如果bbb目录中还有子目录,也会被强制删除,不会提示; |
删除目录
rm -r /bbb 普通删除。会询问你是否删除每一个文件 |
查看树状目录结构
tree test01/ |
1、批量操作
需要采用{}
进行参数的传入了。
mkdir {dirA,dirB} # 批量创建测试目录 |
二、文件操作
删除
rm -r a.java 删除当前目录下的a.java文件(每次回询问是否删除y:同意) |
强制删除
rm -rf a.java 强制删除当前目录下的a.java文件 |
创建文件
touch testFile |
递归删除.pyc格式的文件
find . -name '*.pyc' -exec rm -rf {} \; |
打印当前文件夹下指定大小的文件
find . -name "*" -size 145800c -print |
递归删除指定大小的文件(145800)
find . -name "*" -size 145800c -exec rm -rf {} \; |
递归删除指定大小的文件,并打印出来
find . -name "*" -size 145800c -print -exec rm -rf {} \; |
"."
表示从当前目录开始递归查找" -name '*.exe' "
根据名称来查找,要查找所有以.exe结尾的文件夹或者文件" -type f "
查找的类型为文件"-print"
输出查找的文件目录名-size 145800c
指定文件的大小-exec rm -rf {} \;
递归删除(前面查询出来的结果)
split拆分文件
split命令:可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。
b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字作为后缀。
-l:值为每一输出档的行数大小。
-a:指定后缀长度(默认为2)。
使用split命令将上面创建的date.file文件分割成大小为10KB的小文件:
[root@localhost split]# split -b 10k date.file |
文件被分割成多个带有字母的后缀文件,如果想用数字后缀可使用-d参数,同时可以使用-a length来指定后缀的长度:
[root@localhost split]# split -b 10k date.file -d -a 3 |
为分割后的文件指定文件名的前缀:
[root@localhost split]# split -b 10k date.file -d -a 3 split_file |
使用-l选项根据文件的行数来分割文件,例如把文件分割成每个包含10行的小文件:
split -l 10 date.file |
三、文件内容操作(查看日志,更改配置文件)
修改文件内容
vim a.java 进入一般模式 |
文件内容的查看
cat a.java 查看a.java文件的最后一页内容; |
总结下more 和 less的区别:
- less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
- less不必读整个文件,加载速度会比more更快
- less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容.
- 由于more不能后退.
实时查看文件后几行(实时查看日志)
tail -f a.java 查看a.java文件的后10行内容; |
前后几行查看
head a.java 查看a.java文件的前10行内容; |
文件内部搜索指定的内容
grep under 123.txt 在123.txt文件中搜索under字符串,大小写敏感,显示行; |
终止当前操作
Ctrl+c
和Ctrl+z
都是中断命令,但是作用却不一样。
ctrl+z |
Ctrl+Z 就扮演了类似的角色,将任务中断,但是任务并没有结束,在进程中只是维持挂起的状态,用户可以使用fg/bg操作前台或后台的任务,fg命令重新启动前台被中断的任务,bg命令把被中断的任务放在后台执行。
Ctrl+C也扮演类似的角色,强制中断程序的执行。
重定向功能
可以使用 > 或 \< 将命令的输出的命令重定向到test.txt文件中(没有则创建一个)
echo 'Hello World' > /root/test.txt |
1、grep(检索文件内容)
grep [options] pattern file |
- 全称:Global Regular Expression Print。
- 作用:查找文件里符合条件的字符串。
// 从test开头文件中,查找含有start的行 |
2、awk(数据统计)
awk [options] 'cmd' file |
- 一次读取一行文本,按输入分隔符进行切片,切成多个组成部分。
- 将切片直接保存在内建的变量中,$1,$2…($0表示行的全部)。
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格。
- -F 指定分隔符(默认为空格)
1. 将email.out
进行切分,打印出第1/3列内容
awk '{print $1,$3}' email.out |
2. 将email.out
进行切分,打印出第1/3列内容
awk '{print $1,$3}' email.out |
3. 将email.out
进行切分,当第1列为tcp,第2列为1的列,全部打印
awk '$1=="tcp" && $2==1{print $0}' email.out |
4. 在上面的基础上将表头进行打印(NR表头)
awk '($1=="tcp" && $2==1)|| NR==1 {print $0}' email.out |
5. 以,
为分隔符,切分数据,并打印第二列的内容
awk -F "," '{print $2}' test.txt |
6. 将日志中第1/3列进行打印,并对第1列的数据进行分类统计
awk '{print $1,$3}' email.out | awk '{count[$1]++} END {for(i in count) print i "\t" count[i]}' |
7. 根据逗号,
切分数据,并将第一列存在文件test01.txt
中
awk -F "," '{print $1 >> "test01.txt"} |
3、sed(替换文件内容)
sed [option] 'sed commond' filename |
- 全名Stream Editor,流编辑器
- 适合用于对文本行内容进行处理
- sed commond为正则表达式
- sed commond中为三个/,分别为源内容,替换后的内容
sed替换标记
g # 表示行内全面替换。 |
1. 替换解析
sed -i 's/^Str/String/' replace.java |
2. 将末尾的.替换为;(转义.)
sed -i 's/\.$/\;/' |
3. 全文将Jack替换为me(g是全部替换,不加只替换首个)
sed -i 's/Jack/me/g/ replace.java |
4. 删除replace.java中的空格(d是删除)
sed -i '/^ *$/d' replace.java |
5. 删除包含Interger的行(d是删除)
sed -i '/Interger/d' replace.java |
6.多命令一起执行
grep 'input' 123.txt | sed 's/\"//g; s/,/\n/g' |
7. 替换后将数据保存在文中
grep 123.txt | sed -n 's/\"//gw test01.txt' |
4、管道操作符|
- 可将指令连接起来,前一个指令的输出作为后一个指令的输入
find ~ |grep "test" |
使用管道注意的要点
- 只处理前一个命令正确输出,不处理错误输出。
- 右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃
- sed,awk,grep,cut,head,top,less,more,c,join,sort,split等
1.从email.log文件中查询包含error的行
grep 'error' email.log |
2.获取到error的行,并取[]含有数字的
grep 'error' email.log | grep -o '\[0-9\]' |
3. 并过滤掉含有当前进程
ps -ef|grep tomcat |grep -v |
4. 替换后将数据保存在文中
grep 123.txt | sed -n 's/\"//gw test01.txt' |
5. 将文件123.txt
,按,
切分,去除"
,按:
切分后,将第一列存到文件test01.txt
中
grep 'input' 123.txt | awk -F ',' '{print $2}' | sed 's/\"//g; s/,/\n/g' | awk -F ":" '{print $1 >> "test01.txt"}' |
5、cut(数据裁剪)
- 从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
- 也可采用管道输入。
选项参数 | 功能 |
---|---|
-f | 列号,提取第几列 |
-d | 分隔符,按照指定分隔符分割列,默认是制表符”\t” |
文件截取
[root@VM-0-9-centos shell]# cut -d ":" -f 1 cut.txt |
管道截取
[root@VM-0-9-centos shell]# echo $PATH |
四、系统日志位置
cat /etc/redhat-release 查看操作系统版本 |
查看某文件下的用户操作日志
到达操作的目录下,执行下面的程序:
cat .bash_history |
五、创建与删除软连接
1、创建软连接
ln -s /usr/local/app /data |
注意:创建软连接时,data目录后不加 / (加上后是查找其下一级目录);
2、删除软连接
rm -rf /data |
注意:取消软连接最后没有/,rm -rf 软连接。加上/是删除文件夹;
六、压缩和解压缩
tar
tar
压缩(-c)
tar -cvf start.tar a.java b.java //将当前目录下a.java、b.java打包 |
解压缩(-x)
tar -xvf start.tar //解压start.tar压缩包,到当前文件夹下; |
解压缩tar.xz
文件
tar xf node-v12.18.1-linux-x64.tar.xz |
unzip/zip
压缩(zip)
zip lib.zip tomcat.jar //将单个文件压缩(lib.zip) |
解压缩(unzip)
unzip file1.zip //解压一个zip格式压缩包 |
七、Linux下文件的详细信息
R:Read w:write x: execute执行 |
更改文件的权限
chmod u+x web.xml (---x------) 为文件拥有者(user)添加执行权限; |
八、常用的docker容器的命令:
1、下载镜像
Linux服务器下载安装包镜像命令
wget https://mirrors.huaweicloud.com/elasticsearch/7.8.0/elasticsearch-7.8.0-windows-x86_64.zip |
https://mirrors.huaweicloud.com/ |
2、常用命令
1、查看docker中下载好的镜像: |
九、运维常用命令
1、查看服务器端口号是否可用
查看服务器是否可用
ping 49.32.587.164 |
查看服务器指定端口是否可用
telnet 49.32.587.164 8093 |
这是我写过的一个Linux安装Telnet的文章。
https://blog.csdn.net/lydms/article/details/113698856 |
1、shutdown(关闭计算机)
shutdown是最常用也是最安全的关机和重启命令,它会在关机之前调用fsck检查磁盘,其中-h和-r是最常用的参数:
-h:停止系统服务并关机 |
案例:
shutdown -h now --立即关机 |
强制重启
reboot |
2、查看处于各种连接状态数量(ESTABLISHED、CLOSE_WAIT、TIME_WAIT)
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' |
查看处于ESTABLISHED
状态连接
netstat -nt | awk '{if($NF=="ESTABLISHED"){wait[$5]++}}END{for(i in wait) print i,wait[i]}' |
查看处于CLOSE_WAIT
状态连接
netstat -nt | awk '{if($NF=="CLOSE_WAIT"){wait[$5]++}}END{for(i in wait) print i,wait[i]}' |
查看处于TIME_WAIT
状态连接
netstat -nt | awk '{if($NF=="TIME_WAIT"){wait[$5]++}}END{for(i in wait) print i,wait[i]}' |
3、ping命令
对 www.lydms.com 发送 4 个 ping 包, 检查与其是否联通
ping -c 4 www.lydms.com |
4、netstat 命令netstat 命令用于显示各种网络相关信息,如网络连接, 路由表, 接口状态等等;
列出所有处于监听状态的tcp端口:
netstat -lt |
查看所有的端口信息, 包括 PID 和进程名称
netstat -tulpn |
5、查看当前端口号占用情况
1.用于查看某一端口的占用情况
lsof -i:8080 |
2.显示tcp,udp的端口和进程等相关情况
netstat -tunlp |
3.指定端口号的进程情况
netstat -tunlp|grep 8080 |
4.查看PID进程信息
ps -aux |grep 28990 |
根据PID,查看JVM中各线程信息(‘0x9eb’为nid值)
jstack 2246|grep '0x9eb' -A 50 |
6、ps 命令
过滤得到当前系统中的 ssh 进程信息
ps aux | grep 'ssh' |
7、管道命令简单来说, Linux 中管道的作用是将上一个命令的输出作为下一个命令的输入, 像 pipe 一样将各个命令串联起来执行, 管道的操作符是 |
管道命令查看当前运行的程序中,名称为java的程序
ps -ef|grep java |
查看/etc/passwd文件中的root内容
cat /etc/passwd | grep 'root' |
查看当前系统的ip连接(Windows和Linux通用)
netstat -an |
将sh test.sh任务放到后台,并将打印的日志输出到nohup.out
文件中,终端不再能够接收任何输入(标准输入)
nohup sh test.sh & |
将sh test.sh任务放到后台,并将打印的日志输出到test.out
文件中,终端不再能够接收任何输入(标准输入)
nohup sh test.sh >> test.out & |
将sh test.sh任务放到后台,并将打印的日志输出到nohup.out文件中,终端能够接收任何输入
nohup sh test.sh & |
8、添加Host地址
打开配置文件
vim /etc/hosts |
在打开的文件中添加
49.235.32.164 www.lydms.com |
保存文件后,重启网络
/etc/init.d/network restart |
重新加载成功:
十、yum常用命令
yum install iptables-services 下载并安装iptables |
十一、其他命令
1、xargs
给其他命令传递参数的一个过滤器
补充说明
xargs 命令 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成特定命令的命令参数。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。
xargs 命令用法
xargs 用作替换工具,读取输入数据重新格式化后输出。
-n
:指定每行输出数量
cat test.txt | xargs -n3 |
-d
:按指定内容分隔文本
[root@VM-0-9-centos ~] echo "nameXnameXnameXname" | xargs -dX |
-l
:文本命令替换
xargs 的一个 选项 -I ,使用 -I 指定一个替换字符串{},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:
ls *.jpg | xargs -n1 -I cp {} /data/images |
-t
:将执行的命令,打印出来
-t echo{} |
ls * |xargs -t -n1 -I {} cp -r {} /root/ddd/ echo{} |
结合使用—-指定X切分,并每行2个
[root@VM-0-9-centos ~] echo "nameXnameXnameXname" | xargs -dX -n2 |
查看历史使用命令
history |
过滤与es
相关命令
history | grep es |
查看占用资源
ps -au 占用的资源是从进程启动开始,计算的平均占用资源,比如cpu等 |
查看当前目录所占存储
du -lh 查看当前文件下各文件夹占用存储空间 |
管道命令:
根据项目查看进程,更加PID查看项目,以及项目路径
ps -ef 查看所有的进程 |
通过进程PID查看所占用的端口号
netstat -nap |grep 进程ID(PID) |
查看Linux下系统存储使用率
df -h 查看系统硬盘使用情况 |
杀死进程(根据PID)
kill -9 2630 进程pid |
关闭防火墙
service iptables stop 临时关闭防火墙 |
开机启动选项
msconfig 查看开机启动选项 |
查看MySQL服务的程序的状态
service mysql start 开启MySQL |
查看系统变量
echo $USER 输出某个变量 |
2、curl语法
GET请求
curl "http://www.wangchujiang.com" |
POST请求
普通文本 |
详细可以看我写的另一篇:curl语法整理
https://blog.csdn.net/lydms/article/details/127655845 |
3、查询支持解析器
Centos默认的解析器是bash
cat /etc/shells |
列表
/bin/sh |
指定解析器执行
脚本以#!/bin/bash
开头(指定解析器)
!/bin/bash |
十二、Linux内核优化
打开配置文件
vim /etc/sysctl.conf |
加载新的配置(需开启防火墙iptables,否则会报错)
sysctl -p |
https://www.cnblogs.com/lldsn/p/10489593.html |
十三、用户权限操作
1、用户操作
添加用户sum
:
useradd --d /usr/sum -m sum |
关于useradd的某些参数:
-u: 指定 UID,这个 UID 必须是大于等于500,并没有其他用户占用的 UID
-g: 指定默认组,可以是 GID 或者 GROUPNAME,同样也必须真实存在
-G: 指定额外组
-c: 指定用户的注释信息
-d: 指定用户的家目录
已创建的用户sum
设置密码
passwd sum |
用户添加root
权限
visudo |
找到root
用户权限位置
添加与root
用户相同权限
# Allow root to run any commands anywhere |
新建的用户在面显示
cat /etc/passwd |
切换下刚才添加的用户
su sum |
sum: x:1000:1000:: /usr/sum :/bin/bash
sum: x:0:1000:: /usr/sum :/bin/bash
回到root用户
exit |
修改已有用户信息usermod
usermod 选项 用户名 |
删除用户文件夹
rm -rf /usr/sum |
删除用户sum
userdel sum |
2、添加组
添加用户组
groupadd groupname |
修改用户组
使用者权限:管理员用户
groupmod 选项 用户组 |
常用的选项有:
- -g GID 为用户组指定新的组标识号。
- -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
- -n新用户组 将用户组的名字改为新名字
删除用户组
groupdel groupname |
可以看到自己的分组和分组id
cat /etc/group |
3、sudo用户权限操作
比如我们使用普通用户操作用户或者操作用户组、以及修改网卡配置文件的时候,需要切换到root用户才操作,此时我们可以使用sudo命令提高普通用户的操作权限,以达到操作目的
sudo
:控制用户对系统命令的使用权限,root允许的操作。
通过sudo可以提高普通用户的操作权限。
使用者权限:普通用户
使用root用户权限执行命令,操作
sudo -s |
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 |
4、更换文件所有者
格式:
chown [-R] 所有者 文件或目录 |
将kibana-8.3.3-linux-x86_64.tar.gz
所有者改为用户sum
chown -R sum /usr/sum/kibana-8.3.3-linux-x86_64.tar.gz |
将kibana-8.3.3-linux-x86_64.tar.gz
所有者改为用户sum
、所有组改为sum
chown -R sum:sum /usr/sum/kibana-8.3.3-linux-x86_64.tar.gz |
十四、TOP
实时占用的资源:
top |
top命令执行结果分为两个区域:统计信息区 和进程信息区
1、统计信息区
TOP:任务队列信息,与uptime命令执行结果相同.
15:33:39
:系统时间up 5:40
:主机已运行时间2 users
:用户连接数(不是用户数,who命令)load average: 1.09, 1.04, 0.98
:系统平均负载,统计最近1,5,15分钟的系统平均负载
Tasks:进程信息
123 total
:进程总数3 running
:正在运行的进程数120 sleeping
:睡眠的进程数0 stopped
:停止的进程数0 zombie
:僵尸进程数
%CPU(s):CPU信息(当有多个CPU时,这些内容可能会超过两行)
42.1 us
:用户空间所占CPU百分比2.0 sy
:内核空间占用CPU百分比0.0 ni
:用户进程空间内改变过优先级的进程占用CPU百分比49.2 id
:空闲CPU百分比0.0 wa
:等待输入输出的CPU时间百分比6.0 hi
:硬件CPU终端占用百分比0.7 si
:软中断占用百分比0.0 st
:虚拟机占用百分比
KiB Mem:内存信息(与第五行的信息类似与free命令类似)
3780.9 total
:物理内存总量727.4 free
:已使用的内存总量668.8 used
:空闲的内存总量(free + userd = total)2384.7 buff/cache
:用作内核缓存的内存量
KiB:swap信息
2048.0 total
:交换分区总量2.0 used
:已使用的交换分区总量2046.0 free
:空闲交换分区总量859.6 avail
:缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但是使用过的交换区没有被覆盖,交换区的这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
2、进程信息区
PID:进程id
USER:进程所有者的用户名
PR:优先级
NI:nice值。负值表示高优先级,正值表示低优先级
RES:进程使用的、未被换出的物理内存的大小
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程所使用的CPU时间总计,单位1/100秒
COMMAND:命令名/行
PPID:父进程id
RUSER:Real user name(看了好多,都是这样写,也不知道和user有什么区别,欢迎补充此处)
UID:进程所有者的id
VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
GROUP:进程所有者的组名
TTY:启动进程的终端名。不是从终端启动的进程则显示为?
NI:nice值。负值表示高优先级,正值表示低优先级
P:最后使用的CPU,仅在多CPU环境下有意义
TIME:进程使用的CPU时间总计,单位秒
SWAP:进程使用的虚拟内存中被被换出的大小
CODE:可执行代码占用的物理内存大小
DATA:可执行代码以外的部分(数据段+栈)占用的物理内存大小
SHR:共享内存大小
nFLT:页面错误次数
nDRT:最后一次写入到现在,被修改过的页面数
S:进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名
Flags:任务标志
十五、文件安装
1、文件下载(lrzsz)
下载文件
yum install -y lrzsz |
上传文件
rz |
保存文件
sz |
十六、文章PDF版本
https://download.csdn.net/download/weixin_44624117/79721103 |