linux实践手册

ssh

ssh 到指定端口 ssh -p xxx user@ip

xxx --为 端口号
user --为用户名
ip --为要登陆的ip

linux三剑客:数据检索grep, 数据替换sed,数据切割awk

sed -i "s/service-node-port-range=32000-32767/service-node-port-range=1-65535/g" /etc/kubernetes/manifests/kube-apiserver.yaml

systemctl 和yum

systemctl

systemctl status nfs

systemctl list-unit-files --type=service |grep nfs
#没有就yum -y install 安装,有还报错,就先
yum list installed |grep rpc

yum curl

CentOS 中用 Yum 安装、卸载软件

开放端口号–开通网络策略

iptables -I INPUT -p TCP --dport 3306 -j ACCEPT

rm -rf 删除指定目录下的所有文件

rm -rf /xxx/*

参考文章

端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手,滑动窗口

printenv打印环境变量

vi文本搜索

esc+/
然后输入你的关键词然后
esc+n就是向下查找了

set ff=unix脚本sh乱码问题

: set ff查看是dos,如果是请改为unix格式,否则./xxx.sh运行不了,sh xxx.sh也会导致别的错误。一般是直接把window上的文件直接拷到linux上就会出现该问题

sed跨文件内容全局替换

全局将8001下的源文件中的8001替换成8002(不更改8001下文件内容),然后将更改后的文件全部替换掉8002文件中的内容

sed ‘s/8001/8002/g’ 8001/redis.conf > 8002/redis.conf

history查看历史命令

ctrl c/z/d杀掉进程,挂起进程,退出终端。jobs查看后台进程

ctrl z 挂起进程(程序不会响应客户端请求,比如redis启动后,按下ctrl z,6379端口仍在监听,ps命令,lsof命令都能查看到程序在运行,telnet也能连接到改端口,但redis服务会拒绝客户端的连接,不会响应任何客户端请求,使用bg/fg可唤醒进程到前台/后台执行)

telnet

安装命令

yum install telnet telnet-server -y

用法

telnet ip 端口

这是检查程序通不通,ctrl+]可以退出,再输入quit+回车

ps,netstat,lsof

ps -ef | grep 应用名 -------能查进程id和进程端口
netstat -nlt/anp| grep 18080 -------判断端口有无启动
lsof -i:18080 -----根据端口查看其关联的应用名,进程id

ps -ef | grep consul查看pid
lsof -i:pid 查看端口或者lsof -i |grep consul


如果要根据启动命令,进程id查进程,可以使用ps
如果要根据端口号查进程,可以使用lsof或者netstat


ps进程查看命令【显示的关键信息主要有启动命令进程id】,它查到的是一个快照,要实时监控的话需要用top命令。-e或者-A是查看所有进程,-f是显示详情信息,对比如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ps -ef 等价于 ps -aux 【都是详细的打印所有进程的信息,后面加上 |grep xxx ----》xxx可以是启动命令,也可以是进程id】

如果要根据端口号查找进程,可以使用lsof -i:8080
netstat
-p显示进程标识符和程序名称,每一个套接字/端口都属于一个程序
-n不进行DNS轮询(可以加速操作)—
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l仅显示监听套接字,不加的话查询的就是非监听状态的套接字了(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序),对比如下:
在这里插入图片描述

套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序

在这里插入图片描述

tcp/udp的端口状态有:
LISTENING(处于监听状态)、ESTABLISHED(建立连接状态)、TIME_WAIT及CLOSE_WAIT详解

在这里插入图片描述
状态变迁
在这里插入图片描述

echo输出到控制台,>/dev/null 2>&1输出到文件

echo显示Linux命令执行的结果

echo "`ll`"

工作中用到最多的就是

nohup java -jar xxxx.jar >/dev/null 2>&1 &

为了不让一些执行信息输出到前台(控制台),我们还会加上刚才提到的>/dev/null 2>&1命令来丢弃所有的输出

nohup(no hang up不挂起)…& 让程序在后台运行(不加&的话终端关闭,程序也会结束)

‘>’是输出重定向,‘<’是输入重定向,linux的输入输出默认是在控制台,但很多时候我们需要将它保存到文件中方便持久化,这时候就可以使用>和<进行输出输入重定向到文件。

‘>’重新生成文件(已有则覆盖,没有则创建)
‘>>’追加到原文件(已有则追加,没有则创建)

./demo.sh >&1 (正确的信息)输出到控制台,【错误的信息也会输出到控制台,因为linux默认有2>&1】
./demo.sh >1 (正确的信息)输出到文件1

/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到(丢弃一切信息)

我们使用<对输入做重定向,如果符号左边没有写值,那么默认就是0
我们使用>对输出做重定向,如果符号左边没有写值,那么默认就是1

./demo.sh >out.log 2>out.log
标准输出和错误输出会抢占往out文件的管道,所以可能会导致输出内容的时候出现缺失、覆盖等情况,而且,由于out文件被打开了两次,两个文件描述符会抢占性的往文件中输出内容,所以整体IO效率不如>/dev/null 2>&1来得高

2>&1
这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。

>/dev/null 2>&1解惑必看,写得非常的好

查看运行的程序以及杀死程序

ps -ef | grep 6379

查看进程,cpu,内存,磁盘的使用情况

按进程的CPU使用率排序(ctrl+c退出)
top
P

按进程的内存使用率排序
top
M

docker占用了5.2%的内存
在这里插入图片描述
查看内存:free -m 【以M字节显示,-g就是以G字节显示】

总内存972M,可用404M
在这里插入图片描述

查看磁盘使用情况 : df -h

/(根目录)用了24%,/boot系统启动盘用了14%,docker总的用了72%的样子
在这里插入图片描述

文件移动

mv /root/TencentKona-8.0.0-232.tar.gz /usr/local/java/
记住要加/,否则就会把文件改名

scp命令

一、示例

1、从本地复制到远程

在本地服务器上将/root/lk目录下所有的文件传输到服务器43.224.34.73的/home/lk/cpfile目录下,命令为:

scp -r /root/lk root@43.224.34.73:/home/lk/cpfile

2、从远程复制到本地

在本地服务器上操作,将服务器43.224.34.73上/home/lk/目录下所有的文件全部复制到本地的/root目录下,命令为:

scp -r root@43.224.34.73:/home/lk /root
————————————————
版权声明:本文为CSDN博主「微心微世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yyfgw/article/details/120835774

cp,mv命令

cp用法
递归复制文件
cp -r 原文件夹 目标文件夹

mv用法
mv 【-b当目标文件存在时,先进行备份在覆盖,-f当目标文件存在时,强制覆盖】 .txt xxx/ 将以txt结尾的文件移动到xxx目录下
mv /home/
lmj/ 移动home目录下的所有文件到lmj目录
1.如果目标文件是文件夹,则源文件直接移动到该文件夹内,名字还是源文件的名字。
2.如果目标文件时文件,则源文件移动的同时也会更改名字
3.如果源文件为多个,则目标必须是目录,并且统一移动到目录下
在这里插入图片描述
mv *

这条命令如果当前目录下有文件夹xxx,yyy,和文件。。。那么会将文件。。。和文件夹xxx移动到yyy(即排在最后的文件夹里面)

文件上传下载【rz -e】

从原先哪台 scp -r 过去就行了 两天机器之间相互传文件

yum install -y lrzsz
rz -e 【上传 文件】
sz 文件名 【下载文件】

vi命令

全部删除ggdG  [gg移动光标到首行,dG删除光标以下]
撤回 u

unzip, tar 文件解压缩命令

tar
解包:tar zxvf filename.tar
打包:tar czvf filename.tar dirname

zip命令
解压:unzip filename.zip
压缩:zip -r filename.zip dirname

网络

netstat -natp

nc www.baidu.com

网络命令

telnet [ ip ] [ port ] 端口是否能连通

ping ip 地址是否能连通

nslookup www.baidu.com 查询域名对应的ip【如果主机能联网,但却访问不了某个网站,就可以在host中做域名解析配置】【vi /etc/hosts 添加类似: 104.18.122.25 production.cloudflare.docker.com】

网络域名-端口-应用之间的关系

一个域名(等于ip+端口)对应一个应用;比如域名:xx.com 对应127.0.0.1:8080(直接输入ip等价于ip:80),大型系统都有一个网关/接入层负责进行转发,比如网关端口是8090,ip是130.155.155.12,绑定的域名aa.com,则访问aa.com实际是访问130.155.155.12:8090,然后根据网关的转发表进行转发。例如
/a----x.x.x.x:9999
/b----x.x.x.x:8888
那么输入aa.com/a,该请求先到了网关(网关会判断:是否有访问权限),网关检查到了/a,再查路由会将请求再打(转发)到x.x.x.x:9999服务器上(判断是否有访问权限)
接入层相当于一个小型网关,颗粒度更细,个性化定制的小型网关


一个端口对应一个应用,web应用的原理

public class Server {
    @SneakyThrows
    public static void main(String[] args) {
        ServerSocket serverSocket = new ServerSocket(9999);
        Socket accept = serverSocket.accept();
        InputStream inputStream = accept.getInputStream();
        byte[] data = new byte[20480];
        int len = inputStream.read(data);
        String requestInfo = new String(data, 0, len);
        System.out.println(requestInfo);
    }
}

在这里插入图片描述
后端接受的信息如下:

POST / HTTP/1.1
Host: localhost:9999
User-Agent: PostmanRuntime/7.11.0
Content-Length: 25
Accept: */*
Accept-Encoding: gzip, deflate
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json
Cookie: JSESSIONID=82E00D6937A4DC6269FD1BC9022448E2
Postman-Token: 26a169b3-6953-45e3-b72b-eca70f8dfce0

