linux msg shell ssh

大家好,如果您还对linux msg不太了解,没有关系,今天就由本站为大家分享linux msg的知识,包括shell ssh的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

Linux kernel log-1-printk和demsg

printk是Linux内核中用于日志输出的函数,其主要功能包括记录信息到日志中和调用控制台驱动将信息输出。printk的实现定义在linux/printk.h文件中。

printk在使用时需要设置日志级别,用于控制输出信息是否在终端上显示。如果设置的日志级别高于控制台级别,则信息才会在控制台上显示。内核日志共有8种级别,包括emergency、alert、critical、error、warning、notice、info和debug。

控制台级别的设置可通过命令cat/proc/sys/kernel/printk查看,其中的4 4 1 7分别对应console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel。默认消息日志级别为4,即KERN_WARNING。因此,printk("hello world")等同于printk(KERN_WARNING"hello world")。如果将控制台级别设成/proc/sys/kernel/printk,则printk("hello world")将无法输出到控制台。

修改控制台级别的方法除了通过修改命令行参数外,还可以通过修改bootargs来设定。例如在Uboot中修改“console=ttyS0,115200”为“loglevel=7 console=ttyS0,115200”,表示设置内核的console_loglevel值为7。

printk支持带时间戳的日志输出,可以通过make menuconfig开启此功能。

printk的相关函数在linux/prink.h文件中实现,包括pr_emerg到pr_info等基本的内核打印函数,以及pr_debug,它有三种输出方式,当开启dynamic_debug后,则走dynamic_pr_debug流程,当用户开启了DEBUG宏,则走printk流程,否则什么都不打印。

dmesg命令是从kernel ring buffer中读取内核日志信息,开机信息也保存在/var/log目录中名为dmesg的文件里。dmesg命令可以用来查看内核日志。通过dmesg-n也可以设置控制台打印级别。在调试内核驱动时,如果内核出现panic或死锁,导致无法敲命令查看日志,可以使用后台进程将日志导入到文件中。

linux shell 脚本实现tcp/upd协议通讯

linux设备里面有个比较特殊的文件:

/dev/[tcp|upd]/host/port只要读取或者写入这个文件,相当于系统会尝试连接:host这台机器,对应port端口。如果主机以及端口存在,就建立一个socket连接。将在,/proc/self/fd目录下面,有对应的文件出现。

一、测试下:/dev/tcp/host/post文件

复制代码

   

代码如下:

[chengmo@centos5 shell]$ cat/dev/tcp/127.0.0.1/22

   SSH-2.0-OpenSSH_5.1

   #我的机器shell端口是:22

   #实际:/dev/tcp根本没有这个目录,这是属于特殊设备

   [chengmo@centos5 shell]$ cat/dev/tcp/127.0.0.1/223

   -bash: connect:拒绝连接

   -bash:/dev/tcp/127.0.0.1/223:拒绝连接

   #223接口不存在,打开失败

   [chengmo@centos5 shell]$ exec 8/dev/tcp/127.0.0.1/22

   [chengmo@centos5 shell]$ ls-l/proc/self/fd/

   总计 0

   lrwx------ 1 chengmo chengmo 64 10-21 23:05 0-/dev/pts/0

   lrwx------ 1 chengmo chengmo 64 10-21 23:05 1-/dev/pts/0

   lrwx------ 1 chengmo chengmo 64 10-21 23:05 2-/dev/pts/0

   lr-x------ 1 chengmo chengmo 64 10-21 23:05 3-/proc/22185/fd

   lrwx------ 1 chengmo chengmo 64 10-21 23:05 8- socket:[15067661]

   #文件描述符8,已经打开一个socket通讯通道,这个是一个可以读写socket通道,因为用:""打开

   [chengmo@centos5 shell]$ exec 8-

   #关闭通道

   [chengmo@centos5 shell]$ ls-l/proc/self/fd/

   总计 0

   lrwx------ 1 chengmo chengmo 64 10-21 23:08 0-/dev/pts/0

   lrwx------ 1 chengmo chengmo 64 10-21 23:08 1-/dev/pts/0

   lrwx------ 1 chengmo chengmo 64 10-21 23:08 2-/dev/pts/0

   lr-x------ 1 chengmo chengmo 64 10-21 23:08 3-/proc/22234/fd

