Linux九阳神功

来源:互联网 发布:武林群侠传2单机版mac 编辑:程序博客网 时间:2024/04/30 04:38

Linux九阳神功


宗旨:技术的学习是有限的,分享的精神是无限的。

一、基础命令:

1.用户管理类命令

(1)useradd libang 添加用户 —— 在home目录下生成同级的目录

(2)userdel -r libang 删除用户

(3)passwd libang 修改密码

(4)su -root 切换到root用户,并将root用户的环境变量同时带入

(5)groupadd group 添加名为group的用户组

(6)groupdel group 删除名为group的用户组

注意:

    adduser创建帐号的同时,要求用户输入密码

    useradd需要在创建帐号后,自行创建密码passwd

 

2.文件与目录类命令

(1)ls 查看目录 (ls [选项] 目录或文件)

    ls /home 显示/home目录下的文件与目录(不包含隐藏的)

    ls -a /home 显示/home目录下的文件与目录(包含隐藏的)

    ls -l /home 显示/home目录下的文件与目录的详细信息

(2)cd 改变工作目录(cd 目录名)

    cd /home/ 进入/home目录

    cd ..退回到上一级目录

    cd ~ 进入用户主目录

    cd - 代表前一个工作目录

    ctrl+h 显示当前目录下的隐藏文件

(3)cp 复制文件/目录 (cp [选项] 源文件或目录目标文件和目录)

    cp /home/test /tmp 将/home目录下的test文件拷贝到/tmp目录下

    cp -r /home/dir1 /tmp 将/home目录下的dir1目录拷贝到/tmp目录下

(4)mv 移动或改名(mv [选项] 源文件或目录 目标文件或目录)

    mv /home/test /home/test1 将/home目录下的test文件更名为test1

    mv /home/dir1 /tmp 将/home目录下的dir1目录移动到/tmp目录下

(5)rm 删除文件/目录 (rm [选项] 文件或目录)

    rm /home/test 删除/home目录下的test文件

    rm -r /home/dir 删除目录下的dir目录

(6)chmod 改变文件权限(chmod +x test.txt)

    chmod 777 test.txt 可读可写可执行

(7)mkdir 创建目录(mkdir [选项] 目录名)

    mkdir /home/workdir 在/home目录下创建workdir目录

    mkdir -p /home/dir1/dir2/dir3  依次创建

(8)du 查看目录 (du 目录名)

    du /tmp

(9)pwd 查看当前路径

(10)echo 显示字符串变量等

 

3.压缩打包类命令

*.gz——gzip命令压缩的文件

*.bz2——bzip2命令压缩的文件

*.tar——tar命令打包的文件

*.tar.gz——tar打包后,再经过gzip压缩的文件

*.tar.bz2——tar命令打包后,再经过bzip2压缩的文件 (tar xjvf *.tar.bz2)

(1)gzip 压缩解压(gzip [选项] 文件名)

    gzip /root/anaconda-ks.cfg 压缩文件

    gzip -d /root/anaconda-ks.cfg.gz 解压文件

(2)bzip2 压缩解压(bzip2 [选项] 文件名)

    bzip2 /root/anaconda-ks.cfg 压缩文件

    bzip2 -d /root/anaconda-ks.cfg.bz2 解压文件

    tar xjvf name.bz2

(3)tar 打包压缩(tar [选项] 目录或者文件)

    tar cvf tmp.tar /tmp 将/tmp目录打包为一个文件

    tar xvf tmp.tar 将打包文件解开

    tar cvzf tmp.tar.gz /tmp 将tmp目录打包为一个文件

(4)tar xzvf tmp.tar.gz 将打包文件解开

注意:1 gzip不能压缩目录,只能压缩文件

     2 压缩和打包,解压缩和解包是不同的过程

     3 gzip压缩或者解压后,原文件不再存在;bzip2提供了-k参数,可以保留原文件

     4 windows对文件压缩,其实是先打包在压缩的过程

 

4.磁盘管理类命令

(1)mount 加载光盘(mount [选项] 类型 设备名 挂载目录)

    mount /dev/csrom /mnt

    mount -t iso9660 /dev/cdrom /mnt/cdrom

    类型:

       windows95/98的FAT32系统   vfat

       winNT/2000    ntfs

       CD-ROM        iso9660      

(2)umount 卸载光盘(umount 挂在目录)

    umount /mnt (请在执行umount前,保证用户已经推出了mnt目录)

