Linux命令记录

Linux

sar
  1. 查看所有cpu使用率
[root@node1 ~]# sar -P ALL 1
Linux 3.10.0-957.12.2.el7.x86_64 (node1)        11/02/2022      _x86_64_        (56 CPU)

12:29:50 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:29:51 PM     all     15.05      0.00      5.44      0.31      0.00     79.20
12:29:51 PM       0     16.49      0.00      6.19      0.00      0.00     77.32
12:29:51 PM       1     14.29      0.00     10.20      1.02      0.00     74.49
12:29:51 PM       2     13.13      0.00      4.04      1.01      0.00     81.82
12:29:51 PM       3     13.27      0.00      4.08      2.04      0.00     80.61
12:29:51 PM       4     13.27      0.00      6.12      1.02      0.00     79.59
12:29:51 PM       5     15.62      0.00      7.29      0.00      0.00     77.08
12:29:51 PM       6     15.62      0.00      8.33      0.00      0.00     76.04

mpstat -P ALL也可以实现以上效果

top
  1. 可通过‘y’和‘b’加粗正在运行的进程,‘x’对排序的列高亮显示,‘z’对显示的颜色(颜色/黑白)进行切换,四个键可配合使用实现以下效果:
    在这里插入图片描述
  2. 在是按"%CPU"进行排序的,可以按”shift+>”或者”shift+<”左右改变排序序列
  3. 在top基本视图中,敲击”f”进入另一个视图,在这里可以编辑基本视图中的显示字段
  4. top -o 【filed】可以按指定列进行排序,如top -o S根据运行状态排序,可以通过x + R快速查看到R状态的进程
  5. top + 3可以选择显示哪颗node上的cpu使用率,+2可以分别显示每个node上的cpu使用率,
  6. 可以通过以下按键改变列的排序:
    N - 以 PID 的大小的顺序排列表示进程列表
    P - 以 CPU 占用率大小的顺序排列进程列表
    M - 以内存占用率大小的顺序排列进程列表
    T - 以cpu的使用时间排序
    如,通过排序可以查找出最大内存占用的进程
  7. 其他:
    n - 设置在进程列表所显示进程的数量
    s - 改变画面更新周期
    R - 可以将当前的排序倒转
    L - 查找指定字符串的进程
    V - 树状显示进程
    c - 显示完整命令行进程名称
    top -O 输出支持列名称
pvmove

当我们要替换掉lvm中的一块磁盘时,要保证里面没有数据,需要使用pvmove进行数据迁移

[root@k8master ~]# pvmove /dev/vdb
  /dev/vdb: Moved: 0.01%
  /dev/vdb: Moved: 2.21%
  /dev/vdb: Moved: 6.18%
cfdisk

fdisk有时候会分区失败,可尝试使用cfdisk

[root@k8master ~]# cfdisk /dev/vda 

                                                                         cfdisk (util-linux 2.23.2)

                                                                            Disk Drive: /dev/vda
                                                                     Size: 128849018880 bytes, 128.8 GB
                                                           Heads: 16   Sectors per Track: 63   Cylinders: 249660

timedatectl

timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系统和服务管理器的一部分,代替旧的传统的用在基于Linux分布式系统的sysvinit守护进程的date命令。

timedatectl命令可以查询和更改系统时钟和设置,你可以使用此命令来设置或更改当前的日期,时间和时区,或实现与远程NTP服务器的自动系统时钟同步。

可以通过使用来自于终端使用timedatectl命令的NTP,设置date、time、timezone和synchronize time来管理时间。让你的Linux服务器或系统保持正确的时间是一个很好的实践,它有以下优点:

1)维护及时操作的系统任务,因为在Linux中的大多数任务都是由时间来控制的。

2)记录事件和系统上其它信息等的正确时间。

  1. 要显示系统的当前时间和日期,使用命令行中的timedatectl命令,如下:
[root@develop ~]# timedatectl status
      Local time: Wed 2018-10-31 14:05:51 CST
  Universal time: Wed 2018-10-31 06:05:51 UTC
        RTC time: Wed 2018-10-31 06:05:53 
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@develop ~]# 

RTC time(real-time clock)是指硬件时钟时间
Time zone:时区

  1. 查看系统所有可用的时区
[root@develop ~]# timedatectl  list-timezones 
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
  1. 设置系统时区