二、通过重定向读取远程web服务器头信息

复制代码

   

代码如下:

#!/bin/sh

   #testhttphead.sh

   #实现通过主机名,端口读取web服务器header信息

   #copyright chengmo,qq:8292669

   if(($#2));then

   echo"usage:$0 host port";

   exit 1;

   fi

   #如果参数缺失,退出程序,返回状态1

   exec 6/dev/tcp/$1/$2 2/dev/null;

   #打开host的port可读写的socket连接,与文件描述符6连接

   if(($?!=0));then

   echo"open$1$2 error!";

   exit 1;

   fi

   #如果打开失败,$?返回不为0,终止程序

   echo-e"HEAD/ HTTP/1.1/n/n/n/n/n"6;

   #将HEAD信息,发送给socket连接

   cat6;

   #从socket读取返回信息,显示为标准输出

   exec 6-;

   exec 6-;

   #关闭socket的输入,输出

   exit 0;

脚本建立后:存为testhttphead.sh

运行结果:

复制代码

   

代码如下:

[chengmo@centos5~/shell]$ sh testhttphead.sh www.baidu.com 80

   HTTP/1.1 200 OK

   Date: Thu, 21 Oct 2010 15:17:23 GMT

   Server: BWS/1.0

   Content-Length: 6218

   Content-Type: text/html;charset=gb2312

   Cache-Control: private

   Expires: Thu, 21 Oct 2010 15:17:23 GMT

   Set-Cookie: BAIDUID=1C40B2F8C676180FD887379A6E286DC1:FG=1; expires=Thu, 21-Oct-40 15:17:23 GMT; path=/; domain=.baidu.com

   P3P: CP=" OTI DSP COR IVA OUR IND COM"

   Connection: Keep-Alive

   [chengmo@centos5~/shell]$ sh testhttphead.sh 127.0.0.1 8080

   open 127.0.0.1 8080 error!

突然有个奇怪想法:

我们在windows时代就通过telnet可以实现tcp/upd协议通讯,那么如果用传统方法怎么实现呢?

复制代码

   

代码如下:

[chengmo@centos5~/shell]$ echo-e"HEAD/ HTTP/1.1/n/n/n/n/n"|telnet www.baidu.com 80

   Trying 220.181.6.175...

   Connected to www.baidu.com.

   Escape character is'^]'.

   Connection closed by foreign host.

   #直接给发送,失败

   [chengmo@centos5~/shell]$(telnet www.baidu.com 80)EOF

   HEAD/ HTTP/1.1

   EOF

   Trying 220.181.6.175...

   Connected to www.baidu.com.

   Escape character is'^]'.

   Connection closed by foreign host.

   #重定向输入,还是失败?

找到正确方法:

复制代码

   

代码如下:

[chengmo@centos5 shell]$(echo-e"HEAD/ HTTP/1.1/n/n/n/n/n";sleep 2)|telnet www.baidu.com 80

   Trying 220.181.6.175...

   Connected to www.baidu.com.

   Escape character is'^]'.

   HTTP/1.1 200 OK

   Date: Thu, 21 Oct 2010 15:51:58 GMT

   Server: BWS/1.0

   Content-Length: 6218

   Content-Type: text/html;charset=gb2312

   Cache-Control: private

   Expires: Thu, 21 Oct 2010 15:51:58 GMT

   Set-Cookie: BAIDUID=0B6A01ACECD5353E4247E088A8CB345A:FG=1; expires=Thu, 21-Oct-40 15:51:58 GMT; path=/; domain=.baidu.com

   P3P: CP=" OTI DSP COR IVA OUR IND COM"

   Connection: Keep-Alive

   #成功了!加入sleep居然可以了,sleep改成1秒也可以

是不是由于sleep后,echo会推出2秒发给通道:telnet呢?推论可以从这2个方面推翻:

一个方面:通过()括的数据是一对命令,会作为一个子命令执行,一起执行完程序结束。每个命令echo语句,就直接发送到屏幕(也就是标准输出),只要有标准输出了,就会通过通道马上传个:telnet,如果接下来命令还有输出,会注意传给telnet,直到()内所有命令执行完,与通道连接就断开了。

再一个方面:如果说是起到推迟发送的话,什么时候有数据过来,发给telnet,什么时候telnet命令启动。跟你推迟一点还是早一点发送过来。没有关系。

这种类型命令,看出sleep,其实就是保持通道跟telnet连接2秒钟。通道连接着了,telnet终端输入也还在,因此可以保持从baidu服务器获得数据。

所以,延迟多久,还是跟服务器处理速度有关系。

如果通过echo向telnet发送数据,保持通道联通,使用sleep是个很好方法。

通过重定向给telnet输入参数这种方法,我还想不到怎么样实现延迟输入。有知道朋友,可以指点指点.

区别:

telnet与echo实现 http访问,与通过打开读写socket是不一样的,打开socket通道,是可以进行交换处理的。传入命令,活动结果,再传入命令,再获得结果。telnet通过echo就不能这样处理了。

三、通过shell脚本重定向实现监控memcache状态

复制代码

   

代码如下:

#!/bin/sh

   #通过传入ip以及端口,发送指令获得返回数据

   #copyright chengmo qq:8292669

   #函数往往放到最上面

   function sendmsg()

   {

   msg=$1;

   echo"$1"8;

   getout;

   }

   #向socket通道发送指令,并且调用获得返回参数

   function getout()

   {

   #read命令-u从打开文件描述符 8读取数据,-d读取数据忽略掉:/r换行符

   while read-u 8-d$'/r' name;

   do

   if ["${name}"=="END"-o"${name}"=="ERROR" ];then

   break;

   fi;

   echo$name;

   done

   }

   #由于:memcached每次通讯完毕,会返回:END或者ERROR(出错),通过判断是否是"END"觉得读取是不是结束,否则循环不会停止

   if [$#-lt 2 ];then

   echo"usage:$0 host port [command]";

   exit 1;

   fi;

   [[$#-gt 2 ]]command=$3;

   #设置默认值如果command为定义则为:stats

   command="${command=stats}";

   host="$1";

   port="$2";

   exec 8/dev/tcp/${host}/${port};

   #打开通向通道是8

   if ["$?"!="0" ];then

   echo"open$host$port fail!";

   exit 1;

   fi

   sendmsg"$command";

   #发送指定命令

   sendmsg"quit";

   #发送退出通向命令

   exec 8-;

   exec 8-;

   #关闭socket通道

   exit 0;

这是通过重定向,实现socket通讯中,发送然后获取返回的例子。其实,上面代码看似一次只能发送一段。时间上。我们可以反复调用:sendmsg,捕捉输出数据。实现连续的,读与写操作。

实例截图:

其它实现方法:

其实通过:telnet也可以实现的。

[chengmo@centos5 shell]$(echo"stats";sleep 2)|telnet 127.0.0.1 11211

通过nc命令实现:

[chengmo@centos5 shell]$(echo"stats")|nc 127.0.0.1 11211

不需要加延迟,直接打开通道

第二个程序里面,看到shell完全可以处理交互设计了。如果按照这样,登陆ftp,pop3,stmp都可以类似实现。这些,我们通过shell socket类似程序实现,应该不困难,只是捕捉如发送解析的问题了。

用来获取Linux主机信息的5个常用命令

有些时候Linux系统管理员在接手一台新的服务器时,如果没有好的交接文档,我们想要得到的主机信息就只能靠自己了。很多主机信息是可以直接通过命令从主机上获得的,本文就与大家分享 5个获取 Linux主机信息的命令。

此处以Ubuntu 13.04操作系统为例。

1.查看或改变 Linux主机名的命令

复制代码代码如下:$ hostname

mylinuxbook-Inspiron-1525

从命令结果上您可以看到我的 Ubuntu主机名是 mylinuxbook-Inspiron-1525。您可能会注意到,主机名通常也出现在命令提示符下,所以很多时候我们将主机名改短一些可能会更方便使用。

通过如下命令来改变它:

复制代码代码如下:$ sudo hostname mylinuxbook

注意,改变主机名需要 root权限,所以我在上面使用了 sudo命令来提升权限。如果您执行了上面的命令,那么您可以立即打开一个新的终端,在终端中您就能查看到您新的主机名,同时您会看到新的名称的命令提示符。

不过通过这个命令修改的主机名是一个临时功能,一旦您重启您的服务器,这个名称将不会存在。如果您需要永久的修改主机名,那么您需要修改/etc/hostname文件。

2. host命令

这个命令可以让您来查看主机的 IP信息,

复制代码代码如下:$ host google.com

google.com has address 74.125.236.72

google.com has address 74.125.236.78

google.com has address 74.125.236.73

google.com has address 74.125.236.71

google.com has address 74.125.236.65

google.com has address 74.125.236.69

google.com has address 74.125.236.66

google.com has address 74.125.236.64

google.com has address 74.125.236.67

google.com has address 74.125.236.68

google.com has address 74.125.236.70

google.com has IPv6 address 2404:6800:4007:801::1004

google.com mail is handled by 10 aspmx.l.google.com.

google.com mail is handled by 20 alt1.aspmx.l.google.com.

google.com mail is handled by 30 alt2.aspmx.l.google.com.

google.com mail is handled by 40 alt3.aspmx.l.google.com.

google.com mail is handled by 50 alt4.aspmx.l.google.com.

从命令的运行结果我们可以看到主机的 IP(IPV4和 IPV6)以及邮件服务器相关的信息。

如果您还想查看 DNS记录,可以使用-a参数

复制代码代码如下:$ host-a google.com

Trying"google.com"

;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34210

;; flags: qr rd ra; QUERY: 1, ANSWER: 21, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;google.com. IN ANY

;; ANSWER SECTION:

google.com. 211 IN AAAA 2404:6800:4007:800::1009

google.com. 299 IN MX 10 aspmx.l.google.com.

google.com. 299 IN MX 50 alt4.aspmx.l.google.com.

google.com. 299 IN MX 20 alt1.aspmx.l.google.com.

google.com. 299 IN MX 30 alt2.aspmx.l.google.com.

google.com. 299 IN MX 40 alt3.aspmx.l.google.com.

google.com. 267 IN A 74.125.236.168

google.com. 267 IN A 74.125.236.165

google.com. 267 IN A 74.125.236.166

google.com. 267 IN A 74.125.236.167

google.com. 267 IN A 74.125.236.164

google.com. 267 IN A 74.125.236.174

google.com. 267 IN A 74.125.236.163

google.com. 267 IN A 74.125.236.169

google.com. 267 IN A 74.125.236.162

google.com. 267 IN A 74.125.236.161

google.com. 267 IN A 74.125.236.160

google.com. 136467 IN NS ns3.google.com.

google.com. 136467 IN NS ns1.google.com.

google.com. 136467 IN NS ns4.google.com.

google.com. 136467 IN NS ns2.google.com.

Received 412 bytes from 127.0.1.1#53 in 30 ms

如果您需要查看域名服务器或者 SOA信息,可以使用-C参数

复制代码代码如下:$ host-C google.com

Nameserver 216.239.38.10:

google.com has SOA record ns1.google.com. dns-admin.google.com. 2013061800 7200 1800 1209600 300

Nameserver 216.239.34.10:

google.com has SOA record ns1.google.com. dns-admin.google.com. 2013061800 7200 1800 1209600 300

Nameserver 216.239.36.10:

google.com has SOA record ns1.google.com. dns-admin.google.com. 2013061800 7200 1800 1209600 300

Nameserver 216.239.32.10:

google.com has SOA record ns1.google.com. dns-admin.google.com. 2013061800 7200 1800 1209600 300

或者您可以使用-d或者-v参数来输出详细信息

复制代码代码如下:$ host-v google.com

Trying"google.com"

;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52674

;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;google.com. IN A

;; ANSWER SECTION:

google.com. 77 IN A 74.125.236.40

google.com. 77 IN A 74.125.236.38

google.com. 77 IN A 74.125.236.34

google.com. 77 IN A 74.125.236.37

google.com. 77 IN A 74.125.236.36

google.com. 77 IN A 74.125.236.41

google.com. 77 IN A 74.125.236.35

google.com. 77 IN A 74.125.236.33

google.com. 77 IN A 74.125.236.46

google.com. 77 IN A 74.125.236.32

google.com. 77 IN A 74.125.236.39

Received 204 bytes from 127.0.1.1#53 in 33 ms

Trying"google.com"

;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31473

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;google.com. IN AAAA

;; ANSWER SECTION:

google.com. 28 IN AAAA 2404:6800:4007:800::1002

Received 56 bytes from 127.0.1.1#53 in 28 ms

Trying"google.com"

;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2871

;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;google.com. IN MX

;; ANSWER SECTION:

google.com. 13 IN MX 40 alt3.aspmx.l.google.com.

google.com. 13 IN MX 50 alt4.aspmx.l.google.com.

google.com. 13 IN MX 10 aspmx.l.google.com.

google.com. 13 IN MX 20 alt1.aspmx.l.google.com.

google.com. 13 IN MX 30 alt2.aspmx.l.google.com.

Received 136 bytes from 127.0.1.1#53 in 29 ms

这个命令可以让您获得大量的主机信息。

3. Arch命令

这个命令可以让您得到系统的处理器系统构架信息:

复制代码代码如下:$ arch

x86_64

从命令执行结果来看,我的主机是 64位的 x86系列处理器。

4. uname命令

上面的 arch只能得到系统的简单信息,如果想得到更多的信息,我们就需要使用 uname命令了,uname命令可以获取到操作系统名称、内核名称、内核版本、主机名、网络节点等信息。

使用-o参数来查看操作系统名称:

复制代码代码如下:$ uname-o

GNU/Linux

使用-s参数来查看内核名称:

复制代码代码如下:$ uname-s

Linux

使用-m参数来查看系统构架信息,这个参数的得到的结果和上面的 arch是一样的:

复制代码代码如下:$ uname-m

x86_64

还有如下命令您可以试一试:

复制代码代码如下:$ uname-n

linuxuser-laptop

复制代码代码如下:$ uname-r

2.6.32-21-generic

复制代码代码如下:$ uname-v

#33-Ubuntu SMP Fri Apr 18 08:09:38 UTC 2011

5. dig命令

dig命令是 DNS查看工具,使用此命令可以查看域名服务器的主机地址

复制代码代码如下:$ dig google.com

;<>> DiG 9.9.2-P1<>> google.com

;; global options:+cmd

;; Got answer:

;;->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40090

;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;google.com. IN A

;; ANSWER SECTION:

google.com. 227 IN A 74.125.236.33

google.com. 227 IN A 74.125.236.38

google.com. 227 IN A 74.125.236.46

google.com. 227 IN A 74.125.236.40

google.com. 227 IN A 74.125.236.32

google.com. 227 IN A 74.125.236.37

google.com. 227 IN A 74.125.236.34

google.com. 227 IN A 74.125.236.35

google.com. 227 IN A 74.125.236.41

google.com. 227 IN A 74.125.236.39

google.com. 227 IN A 74.125.236.36

;; Query time: 30 msec

;; SERVER: 127.0.1.1#53(127.0.1.1)

;; WHEN: Sat Jun 22 15:38:58 2013

;; MSG SIZE rcvd: 215

阅读剩余
THE END