(3)df 查看磁盘总容量,已用容量(df [选项])

    df -hl

    du 查看文件已用容量

    du -h ————针对目录

(4)touch 创建新文件

    touch newfile 创建一个名为newfile的空白文件

(5)ln 文件链接(ln [选项] 文件名 链接名)

    ln oldfile hlink 为oldfile文件创建一个应链接hlink

    ln -s oldfile slink 为oldfile文件创建一个软链接slink

    硬链接和软链接的区别:

(6)fdisk 查看硬盘分区情况

    fdisk -l ————拥有root权限

 

5.查找类命令

(1)find 查找文件/目录 (find 查找路径 -name文件名)

    find /root -name install.log 在root目录下寻找名为install.log文件

(2)grep 查找字符(grep "字符串" 路径 [选项])

    grep "hello" ./ -rn 在当前路径下寻找包含字符串"hello"的文件

 

6.进程管理类命令

(1)ps 查看进程(ps [选项])

    ps aux

(2)kill 杀死进程(kill [选项] pid)

    vim hello.c

    ps aux

    kill pid (hello.c的进程号)

(3)free 查看内存

    free

(4)top CPU占有率(top [选项])

    top 动态显示进程

(5)pstree 以树形式打印进程

(6)tree 以树形式打印当前目录

(7)jobs 查看后台进程和它的作业号

    fg %1  1为作业号,调到 前台运行

    ctrl+z 正在执行的进程放在后台,并停止

    bg %1  1为作业号,把后台停止的作业改成 后台运行

    多个命令的同时执行时,只要将它们用分号隔开即可。

 

7.杂项命令大聚合

(1)代码风格

    indent [options] [input-files]

    indent [options] [single-input-file] [-ooutput-file]

    indent -kr -bl -bli0 test.c

    -kr表示K&R风格

    -i8表示缩进8个空格的长度

    -l80表示一行最多80个字符

    没有指定-nut选项,则每8个缩进空格会自动用一个Tab代替

(2)| 管道操作 (命令1 | 命令2)

    rpm -qa|grep tar 查询系统中安装的所有软件包,并从中找出带有字符串"tar"的

(3)man   info --help查看帮助 (man 命令名)

    man find 查看find命令的用法

4)shutdown关闭linux系统 (shutdown [选项] 时间) 

    shutdown -h 18:00

    立即关机:shutdown now   init 0   halt

    重启:init6   reboot   shutdown -r

(5)date+%Y/%m/%d 显示年月日

     date +%H:%M 显示小时和分钟 (/和:可以用其他符号代替)

     cal [[month] year]

(6)将一般用户改为sudo用户

    sudo vim /etc/group

    找到类似这样的一行: sudo:x:27:icawu,sir

    在第4列后面加入一般账户的名字即可,“,”后不要空格

    或者是/etc/sudoers root ALL=(ALL) ALL 在起下面添加xxxALL=(ALL) ALL(这里的xxx是你的用户名)

(7)od[-t TYPE] 档案

    -t :后面可以接各种类型 (TYPE)癿输出,例如:

    a :利用默认的字符输出;

    c :使用ASCII 字符输出

    d[size] :利用十进制(decimal)输出数据,每个整数占用size bytes ;

    f[size] :利用浮点数(floating)输出数据,每个数占用size bytes ;

    o[size] :利用八进制(octal)输出数据,每个整数占用size bytes ;

    [size] :利用十六进制(hexadecimal)输出数据,每个整数占用 size

    例如: hello文件的内容 3210o

    od -tx1 -tc hello  //可以有多个选项,注意1的效果(每1个字节隔开)

    0000000 33  32  31 30  6f  0a

            3  2   1   0  o  \n