{
	"name":"hello world"
}

更改linux主机名

sudo hostnamectl set-hostname <newhostname>

这条命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名。和第一种方法一样,我们也需要更新/etc/hosts文件。这两种方法的本质都是一样的。

静态ip配置

yum install net-tools -y
查看网关 route -n
在这里插入图片描述
ip addr查看网卡
vi /etc/sysconfig/network-scripts/ifcfg-ens33 对应的网卡名

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"   第一处:有dhcp改为static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="82755475-b793-4947-aff0-47278427c4b2"
DEVICE="ens33"  
ONBOOT="yes"
IPADDR="192.168.177.200"  第二处:前三位要和网关一致
GATEWAY="192.168.177.2"   第三处:网关配置,通过route -n 可查看,如果网络切花了,这时网关可能会变,需要会来改下(同时还要更改下/etc/reslov.conf)

重启网络
service network restart

配置域名解析器
vi /etc/resolv.conf

# Generated by NetworkManager
nameserver 192.168.177.2
#这里配置的是网关,不是8.8.8.8域名解析,一个域名过来,会先在本地的/etc/hosts文件中做域名解析,解析不会,就会发送域名解析请求,它得先通过网关转发出去,转发到当地的域名解析服务器进行解析,解析不到就到全球域名解析服务器,最后将ip返回回来