[root@develop ~]# timedatectl set-timezone Asia/Shanghai
[root@develop ~]# 
  1. 设置Linux中的时间。只设置时间的话,我们可以使用set-time开关以及HH:MM:SS(小时,分,秒)的时间格式。
[root@develop ~]# timedatectl set-time 14:17:01
[root@develop ~]# 
  1. 将硬件时钟设置为本地时区
timedatectl set-local-rtc 1
  1. 将硬件时钟设置为协调世界时(UTC)
timedatectl set-local-rtc 0
  1. 将Linux系统时钟同步到远程NTP服务器
    NTP即Network Time Protocol(网络时间协议),是一个互联网协议,用于同步计算机之间的系统时钟。timedatectl实用程序可以自动同步你的Linux系统时钟到使用NTP的远程服务器。
    注意,你必须在系统上安装NTP以实现与NTP服务器的自动时间同步。
    要开始自动时间同步或禁止同步远程NTP服务器时间,在终端键入以下命令。
# timedatectl set-ntp true
# timedatectl set-ntp false
arping

arp在获取目标ip的mac后,会缓存一段时间,所以当目标IP的mac变更后需要通知其他设备 更新arp缓存,此时就可以通过以下命令完成

arping -U
compgen

可用来返回系统所有的用户

compgen -u
arptable

设置arp规则表,如禁止virtual_ip的arp请求
arptables -A IN -d <virtual_ip> -j DROP
arptables -A OUT -s <virtual_ip> -j mangle --mangle-ip-s <real_ip>

openstack

placement管理
openstack --os-placement-api-version 1.6 trait list --sort-column name
openstack --os-placement-api-version 1.2 resource class list --sort-column name
加载meta信息

加载后可在flavor中查看这些元数据

glance-manage db_load_metadefs

打开路由的外部网络snat功能,使得无浮动ip的vm依然可以访问公网,命令如下:

[root@vs-controller1 ~(VisionStack)]$ openstack router set --external-gateway 8dc253e4-cb7c-4ce4-9db7-ce501c070caf --enable-s
nat e762fefa-ddc8-4d03-9f31-9f1c613d85a3

原理解析
1)当enable-snat为True时,会对VM的固定ip进行snat转换,转换成外部网络的地址,该过程是在snat命名空间中由iptables完成,如下所示:

Chain neutron-l3-agent-snat (1 references)
target     prot opt source               destination         
neutron-l3-agent-float-snat  all  --  0.0.0.0/0            0.0.0.0/0           
SNAT       all  --  0.0.0.0/0            0.0.0.0/0            to:124.160.117.108 (该规则将源ip转换为124.160.117.108)
SNAT       all  --  0.0.0.0/0            0.0.0.0/0            mark match ! 0x2/0xffff ctstate DNAT to:124.160.117.108

通过抓包可以确认vm源IP已变为124.160.117.108

17:40:37.507285 IP 124.160.117.108 > 114.114.114.114: ICMP echo request, id 1311, seq 4, length 64
17:40:37.526980 IP 114.114.114.114 > 124.160.117.108: ICMP echo reply, id 1311, seq 4, length 64

2)当enable-snat为False时,不会对vm的固定ip进行snat(源地址替换)转换,由于vm的固定ip为云内网络,无法完成云外网络的访问,iptables规则如下:

neutron-l3-agent-float-snat  all  --  0.0.0.0/0            0.0.0.0/0           
SNAT       all  --  0.0.0.0/0            0.0.0.0/0            mark match ! 0x2/0xffff ctstate DNAT to:124.160.117.108

注意:无论是否开启snat,snat中的qg口都会存在snat ip(124.160.117.108)

更新浮动IP池

neutron subnet-update 52ae4db1-b8aa-4f4f-aee8-9818b7ff3ae5 --allocation-pools  type=dict list=true start=60.191.72.103,end=60.191.72.109 start=60.191.72.100,end=60.191.72.100 

更新子网DNS

neutron subnet-update 2997b922-c62b-4280-8121-79dbd36fc253  --dns_nameservers list=true 223.5.5.5 114.114.114.114 223.6.6.6

docker

docker ps

列出所以容器实例
-a:包含已终止的容器
-l:列出最后一次运行的容器
-q:只返回id