(8)内核相关

    uname -arsmpi

    -a :所有系统相关癿信息,包括底下的数据都会被列出来;

    -s :系统核心名称

    -r :核心的版本

    -m :本系统癿硬件名称,例如 i686 戒 x86_64 等;

    -p :CPU的类型,与-m 类似,只是显示的是 CPU的类型!

    -i :硬件的平台 (ix86)

    应用:cd /usr/src/'uanme -r'/include/linux/fs.h

    此句在里ubuntu13.04中不可,linux-headers-3.8.0-19

    lsmod 查看已加载内容

    lshw  当前硬件信息

    xrandr 查看当前分辨率  (xrandr -s 7(第几行)

(9)cat显示文本文件内容 (cat /etc/issue)

     more 分页显示文本文件内容  ——只能向下翻页

     less 分页显示文本文件内容  ——可以上下翻页

     head 显示文件首部内容   (head -5 /etc/passwd)

     tail 显示文件尾部内容

    cat /etc/passwd | more/less/head -5/tail -5

(10)which 查看可执行文件的位置

    which which

      whereis 查看文件位置(全匹配查找)

    whereis which

      locate 配合数据库查看文件位置 (局部匹配查找)

    locate ls

(11)信息查看

    dmesg 显示系统的启动信息 (保存在/etc/sysconfig)

    uptime 关于系统相关的时间信息

    who 查看当前系统用户 (whoami 只查看当前用户)

    last 系统用户登录信息 (/var/log名为wtmp文件里)

    hostname 域名

    bc 计算器

(12)ubuntu专题:

  <1> apt命令用法: (在ubuntu下可用,redhat不可用)

    apt-get update  升级源

    apt-get install 安装新软件包

    apt-get remove 卸载已安装的软件包

    apt-get clean  清理系统,不影响安装的软件的使用

    apt-get upgrade 更新任何已安装的软件包

    apt-get dist-upgrade 系统升级到新版本

    apt-get search 查找软件包

    dpkg-config-list-all (dpkg -l)列出所有软件包

 

    sudo apt-get install nautinuls-open-terminal(当前位置代开终端) ---重启生效

    sudo apt-get autoremove indicator-appmenu  (关闭全局应用菜单)

 

  <2> ubuntu下的几个重要文件:

    (1) 软件源:/etc/apt/sources.list

    (2) $PATH:/etc/environment

    (3) 环境变量:/etc/profile

    (4) grub:/boot/grub/grub.cfg

    (5) 用户bash:/home/.bashrc(注意以.开头的文件属于隐藏文件,用ctrl+h可以显示)

 

  <3> system setting没有语言支持: sudo apt-get install language-selector-gnome

  <4> 虚拟机中VMwareTools的安装

    (1)、下载vmwaretools工具包:http://download.csdn.net/download/jiaoxiaogu/6287937

    (2)、解压并安装:

    - $ tar xzf VMwareTools-9.6.0-1294478.tar.gz

    - $ cd vmware-tools-distrib

    - $ sudo ./vmware-install.pl

    一直按回车键

    (3)、重启虚拟机

 <5> GNU二进程工具 (对ARM很重要,务必要了解)---redhat/ubuntu

    addr2line:把程序地址转换为文件名和行号ar:建立、修改、提取归档文件

    as:主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由链接器ld连接

    c++filt:连接器使用它来过滤C++ 和Java 符号,防止重载函数冲突

    ld:GNU链接器

    nm:列出目标文件中的符号

       R--只读符号  N--调试符号  D--已经初始化的变量  T--text段的符号

       U--未定义的符号  S--未初始化的符号

    objcopy:文件格式转换 

    objdump:显示一个或者更多目标文件的信息,主要用来反编译 

    ranlib:产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件

    readelf:显示elf格式可执行文件的信息  readelf -a a.out

    size:列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出  size a.out

    strings:打印某个文件的可打印字符串。默认情况下,只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助  strings -f/a hello.o

    strip:丢弃目标文件中的全部或者特定符号,减小文件体积  strip -s a.out

 

<6>windows和ubuntu文件共享之samba服务器配置

    关闭LINUX防火墙命令: #ufw disable  然后就在windows下ping一下linux的IP,如果能ping通,就可以继续下面的内容,如果ping不通就再找找原因

    注:ubuntu12.04已经安装了最新版本的samba服务器,无需安装。如果使用12.04以前的版本,最好是按下边的方法升级一下samba,12.04版本无需下列操作

    卸载samba,smbclient,samba-common

    $sudo apt-get remove samba-common

    $sudo apt-get remove smbclient

    $sudo apt-get remove samba

 

    安装Ubuntusamba服务器:

    sudo apt-get install samba

    sudo apt-get install smbfs

 

    安装Ubuntusamba图形管理界面

    #sudo apt-get install system-config-samba

 

    启动samba图形管理界面

    #sudo system-config-samba

    选择要共享的目录 设置读写权限 设置访问权限添加samba用户

    配置完成后要重启samba

    #sudo /etc/init.d/smbd restart

(13)Elf格式文件

    GNU编译器生成的目标文件缺省为elf格式

    elf文件由若干段(section)组成;目标代码中包含如下段:

    .text:    包含程序的指令代码、固定的数据,如常量、字符串;

    .data:    包含有初始化值的变量、数组等;

    .bss: 包含未初始化的变量、数组等;

    连接器的任务就是将多个目标文件的.text、.data和.bss等段连接在一起

 

 

二、vim编辑器的使用与配置 参考:http://blog.csdn.net/wqx521/article/details/37913877

    1.常用编辑器:

       (1) vi/vim 最常用的字符界面文本编辑器

       (2) emacs 专为编辑程序源码文件而编写的文本编辑器

       (3) nano  字符界面底端

       (4) gedit 运行在Linux图形界面中

           gedit之乱码问题

            <1> 运行dconf-editor

            <2> 展开/org/gnome/gedit/preferences/encodings

            <3> auto-detected的Value中加入'GB2312' ,加在UTF-8前面;

       (5) MC

   2.开发环境构成:

       (1) 编辑器:vi/vim

       (2) 编译器:gcc

       (3) 调试器:gdb

       (4) 函数库:glibc    /usr/lib

       (5) 系统头文件:glibc_header   /usr/include

 

三、Linux网络配置 (vmware workstation虚拟机)

    1.VMware提供了三种网络工作模式:

       (1).bridged(桥接模式)—— 提供做个IP地址

       (2).NAT(网络地址转换模式)——只能提供一个IP地址

       (3).host-only(主机模式)——主机没有连接任何外部网络

    2.注意事项:

       (1).选择网络模式前,停止虚拟机中系统的运行

       (2).配置完网络后,重新启动虚拟机中的系统

   

    3.相关命令

       (1) ifconfig:查看各网卡详细信息(如IP),以太网卡名一般为"eth0"

       (2) /etc/init.d/networking restart 重启各网卡

   

    4.Linux常见网络接口

       -eth0:系统中的第一块物理网卡

       -lo:虚拟的回环网卡

        -virbr0:网络网桥

 

四、远程登录

    1.登录前提

       (1) 从windows能够ping通linux(在ctrl+R--cmd--pingIP地址(在linux里面用ifconfig看IP地址))

       (2) 关闭Linux防火墙——ufw disable (ubuntu)

     

    2.putty-SSH软件,设置相关信息.软件下载地址:http://download.csdn.net/detail/a1314521531/7877905

    3.VNC

       (1) 安装vnc服务器

       (2) 启动vnc服务:vncserver &

    <或者3.在windows端运行vnc.exe>

    VNC常见问题:windows不能ping通linux  未关闭防火墙

 

五、Windows与Linux文件共享(redhat)

    1.前提条件

       (1) 从windows能够ping通linux(在ctrl+R--cmd--pingIP地址(在linux里面用ifconfig看IP地址))

       (2) 关闭Linux防火墙——/etc/init.d/iptables stop (redhat) ufw disable (ubuntu)

    2.WinSCP软件(windows中)

       自己摸索一下这个软件的使用吧,就是把文件拖进拖出

 

    Vmware Tools不推荐使用

 

    Windows与Linux文件共享(ubuntu)

    1.前提条件

       (1) 从windows能够ping通linux(在windows+R--cmd--pingIP地址(在linux里面用ifconfig看IP地址))

       (2) 物理机和虚拟机建立通信——sudo apt-get install ssh    ps-e |grep ssh    /etc/init.d/ssh start--启动ssh服务器

    2.WinSCP软件(windows中)

       自己摸索一下这个软件的使用吧,就是把文件拖进拖出

 

六、Linux密码故障解决

破解root密码步骤:

    (1) 在系统启动时进入grub选项菜单

    (2) 在grub选项菜单按e进入编辑模式

    (3) 编辑kernel那行,添加/init 1

    (4) 按b重启

    (5) 进入系统后,将root密码设置为空

    vim /etc/passwd

       root:x:0...中的x删除

       root::0...然后保存退出

    (6) 重启,登录linux后修改root密码

    passwd root

 

七、宿主机上安装TFTP服务器 (ubuntu)

    配置tftp 服务的步骤:

    <1>. 若/etc/xinetd.d/下存在 tftp,执行下列操作

       1)关闭 xinetd 服务

       $sudo service xinetd stop

       2)删除 tftp 文件

       $sudo rm /etc/xinetd.d/tftp

       3) 启动xinetd 服务

       $sudo service xinetd start

    <2>. 安装 tftp 客户端和服务器端

       $sudo apt-get install tftp-hpa

       $sudo apt-get install tftpd-hpa

    <3>. 修改 tftpd-hpa 配置文件

       $vim /etc/default/tftpd-hpa

       修改 “/var/lib/tftpboot ” 为 “/tftpboot”

       修改"--secure" 为 "--secure -c" 允许上传新文件

    <4>. 若/tftpboot 不存在,创建该目录

       $sudo mkdir /tftpboot

       $sudo chmod 777 /tftpboot

    <5>. 重启 tftpd-hpa 服务

       $sudo service tftpd-hpa restart

       若服务重启成功,能查看到相应的进程

       $ps -ef |grep in.tftpd

       至此tftp 服务已经安装完成了,下面可以对其进行一下测试。 (假设在当前目录下有一个测

       试文件 test.txt)

       $tftp 127.0.0.1

        tftp>put test.txt

       Sent 1018 bytes in 0.0 seconds

       tftp> get test.txt

       Received 1018 bytes in 0.1 seconds

       tftp> quit

       $

    通过get 命令,可以把当前目录下的 test.txt 文件,通过tftp 上传到它的服务文件目录。这

    时,在/tftpboot 下面会出现 test.txt 文件。通过 put 命令,可以从/tftpboot 下, 下载 test.tx t

    文件。这样就验证了 tftp 服务配置的正确性。当文件上传与下载结束后,可以通过 quit 命

    令退出。

   

   

    安装、配置nfs服务:

    <1> 安装 nfs

       Ubuntu 上默认是没有安装 nfs 服务器的,因此我们首先安装 nfs 服务器端:

       $sudo apt-get install nfs-kernel-server

    2、配置/etc/exports

       nfs 允许挂载的目录及权限在文件/etc/exports 中进行了定义。

       例如,我们要将根目录下的 rootfs 目录共享出来,那么我们需要在/etc/exports 文件末尾添

       加如下一行:/rootfs *(rw,sync,no_root_squash)

       其中:/rootfs 是要共享的目录,*代表允许所有的网络段访问,rw 是可读写权限,sync 是资

       料同步写入内存和硬盘,no_root_squash 是 nfs 客户端分享目录使用者的权限,如果客户端

       使用的是 root 用户,那么对于该共享目录而言,该客户端就具有 root 权限。

       其它nfs 常用的参数有:

       ro 只读访问

       rw 读写访问 sync 所有数据在请求时写入共享

       async nfs 在写入数据前可以响应请求

       secure nfs 通过 1024 以下的安全 TCP/IP 端口发送

       insecure nfs 通过 1024 以上的端口发送

       wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认)

       no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置。

       hide 在nfs 共享目录中不共享其子目录

       no_hide 共享 nfs 目录的子目录

       subtree_check 如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)

       no_subtree_check 和上面相对,不检查父目录权限

       all_squash 共享文件的 UID 和 GID 映射匿名用户anonymous ,适合公用目录。

       no_all_squash 保留共享文件的 UID 和GID(默认)

       root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)

       no_root_squas root 用户具有根目录的完全管理访问权限

       anonuid=xxx 指定 nfs 服务器/etc/passwd文件中匿名用户的 UID

       anongid=xxx 指定 nfs 服务器/etc/passwd文件中匿名用户的 GID

    3、重启服务

       $sudo /etc/init.d/portmap restart

       $sudo /etc/init.d/nfs-kernel-serverrestart

    4、测试 nfs

       此时可以运行以下命令来显示一下共享出来的目录:

       $showmount -e

       或者可以使用以下命令把它挂载在本地磁盘上,例如将/rootfs 挂载到/mnt 下:

       $ sudo mount -t nfs localhost:/rootfs/mnt

       可以运行 df 命令查看是否挂载成功。查看后可以使用以下命令卸载:

       $ sudo umount /mnt

 