awk+xargs

xargs:由于很多命令不支持|管道来传递参数,xargs就是来解决这个问题的

echo “aa” | xargs echo
打印结果为aa

awk工作原理
awk中{print $1}什么意思

echo "aa bb cc" | awk '{print $1}' # 结果:aa
awk -F: '{print $1}' /etc/passwd # 提取文件第一列
ps -ef |grep mysql |awk '{print $2}' |xargs kill -9

给你举个例子,echo “aa bb cc” | awk -F ‘{print $1}’ 结果就是aa,意思是把字符串按空格分割,取第一个,自己做个测试就明白了!

awk是用来提取列的主要工具;
{print $1}就是将某一行(一条记录)中以空格为分割符的第一个字段打印出来


xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器
echo “efg”|xargs echo abc

打印结果 abc efg

案例
删除k8s所有Evicted的节点

get pod -n gasc-dev |grep unified-file-service | grep Evicted | awk ‘{print$1}’ |xargs kubectl -n gasc-dev delete pods

其实最后执行的是
kubectl -n gasc-dev delete pods a b c d。。。。。
删除某个节点
kubectl -n gasc-dev delete pod 节点名字

  • 批量杀死redis进程
    在这里插入图片描述
    在这里插入图片描述
    ps -ef|grep redis |awk ‘{print $2}’|xargs kill -9