[root@docker-test-18d031cc merged]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
999ae928e834        ubuntu              "/bin/bash"         17 minutes ago      Exited (0) 4 seconds ago                       zealous_jennings

说明:STATUS为容器状态,上面示例中为容器已退出,状态码为0

docker run

启动一个容器
-d:后台运行
-t:创建一个tty终端
-i:交互式模式
-p:映射容器内端口至宿主机,如 -p 80(将)

[root@docker-test-18d031cc ~]# docker run --name daemon_test -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

fd032195ed02833f4ba59f65aa548316802559d73eb29c606d9baa203ea81059
docker start

重新启动一个已经停止的容器,会沿用docker run命令时指定的参数

[root@docker-test-18d031cc ~]# docker start 999ae928e834
docker attach

重新附着到容器的会话上

[root@docker-test-18d031cc ~]# docker attach 999ae928e834
root@999ae928e834:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
docker logs

获取容器日志
-f:跟踪日志,与tail -f相似
–tail 10:打印最后10行
-t:日志加上时间戳

[root@docker-test-18d031cc log]# docker logs --tail 10 -t daemon_test
2019-10-14T03:36:25.897660000Z hello world
2019-10-14T03:36:26.898865000Z hello world
2019-10-14T03:36:27.900556000Z hello world
docker top

查看容器内部运行的进程

[root@docker-test-18d031cc log]# docker top daemon_test
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                17616               17597               0                   11:20               ?                   00:00:00            /bin/sh -c while true;do echo hello world;sleep 1;done
root                19427               17616               0                   11:39               ?                   00:00:00            sleep 1
docker exec

在容器内部运行进程

[root@docker-test-18d031cc log]# docker exec -d daemon_test touch /etc/hjtest
[root@docker-test-18d031cc log]# docker exec -i -t daemon_test /bin/bash
docker stop

停止容器内的守护进程

[root@docker-test-18d031cc log]# docker stop daemon_test
daemon_test
[root@docker-test-18d031cc log]# docker ps -n 1
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
fd032195ed02        ubuntu              "/bin/sh -c 'while..."   29 minutes ago      Exited (137) 33 seconds ago                       daemon_test
docker restart

自动重启容器
–restart=always:无论容器退出码是什么都会一直重启
–restart=on-failure:5 退出码为非0时重启5次

[root@docker-test-18d031cc log]# docker run --restart=on-failure:2 --name daemon_test -d ubuntu /bin/sh -c "while true;do echo 
hello world;sleep 1;done" 
bb3d632be42bc55f08d563b1e416c310f79320669bad4801f1b6f085cdd01646
docker inspect

查看容器详细信息
–format:格式化输出,可自定义查看内容