八、Linux编译器GCC (gcc -v 查看gcc版本)

    ——其执行效率与一般编译器相比平均效率要高20%~30%

    1.基本用法 (gcc [options] filenames)

       gcc *.c  ./a.out

    2.GCC编译流程

    gcc通过后缀来区别输入文件,常见类型:

       .c为后缀的文件:c语言源代码文件

       .a为后缀的文件:是由目标文件构成的库文件

       .C,.cc为后缀的文件:是c++源代码文件

       .h为后缀的文件:头文件

       .o为后缀的文件:是编译后的目标文件

       .s为后缀的文件:是汇编语言源代码文件

       .m为后缀的文件:Objective-C原始程序

       .so为后缀的文件:编译后的动态库文件

 

       源程序, 预处理,编译,汇编,连接,可执行

       预处理阶段: 条件编译,头文件包含,宏替换的处理

       预处理 gcc -E test.i test.c   // gcc-E test.c -o test.i 输入为源代码输出为源代码(文本文件)(不作语法检查)

       编译gcc -S test.c -o test.s     //输入为预处理源代码,输出为汇编源代码(intel的汇编指令)(文本文件)(做语法检查,需函数的原型声明)

       汇编gcc -c test.c -o test.o     #输入为汇编源码,输出的二进制代码不能被执行(不含库函数的二进制文件)

       .so 的库文件

       连接gcc test.o -o test   (和库文件进行连接)

 

 

    3.gcc编译选项

       -o output_option:确定可执行文件的名称

       -O 对程序进行优化

           gcc optimize.c -o optimize           ./optimize

           gcc -O optimize.c -o optimize      ./optimize

       -c 不链接,生成.o为后缀的中间文件

       -g 长生调试工具所需要的符号信息

       -Wall 生成所有警告

       -w 不生成任何警告

       -DMACRO 定义MACRO宏,等效于在程序中使用#define MACRO

 

