linux经验总结(持续更新)

1. 单个进程打开的文件描述符最大值

默认是1024,可以通过ulimit -a查看所有的限制

ulimit -n 可以查看文件描述符最大值。

并可以通过ulimit -n 65535设置这一次会话的最大值。

2. 查看linux机器的连接数

netstat -est | grep established | grep -v packets

    1186 connections established

3. 生成动态链接库

gcc -fpic -shared -o mylib.so mylib.c
-fpic:输出的对象是地址可重定位的。

-shared:指定生成动态链接库。

使用动态链接库:

gcc -o libtst libtst.c /home/tst/mylib.so
或者吧mylib.so拷贝到/usr/lib/下,然后使用:

gcc -o libtst libtst.c -lmylib

4. 生成静态链接库

1)用gcc编绎该文件,可以使用任何合法的编绎参数       
gcc -c lib_test.c -o lib_test.o
2) $ar crv libtest.a lib_test.o   //生成静态库生成libtest.a
3) 在某些系统中还要为静态库生成一个内容表   $ranlib libtest.a
4) 使用静态链接库
        $nm libtest.a    //nm工具可以打印出库中的涉及到的所有符号,库既可以是静态的也可以是动态的。nm列出的符号有很多, 常见的有三种,一种是在库中被
                             调用,但并没有在库中定义(表明需要其他库支持),用U表示;一种是库中定义的函数,用T表示,这是最常见的;另外一种是所谓的"弱态”
                             符号,它们虽然在库中被定义,但是可能被其他库中的同名符号覆盖,用W表示。
$gcc -c -I/home/lib main.c //假设main.c要使用对应的静态库
$gcc -o main -L/home/lib main.o libtest.a
说明:这里的-I/home/lib和-L/home/lib是通过-I和-L指定对应的头文件和库文件的路径,libtest.a就是要用的静态库。在main.c中要包含静态库的头文件。

5. 彻底删除文件

一般,我们都是用rm来删除文件或文件夹,但是rm并不真的清空该文件所占用的数据块的内容,而只是释放了索引节点,所以可以通过一些恢复这些文件。有时,需要彻底删除文件,以释放空间,可以使用shred命令。
shred -u file_path
运行这个命令就可以彻底删除文件。

经过测试,shred这个命令在运行时很耗cpu。实际上,用rm就可以达到彻底删除文件,并释放空间的目的:

rm -rf file_path

这个命令就相当于windows下shift+delete。

还可以使用

> file_path
这样可以清空文件的内容

6. 查看CPU每个核的信息

使用top,然后按1,显示所有核的状态:

top - 00:18:57 up  1:17,  6 users,  load average: 0.48, 0.75, 1.36
Tasks: 200 total,   1 running, 199 sleeping,   0 stopped,   0 zombie
Cpu0  : 27.8%us,  2.7%sy,  0.0%ni, 60.2%id,  9.4%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 25.3%us,  3.7%sy,  0.0%ni, 71.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 28.7%us,  4.0%sy,  0.0%ni, 67.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  : 26.3%us,  2.7%sy,  0.0%ni, 71.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

7. 定时执行命令,观察输出

如果要持续执行一个命令,然后观察输出的话,我们一遍一遍的按上回车,然后看着输出。watch命令可以很好的实现这个功能。比如,要监控linux的连接数:

watch -n 2 -d 'netstat -est | grep est'
输出:

Every 2.0s: netstat -est | grep est                                                                                              Mon Mar 19 10:46:03 2012

    12784 connections established
    556 packets rejects in established connections because of timestamp
    2015 congestion windows fully recovered without slow start
    9672 congestion windows partially recovered using Hoe heuristic
    20983 congestion windows recovered without slow start by DSACK
    22010 congestion windows recovered without slow start after partial ack
-n指定命令执行的时间间隔,-d高亮显示连续两侧输出的差别,为了便于观察,最后一个参数是要执行的命令。

8. ubuntu下配置ssh服务

安装openssh-server:

apt-get install openssh-server
启动命令:

1. service ssh start
2. /etc/init.d/ssh start
第一种是推荐的方式。

9. 查看cpu和内核信息

a. 查看os内核信息

uname -a
Linux vyz20242 2.6.32-5-xen-amd64 #1 SMP Tue Jun 14 12:46:30 UTC 2011 x86_64 GNU/Linux

b. 操作系统发行版本信息

cat /etc/issue | grep Linux
Debian GNU/Linux 6.0 \n \l

c. linux内核版本

cat /proc/version
Linux version 2.6.32-5-amd64 (Debian 2.6.32-41squeeze2) ([email protected]) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Thu Mar 22 17:26:33 UTC 2012

10. 查看系统页大小

getconf PAGESIZE

11. 获取线程id

#include <sys/syscall.h>
#define gettid()   syscall(__NR_gettid) 


12. ssh失败:ssh_exchange_identification: Connection closed by remote host

主要是/etc/hosts.allow和/etc/hosts.deny配置错误,修改配置后,执行

service sshd restart


你可能感兴趣的:(linux经验总结(持续更新))