[root@docker-test-18d031cc log]# docker inspect daemon_test
[
    {
        "Id": "03d2b20d10a1257430cca615f569c074c600b6a80177c6121fcf0d4325dfb464",
        "Created": "2019-10-14T03:56:38.802914484Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true;do echo hello world;sleep 1;done"
        ],
[root@docker-test-18d031cc log]# docker inspect --format '{{.Name}}' daemon_test 
docker rm

删除容器,只能删除已停止运行的容器

[root@docker-test-18d031cc log]# docker rm `docker ps -a -q` 
docker images

列出容器镜像

[root@docker-test-18d031cc log]# docker images 
docker pull

拉取镜像

[root@docker-test-18d031cc log]# docker pull ubuntu
docker search

查找镜像,在Docker Hub上

[root@docker-test-18d031cc overlay2]# docker search puppet
docker commit

创建新镜像(不推荐,建议使用Dockerfile文件和docker build命令)

[root@docker-test-18d031cc overlay2]# docker commit a3b2cccf4b94 zhj/test
sha256:afd7cf487aa1a46ac3a10fb44efc5f82f6167902ee82eae02ec76ce7ad8729c7
docker build

创建新镜像,通过Dockerfile
–no-cache:忽略Dockerfile的构建缓存

[root@docker-test-18d031cc static_web]# vim Dockerfile 
# Version: 0.0.1
FROM ubuntu:14.04
MAINTAINER Zhj "zhj@tairanchina.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
EXPOSE 80

[root@docker-test-18d031cc static_web]# docker build -t="zhj/static_web" .
docker history

查看镜像的创建过程

[root@docker-test-18d031cc ~]# docker history zhj/test 
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
8930f03b4b66        43 minutes ago      /bin/bash                                       1.75 MB             
0f3e07c0138f        12 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           12 days ago         /bin/sh -c #(nop)  LABEL org.label-schema....   0 B                 
<missing>           12 days ago         /bin/sh -c #(nop) ADD file:d6fdacc1972df52...   220 MB     
docker port

查看容器端口映射信息

[root@docker-test-18d031cc static_web]# docker port 97cc68a8a2d7
80/tcp -> 0.0.0.0:32770
[root@docker-test-18d031cc static_web]# docker port 97cc68a8a2d7 80
0.0.0.0:32770
docker push

上传镜像至镜像仓库

docker rmi

删除镜像

修改docker仓库
[root@master k8s]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://hub-mirror.c.163.com"]}

Dockerfile 指令

CMD

指定一个容器启动时要运行的命令
如Dockerfile中配置为:CMD [ “/bin/bash” ],通过该Dockerfile构建的镜像启动容器时不需要在命令行指定/bin/bash
注意:docker run时命令行指定的命令优先级大于Dockerfile中CMD指定的命令

[root@docker-test-18d031cc static_web]# cat Dockerfile 
# Version: 0.0.1
FROM nginx
MAINTAINER Zhj "zhj@tairanchina.com"
CMD [ "/bin/bash" ]
[root@docker-test-18d031cc static_web]# docker run -i -t zhj/static_web 
ENTRYPOINT

通过数组的方式为命令指定相应的参数,命令行指定的参数会传递给ENTRYPOINT

WORKDIR

指定容器内的工作目录,ENTRYPOINT和CMD中的指令会在该目录下执行
-w:docker run该参数可以覆盖WORKDIR

WORKDIR /opt/webapp/db 
RUN bundle install 
WORKDIR /opt/webapp 
ENTRYPOINT [ "rackup" ]
ENV

镜像制作过程中设置环境变量,也可以使用docker run -e覆盖

USER

指定以哪个用户执行命令,也可以在docker run中通过-u选项覆盖,默认用户为root

VOLUME

用来向基于镜像创建的容器添加卷

ADD

向镜像中拷贝文件,源类型支持url、文件、目录,并会自动解压压缩文件

COPY

向镜像中拷贝文件,不会解压源文件

ONBUILD

构建镜像时触发的动作,只能继承给子镜像

K8s

kubectl delete nodes

删除k8s集群中node节点

[root@k8master kansible]# kubectl delete nodes node1
node "node1" deleted
kubectl get/create/delete namespaces

命名空间管理

[root@k8master kansible]# kubectl create namespace hjtest2
[root@k8master kansible]# kubectl get namespaces
NAME          STATUS    AGE
default       Active    10d
hjtest        Active    10d
hjtest2       Active    3s
kube-public   Active    10d
kube-system   Active    10d
[root@k8master kansible]# kubectl delete namespaces hjtest2
kubectl api-versions

获取k8s api版本

[root@hjdevelop ~]# kubectl api-versions 
apps/v1beta1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1beta1
autoscaling/v1
batch/v1
certificates.k8s.io/v1alpha1
extensions/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1alpha1
storage.k8s.io/v1beta1
v1
[root@hjdevelop ~]# 
kubeadm token create --print-join-command

打印加入集群token信息

[root@master k8s]# kubeadm token create --print-join-command
kubeadm join apiserver.demo:6443 --token ea093t.mmn0ia2np3ck4jdg     --discovery-token-ca-cert-hash sha256:1392000d39e3d79e28aa75ecf10d011b06fe90fab3792ba93a5adcb5d6e4724f 
批量删除pods
kubectl get pods|grep MatchNodeSelector|awk '{print $1}'|xargs kubectl delete pods
kubectl attach -it nginxname -c shell1

attach到一个容器中,前提是该容器设置了tty和stdin

[root@master shareProcessNamespace]# kubectl attach -it nginxname -c shell1
If you don't see a command prompt, try pressing enter.
/ # top

K8S yaml

ImagePullPolicy

镜像拉群策略。
IfNotPresent:只在宿主机上不存在这个镜像时才拉取
Never:永远不会主动拉取这个镜像
Always:每次创建 Pod 都重新拉取一次镜像

Lifecycle
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值