九、Linux调试器GDB

GUN的调试程序gdb,用来调试c和 c++ 程序的调试器

设置所有能影响程序运行的参数

指定条件下停止运行

 

gdb调试的对象是可执行文件而不是程序的源代码文件

需在执行gcc指令编译程序时,加上-g,才能调试

gdb使得机器码和源代码相关联

    gcc -g -o debugme debugme.c

    gdb debugme

    断点break   行号/函数/文件名:行号(函数名)

    break(b) 25

    break main

    info break:查看断点y表示生效n表示失效

    disable+断点号   断点失效

    enable + 断点号

    run(r) 启动程序

    print i  查看变量的值

    step(s) 执行一行停到下一行 ;会进入子程序内部;跳到子程序中

    next  执行一行停到下一行 ;把子函数当成单步执行

    quit  退出调试

    continue 跳到下一个断点处

    finish 结束子程序的运行

    Enter: 进行上一步的操作

 

    gdb -d 目录名     指出源码所在位置

    print arry[0]@5   查看连续的存储单元的值

    p/x arry[0]@5   以十六进制显示

    print &i

    print *arry

    break 37 if i==15  :条件断点, 当i==15时才停下来

    watch 设置监视点(监视表达式的变换)(变量)

    break 制定了特定的位置(监视某位置)

    watch j :j的变量变换就会停下来

    continue

    rwatch 设置读监视点

    set variable i=100 运行时人工改变变量的值

    return 返回值

    where 和backtrace     显示程序运行位置和函数调运栈

    up , down :遍历函数调运栈

    up 上升一个函数调运栈

    down

    print main::i

    list 列出当前运行行附近的行

    whatis i  :i是什么类型

    whatis main

    ptype :明细显示变量和函数的数据类型

    search 搜索字符串

    revarse search

    shell pwd          执行shell命令

    info file      显示调试文件的信息

    info func        显示函数名

    info local 局部变量的信息

    info prog  显示调试程序的执行状态

    set args调试加参数:set args 参数1 参数2

 

十 segement fault

1.段错误产生原因:数组访问越界 访问空指针 栈溢出 修改只读内存

2.通过ulinit命令打开/关闭core dump功能

    打开:ulimit-c unlimited

    关闭:ulimit-c 0

    ulimit -c 1000 ---指定大小

3.core文件分析

    gdb 程序名 core文件名

4.什么时候不产生core文件

    (a)进程是设置-用户-ID,而且当前用户并非程序文件的所有者;

    (b)进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;

    (c)用户没有写当前工作目录的许可权;

    (d)文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。

     

5.解决方法

    (1) 利用gdb逐步查找段错误

    (2) 分析Core文件

    (3) 段错误时启动调试

    (4) 利用backtrace和objdump进行分析 (objdump -d a.out) 

 

 

0 0
原创粉丝点击