linux文件权限问题大全

创建jenkins组

groupadd jenkins

创建jenkins用户

useradd jenkins

创建jenkins专属文件夹

mkdir /home/jenkins (上一步useradd其实会自动创建)

将文件夹的用户和用户组跟新成jenkins用户(此时虽然/home只有root可以写,其他用户只能读和执行,但是/home/Jenkins是jenkins拥有所有权限,所以可以读写执行,创建文件夹等等)

chown -R jenkins.jenkins /home/jenkins/
chown -R jenkins /home/jenkins/

将jenkins追加到root组

usermod -a -G root jenkins

chmod +x / 777文件权限

文件属性[d:目录,-:文件,l:连接文件]+owner(拥有者)+group()+other(非组

权限属性:数字(对照表):r:4,w:2,x:1,-:0
在这里插入图片描述

以白色栏为例:

  1. d rwx r-x r-x. 【这是一个目录,owner具有可读可写可执行权限,组和非组都只能读和执行,没有写权限。用数字可以表示为d755】
  2. 8 【连接数为8】
  3. root 【owner为root(及root用户创建的)】
  4. root 【组为root】
  5. 132【文件大小】
  6. Oct 25 2020【修改时间】
  7. dubbo【文件目录名/文件名】

chmod ugo=rxw /root 相当于 chmod 777 /root
chmod ug=rx /root 相当于chmod 550 /root

  • 修改文件拥有者和用户组
    chown lmj.mygroup xxx.txt

在这里插入图片描述

虽然文件/root/script/build.sh的权限是777,即所有人都能访问,可是/root的权限是550,即除了目录创建者以及所在组以外,其他用户无任何的读,写,执行等权限,因此切换成lmj或者jenkins用户是无执行权限的。(还可能因为权限不足报文件找不到等错误)

chmod命令用来修改文件或目录的存取权限,只有文件所有者和超级用户(root用户)才能使用该命令

chown :一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以将自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。系统管理员(root)经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用

特别注意:linux下的/,/root其他用户都只能读,/opt,/usr其他用户都只能读和执行,不能写,即不能使用lmj用户执行mkdir /opt/aaa 这样的操作,会报权限不足问题。

原/opt的权限是755,需要改成757才能在lmj下创建目录

chown -R lmj /opt 递归将opt以及子文件的文件所有者更改为lmj

usermod 修改用户所在组,cat /etc/passwd列出所有用户及密码

linux中查看用户密码及密码破解(加密方式)详解(/etc/shadow文件)

在这里插入图片描述

{用户名}:{加密后的口令密码}:{口令最后修改时间距原点(1970-1-1)的天数}:{口令最小修改间隔(防止修改口令,如果时限未到,将恢复至旧口令):{口令最大修改间隔}:{口令失效前的警告天数}:{账户不活动天数}:{账号失效天数}:{保留}
【注】:shadow文件为可读文件,普通用户没有读写权限,超级用户拥有读写权限。如果密码字符串为*,则表示系统用户不能被登入;如果字符串为!,则表示用户名被禁用;如果字符串为空,则表示没有密码
我们可以使用passwd –d 用户名 清空一个用户的口令密码

用户名密码用户id群组id用户id信息用户家目录shell
rootx00root/root/bin/bash
已创建用户的用户名,字符长度 1 个到 12 个字符x代表加密密码保存在 /etc/shadow 文件中每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的每个群组都要有一个唯一的 GID ,保存在 /etc/group文件中描述用户的信息用户的家目录用户使用的 shell 类型

用户名、密码、用户 ID、群组 ID、用户 ID 信息、用户的家目录、Shell
root: x: 0: 0: root: /root: /bin/bash
【切换用户】su 用户名
【列出所有用户】awk -F’:’ ‘{ print $1}’ /etc/passwd
linux创建用户的时候会默认创建一个和用户名相同的用户组


groupadd mygroup 创建组
useradd lmj 创建用户【此时用户的家目录是/home/myuser】
useradd -d /opt/myuser -m myuser-d指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。】
usermod -a -G mygroup lmj 将已存在的用户(usermod)lmj追加(-a)到组(-G)mygroup中
passwd -d lmj 用户lmj可以免密登陆
passwd lmj 可以给用户lmj设置密码

tail命令-查看文件

less nginx.conf【文件名】 可以使用PgUp,PgDn查看上一页,下一页内容
head -n 20 nginx.conf | tail -n 20 | nl -b a 列出nginx.conf文件的前20然后再从中取后20行内容并显示行号而且不论空格也列出行号
在这里插入图片描述

tail -f 动态查看日志文件

tail -f xxx.log 实时动态查看日志文件

tail+grep快速查找

tail -n 100 nginx.conf | nl | grep ‘cert.pem’ --color -5
在这里插入图片描述
tail -n 100显示倒数100行的内容,nl列出行号,grep 'cert.pem’查找带key的文本,–color key高亮显示,-5显示key前后的5行内容(-A5 -B5也可以这样写)。

find命令-查找软件的所有路径

find / -name 【查询的内容】

例如 find / -name java

卸载与安装java环境变量

rpm -qa | grep java | xargs rpm -e --nodeps
yum -y install java-1.8.0-openjdk-devel.x86_64

环境变量JAVA_HOME路径为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64

Linux系统时区校准问题

安装ntpdate
yum install -y ntp

网络时间同步:
ntpdate -u ntp.api.bz

NTP服务器(上海) :ntp.api.bz
服务器每次重启都会参考硬件的时间,所以需要将当前系统的时间写入到硬件。所以需要将校准之后的时间写入到系统硬件

查看当前硬件时间:
[root@db01 ~]# hwclock -r
2018年08月09日 星期四 21时14分29秒 -0.735471 seconds
写入硬件时间:
[root@db01 ~]# hwclock -w
[root@db01 ~]# hwclock -r
2018年08月09日 星期四 13时14分44秒 -0.345959 seconds

零时调整

date -s "20210113 14:06:20"

tree -L树形查看文件目录结构

linux目录命名遵循FHS(Filesystem Hierarchy Standard 文件系统层次化标准)
FHS定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如/etc应该要放置设置(系统配置)文件,/bin与/sbin则应该要放置可执行文件,/opt第三方软件安装目录 (也可放在/usr/local下) 等等
第二层则是针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等

  • 查看目录和文件命令tree
yum install tree -y
tree -L 2 -C -d       【L查看深度,C颜色标记,d只列出目录】

在这里插入图片描述

启停防火墙与端口开放

防火墙参考文章
关闭防火墙=所有端口都允许外界访问

1.启动防火墙 systemctl start firewalld
2.禁用防火墙 systemctl stop firewalld
3.设置开机启动 systemctl enable firewalld
4.停止并禁用开机启动 systemctl disable firewalld
5.重启防火墙 firewall-cmd --reload
6. 查看防火墙状态 service firewalld.service status
7. 查看作用域为public级别的端口列表 firewall-cmd --zone=public --list-ports

  • 开放指定端口

firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
–zone #作用域
【drop: 丢弃所有进入的包,而不给出任何响应
block: 拒绝所有外部发起的连接,允许内部发起的连接
public: 允许指定的进入连接】

–add-port=1935/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

然后重启防火墙firewall-cmd --reload

  • 开放某范围内端口
    firewall-cmd --zone=public --add-port=8000-9935/tcp --permanent
    firewall-cmd --reload

$用法解析

$+数字 一般是位置参数的用法。
如果运行脚本的时候带参数,那么可以在脚本里通过 $1 获取第一个参数,$2 获取第二个参数…依此类推,一共可以直接获取9个参数(称为位置参数)。$0用于获取脚本名称。
. $1中的点是执行的意思。
例如在liunx中。
执行sh脚本就可以直接使用 “. +文件名”的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值