前言

本文记录一些日常使用linux的一些点。

系统负载评估

理解Linux系统负荷

查看 ps -ef

[root@deployer ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2018 ? 00:00:29 /usr/lib/systemd/systemd --system --deserialize 21
root 2 0 0 2018 ? 00:00:00 [kthreadd]
root 3 2 0 2018 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 2018 ? 00:00:00 [kworker/0:0H]
root 9 2 0 2018 ? 00:00:40 [rcu_sched]
......
root 337 2 0 2018 ? 00:00:01 [kworker/3:1H]
root 380 1 0 2018 ? 00:00:00 /usr/lib/systemd/systemd-udevd
root 415 1 0 2018 ? 00:00:01 /sbin/auditd
root 498 1 0 2018 ? 00:00:03 /usr/lib/systemd/systemd-logind
......
root@pts/0
root 32794 32792 0 Jan10 pts/0 00:00:00 -bash
root 32901 32794 0 00:01 pts/0 00:00:00 ps -ef

三类进程

  1. pid=1 init进程Systemd
  2. pid=2 内核线程kthreadd,用户态不带中括号, 内核态带中括号
  3. tty 带问号的,说明不是前台启动的,一般都是后台启动的服务

Linux中的引号

首先,单引号和双引号,都是为了解决中间有空格的问题。

  • 单引号

    当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符

  • 双引号

    双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:美元符号,反斜杠和反引号

  • 反引号

    命令替换:在执行一条命令时,会先将其中反引号之间的语句,或者是$()中的语句当作命令执行一遍,再将结果加入到原命令中重新执行。其中,$()格式受到POSIX标准支持,也利于嵌套。比如docker rm -f $(docker ps -aq)。常见的用法:将命令的输出结果赋给一个变量

      var=`command`

软件包安装工具

  • rpm & yum 后者可以解决依赖关系
  • dpkg & apt 后者可以解决依赖关系

pid文件

  • pid文件内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。

  • pid文件作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。

/etc/issue和/etc/motd

登陆linux的欢迎界面可由/etc/issue和/etc/motd控制。/etc/issue文件的使用方法与/etc/motd文件相差不大,它们的主要区别在于:当一个网络用户或通过串口登录系统上时,/etc/issue的文件内容显示在login提示符之前,而/etc/motd内容显示在用户成功登录系统之后。

socket文件

socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。UNIX Domain Socket也提供面向流和面向数据包两种API接口,类似于TCP和UDP,但是面向消息的UNIX Domain Socket也是可靠的,消息既不会丢失也不会顺序错乱。

UNIX Domain Socket是全双工的,API接口语义丰富,相比其它IPC机制有明显的优越性,目前已成为使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。

来源于:[本地socket unix domain socket][]

socket文件,只有在本级通信(AF_UNIX)时才会用到;对于远程TCP通信(AF_INET)来说,是不存在sock文件一说的。以mysql.sock文件为例,假定AB两台主机,mysql服务运行在B主机上。

  • 那么对于A主机来说,访问mysql服务只能通过ip:port的方式。
  • 对于B主机上程序来说,访问mysql服务除了通过localhost:port外,还可以通过socket文件方式。后者的好处是:如果通过mysql.conf更改mysql的服务端口,那么mysql服务重新启动时将生成新的socket文件,对于程序来说,不用做任何改变。而前者则需要改变程序中的端口设置。

另外,指定socket文件url一个例子:unix:///home/docker/docker.sock,其中unix://类似于tcp://,后面的大专栏  Linux中的一些点de class="highlighter-rouge">/home/docker/docker.sock表明socket文件的路径。

某些linux应用运行前,我们要为其配置监听的ip和端口,而支持sock文件后,我们只需为其配置sock文件即可,比如:

$ sudo /usr/bin/docker –d –H unix:///home/docker/docker.sock &

而docker client在访问docker daemon时,需要:

$ docker –H unix:///home/docker/docker.sock ps –a

rsync

负责进行文件同步的

rsync -vzrtopgu --delete dir_path1 dir_path2

注意,dir_path1中的改变都会被同步到dir_path2中,但是,如果dir_path2改变,并且dir_path2在命令中的先后顺序不变的话,其改变不会被同步到dir_path1中。也就是说,这种同步是单向的,以dir_path1为准。

source和. 命令##

有两种方法执行shell scripts:

  1. 一种是新产生一个shell,然后执行相应的shell scripts
  2. 一种是在当前shell下执行,不再启用其他shell

假设一文件file,文件内容为echo "test!!!!!!!!!!!!!!!!!!!!!":

  1. 没有可执行权限

1.1. ./file 输出Permission denied

1.2. . ./file 执行成功

1.3. source file 执行成功

  1. 具有可执行权限,file添加一行为a=test

2.1 ./file;echo $a 输出”test!!!!!!!!!!!!!!!!!!!!!”`,没有输出$a

2.2 . ./file;echo $a he source file;echo $a则都输出

./file中的点代表当前路径的意思,会产生一个新的子shell来执行file,也即file中如果设置环境变量,当前shell无法得到。子shell可以继承父shell的环境变量值。与此同时,file必须具有可执行权限。

. ./file中第一个点,代表source,第二个点代表当前路径。file不需要具备可执行权限,file中的所有指令将在当前shell中执行。也即如果file设置环境变量,当前shell也能感知到。

一次创建多个文件夹

mkdir -p /etc/confd/{conf.d,templates}

创建并管理自己的后台程序

/sbin/start-stop-daemon

inotifywait

监控某个文件或目录的改变

expect

进行自动化的人机交互,对于设定好的特定匹配形式,以相匹配的动作以应对。

测试某个远程主机的特定端口是否开放

  1. telnet

    在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。

    • 使用telnet操作192.168.56.153上的redis服务

        user@ubuntu:~$ telnet 192.168.56.153 6379
      Trying 192.168.56.153...
      Connected to 192.168.56.153.
      Escape character is '^]'.
      get name
      $3
      lqk
    • 直接在192.168.56.153上操作redis

        user@ubuntu:~$ redis-cli get name
      "lqk"
    • 退出telnet

      1. ctrl + ]
      2. telnet > quit // 回车
  2. 使用nc命令

     user@ubuntu:~$ nc -z 192.168.56.153 6379
    user@ubuntu:~$ echo $?
    0

    返回1 表示连接失败(或者说,端口没有开启)

引用

本地socket unix domain socket

让进程在后台可靠运行的几种方法


Linux中的一些点的更多相关文章

  1. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  2. Linux中find常见用法示例

    ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数: pathname: find命 ...

  3. Linux中检索文件

    1 , Use locate command It is a fast way to find the files location, but if a file just created ,it w ...

  4. 如何在Linux中搭建禅道8.4.1(httpd+php+mysql)

    1.安装httpd 命令:yum install httpd 然后一路y即可 2.安装php 命令:yum install php   3.安装php-mysql 命令:yum install php ...

  5. Linux中的用户和用户组

      在Linux中,有三种用户: Root 用户:也称为超级用户,对系统拥有完全的控制权限.超级用户可以不受限制的运行任何命令.Root 用户可以看做是系统管理员. 系统用户:系统用户是Linux运行 ...

  6. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  7. 在linux中设置静态ip地址

    在linux中设置静态ip地址1.在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.开始编辑,填写ip地址.子网掩码.网关.DNS等[root ...

  8. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  9. linux 中部署ant编译的包中缺少问题

    今天遇到在window上部署ant编译的包,能运行正常,但部署在linux中出现跳不进jsp中,出现404问题,后来经过排查在jsp中<%@taglib prefix="c" ...

  10. 在Linux中运行Nancy应用程序

    最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...

随机推荐

  1. 12 Spring Data JPA:springDataJpa的运行原理以及基本操作(下)

    spring data jpaday1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理 day2:springdatajpa的基本操作 ...

  2. JS面向对象,原型,继承

    ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript ...

  3. token获取在controller层中

    集合判断是否为空 注意:token获取在controller层中,token中存的所有数据都要在controller中获取 在自己的接口里调用别的接口需要判断一下返回值是否为空

  4. Postgresql的导表

    背景 前面已经介绍了常用的备份与恢复了,接下来介绍一下导表. 正文 很多情况,会有把数据导出的需求,轻重缓急总会有特别紧急的情况,但是又不是专业干db的人,还是记录下来,以防不时之需. 针对于导表,个 ...

  5. cygwin下命令行下切换目录

    比我们正常切换目录多个挂载的文件夹 cygdrive

  6. [Scoi2016]背单词(trie+贪心)

    题意:重新解释一下题意吧(题意晦涩难懂) 给定n个单词,你可以按照顺序学习,当学习这一单词时,这个单词是第x个要学习的单词,需要的代价分三类: 1.若存在其他单词是其后缀没被学习,则代价为n2 2.若 ...

  7. 添加头文件的报错failed to emit precompiled header 的解决办法

    在buildsetting中的以下两个路径中添加对应的设置,重现编译即可解决,stackoverflow地址:点击 Solution:1 I added $(inherited) non-recurs ...

  8. \_\_setitem\_\_和\_\_getitem和\_\_delitem__

    目录 __setitem__和__getitem和__delitem__ 一.__setitem__ 二.__getitem__ 三.__delitem__与__delattr__ 四.总结 __se ...

  9. Python笔记_第一篇_面向过程_第一部分_7.文件的操作(.txt)

    在平时,我们不光要对程序内的代码进行输入和输出的操作,还要对程序外的文件进行和语言之间的交换.操作和运算.在基础部分,先讲解对于外部的.txt文件的操作. 第一部分 基本内容讲解 1.   什么是文件 ...

  10. 函数(Python)

    函数是什么? 计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数 ...