linux的in命令怎么用_linux 网卡 in ,out 指令 - CSDN
精华内容
参与话题
  • linux常用命令(详解)

    万次阅读 多人点赞 2018-08-29 09:45:41
    一、日常使用命令/常用快捷键命令 开关机命令  1、shutdown –h now:立刻进行关机  2、shutdown –r now:现在重新启动计算机  3、reboot:现在重新启动计算机  4、su -:切换用户;passwd:修改用户密码 ...

    一、日常使用命令/常用快捷键命令

    开关机命令

            1、shutdown –h now:立刻进行关机

            2、shutdown –r now:现在重新启动计算机

            3、reboot:现在重新启动计算机

            4、su -:切换用户;passwd:修改用户密码

            5、logout:用户注销

    常用快捷命令

            1、tab = 补全

            2、ctrl + l -:清屏,类似clear命令

            3、ctrl + r -:查找历史命令(history);ctrl+c = 终止

            4、ctrl+k = 删除此处至末尾所有内容

            5、ctrl+u = 删除此处至开始所有内容

    常用工具命令

    man:帮助命令
        wc:文本统计统计
            wordcount
             3      5         29         a.txt
             行数    单词数    字符数    文件名
            常见参数:
                -l:只查看行数
                -w: 只查看单词数
                -c:只查看字符数
        du:文件大小统计
            格式:du [选项参数] dir_path
            常见参数:
                    -s:只统计该文件目录的大小,不递归
                    -h:人性化的显示单位
        find:文件检索命令

    语法
    
    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
    
    参数说明 :
    
    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
    
    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
    
    -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
    
    -amin n : 在过去 n 分钟内被读取过
    
    -anewer file : 比文件 file 更晚被读取过的文件
    
    -atime n : 在过去n天内被读取过的文件
    
    -cmin n : 在过去 n 分钟内被修改过
    
    -cnewer file :比文件 file 更新的文件
    
    -ctime n : 在过去n天内被修改过的文件
    
    -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
    
    -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
    
    -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
    
    -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件。
    
    d: 目录
    
    c: 字型装置文件
    
    b: 区块装置文件
    
    p: 具名贮列
    
    f: 一般文件
    
    l: 符号连结
    
    s: socket
    
    -pid n : process id 是 n 的文件
    
    你可以使用 ( ) 将运算式分隔,并使用下列运算。
    
    exp1 -and exp2
    
    ! expr
    
    -not expr
    
    exp1 -or exp2
    
    exp1, exp2
    实例
    
    将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
    
    # find . -name "*.c"
    
    将目前目录其其下子目录中所有一般文件列出
    
    # find . -type f
    
    将目前目录及其子目录下所有最近 20 天内更新过的文件列出
    
    # find . -ctime -20
    
    查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
    
    # find /var/log -type f -mtime +7 -ok rm {} \;
    
    查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
    
    # find . -type f -perm 644 -exec ls -l {} \;
    
    为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
    
    # find / -type f -size 0 -exec ls -l {} \;

    二、常用目录/文件操作命令

    1.展示目录列表命令ls(list)

      ls             展示当前目录下的可见文件
      ls -a         展示当前目录下所有的文件(包括隐藏的文件)
      ls -l(ll)      展示当前目录下文件的详细信息
      ll -a          展示当前目录下所有文件的详细信息
      ll -h          友好的显示当前目录下文件的详细信息(其实就是文件的大小可读性更强了)

      pwd:显示目前的目录

    2.切换目录命令cd(change directory)

      cd test         切换到test目录下
      cd .. 切换到上一级目录
      cd / 切换到系统根目录下
      cd ~ 切换到当前用户的根目录下
      cd - 切换到上一级所在的目录

    3.目录的创建(mkdir)和删除(rmdir)命令

      mkdir test 在当前目录下创建一个test目录
      mkdir -p test/a/b 在test目录下的a目录下创建一个b目录,如果上一级目录不存在,则连它的父目录一起创建
      rmdir test 删除当前目录下的test目录(注意:该命令只能够删除空目录)

    4.文件的创建(touch)和删除(rm)命令

      touch test.txt         在当前目录下创建一个test.txt的文件
      rm test.txt 删除test.txt的文件(带询问的删除,需输入y才能删除)
      rm -f test.txt 直接删除text.txt文件
      rm -r test 递归删除,即删除test目录以及其目录下的子目录(带询问的删除)
      rm -rf test 直接删除test目录以及其目录下的子目录

    5.文件打包或解压命令tar

          1. 打包并压缩文件

    Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。

    而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。

    命令:tar -zcvf 打包压缩后的文件名 要打包压缩的文件

    其中:z:调用gzip压缩命令进行压缩

      c:打包文件

      v:显示运行过程

      f:指定文件名

    示例:打包并压缩/test下的所有文件 压缩后的压缩包指定名称为xxx.tar.gz

    tar -zcvf xxx.tar.gz aaa.txt bbb.txt ccc.txt

    或:tar -zcvf xxx.tar.gz /test/*

     

     
     

     

     

          1. 解压压缩包(重点)

    命令:tar [-xvf] 压缩文件

    其中:x:代表解压

    示例:将/test下的xxx.tar.gz解压到当前目录下

     

     
     


    tar -xvf xxx.tar.gz

    示例:将/test下的xxx.tar.gz解压到根目录/usr下

    tar -xvf xxx.tar.gz -C /usr------C代表指定解压的位置

     

     
     

     

     

     

     

     

     

     

        1. Linux的权限命令

    权限是Linux中的重要概念,每个文件/目录等都具有权限,通过ls -l命令我们可以 查看某个目录下的文件或目录的权限

     

    文件的类型:

    d:代表目录

    -:代表文件

    l:代表链接(可以认为是window中的快捷方式)

    后面的9位分为3组,每3位置一组,分别代表属主的权限,与当前用户同组的     用户的权限,其他用户的权限

    r:代表权限是可读,r也可以用数字4表示

    w:代表权限是可写,w也可以用数字2表示

    x:代表权限是可执行,x也可以用数字1表示

     

     

    属主(user

    属组(group

    其他用户

    r

    w

    x

    r

    w

    x

    r

    w

    x

    4

    2

    1

    4

    2

    1

    4

    2

    1

    linux中用户的分类
            小李     小李对象    老王
            所有者u    同组用户g    其他人o
        linux中文件权限
            读r        写w        执行x    没有权限-
            
        文件详情信息:
            -rw-r--r--. 1 root root       5 Aug 28 02:27 a.txt    
            d rwx r-x r-x. 2 root root    4096 Aug 27 08:52 test
            第一位:d:目录,-:文件
            rw-                r--                r--
            所有者           同组用户        其他人
            只有读写          只有读            只有读
            
        1:该文件的链接数
        root:文件所属者
        root:文件所属组
         5 Aug 28 02:27:最后的修改时间

    修改文件/目录的权限的命令:chmod

    示例:修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,

    其他用户只有读的权限

    chmod u=rwx,g=rw,o=r aaa.txt

    上述示例还可以使用数字表示:

    chmod 764 aaa.txt

     

    修改文件的所属用户和所属组 chown
            chown username:groupName aa.txt
            chown username: aa.txt
            chown :groupName aa.txt
        
            -R:递归子目录修改所属者和所属组

    三、文件/文件夹的cp rm及文件的查看

    cp (复制文件或目录)

    cp 即拷贝文件和目录。

    语法:

    [root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
    [root@www ~]# cp [options] source1 source2 source3 .... directory

    选项与参数:

    • -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)

    • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;

    • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

    • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)

    • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;

    • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);

    • -r:递归持续复制,用於目录的复制行为;(常用)

    • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;

    • -u:若 destination 比 source 旧才升级 destination !

    用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc

    [root@www ~]# cp ~/.bashrc /tmp/bashrc
    [root@www ~]# cp -i ~/.bashrc /tmp/bashrc
    cp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖

    rm (移除文件或目录)

    语法:

     rm [-fir] 文件或目录

    选项与参数:

    • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
    • -i :互动模式,在删除前会询问使用者是否动作
    • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
    •  

    将刚刚在 cp 的实例中创建的 bashrc 删除掉!

    [root@www tmp]# rm -i bashrc
    rm: remove regular file `bashrc'? y

    如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

    mv (移动文件与目录,或修改名称)

    语法:

    [root@www ~]# mv [-fiu] source destination
    [root@www ~]# mv [options] source1 source2 source3 .... directory

    选项与参数:

    • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)

    复制一文件,创建一目录,将文件移动到目录中

    [root@www ~]# cd /tmp
    [root@www tmp]# cp ~/.bashrc bashrc
    [root@www tmp]# mkdir mvtest
    [root@www tmp]# mv bashrc mvtest

    将某个文件移动到某个目录去,就是这样做!

    将刚刚的目录名称更名为 mvtest2

    [root@www tmp]# mv mvtest mvtest2

    Linux 文件内容查看

    Linux系统中使用以下命令来查看文件的内容:

    • cat  由第一行开始显示文件内容
    • tac  从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
    • nl   显示的时候,顺道输出行号!
    • more 一页一页的显示文件内容
    • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    • head 只看头几行
    • tail 只看尾巴几行

    你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。

    cat

    由第一行开始显示文件内容

    语法:

    cat [-AbEnTv]

    选项与参数:

    • -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
    • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
    • -E :将结尾的断行字节 $ 显示出来;
    • -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
    • -T :将 [tab] 按键以 ^I 显示出来;
    • -v :列出一些看不出来的特殊字符

    检看 /etc/issue 这个文件的内容:

    [root@www ~]# cat /etc/issue
    CentOS release 6.4 (Final)
    Kernel \r on an \m

    tac

    tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:

    [root@www ~]# tac /etc/issue
    
    Kernel \r on an \m
    CentOS release 6.4 (Final)

    nl

    显示行号

    语法:

    nl [-bnw] 文件

    选项与参数:

    • -b :指定行号指定的方式,主要有两种:
      -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
      -b t :如果有空行,空的那一行不要列出行号(默认值);
    • -n :列出行号表示的方法,主要有三种:
      -n ln :行号在荧幕的最左方显示;
      -n rn :行号在自己栏位的最右方显示,且不加 0 ;
      -n rz :行号在自己栏位的最右方显示,且加 0 ;
    • -w :行号栏位的占用的位数。

    实例一:用 nl 列出 /etc/issue 的内容

    [root@www ~]# nl /etc/issue
         1  CentOS release 6.4 (Final)
         2  Kernel \r on an \m

    more

    一页一页翻动

    [root@www ~]# more /etc/man.config
    #
    # Generated automatically from man.conf.in by the
    # configure script.
    #
    # man.conf from man-1.6d
    ....(中间省略)....
    --More--(28%)  <== 重点在这一行喔!你的光标也会在这里等待你的命令

    在 more 这个程序的运行过程中,你有几个按键可以按的:

    • 空白键 (space):代表向下翻一页;
    • Enter         :代表向下翻『一行』;
    • /字串         :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
    • :f            :立刻显示出档名以及目前显示的行数;
    • q             :代表立刻离开 more ,不再显示该文件内容。
    • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

    less

    一页一页翻动,以下实例输出/etc/man.config文件的内容:

    [root@www ~]# less /etc/man.config
    #
    # Generated automatically from man.conf.in by the
    # configure script.
    #
    # man.conf from man-1.6d
    ....(中间省略)....
    :   <== 这里可以等待你输入命令!

    less运行时可以输入的命令有:

    • 空白键    :向下翻动一页;
    • [pagedown]:向下翻动一页;
    • [pageup]  :向上翻动一页;
    • /字串     :向下搜寻『字串』的功能;
    • ?字串     :向上搜寻『字串』的功能;
    • n         :重复前一个搜寻 (与 / 或 ? 有关!)
    • N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)
    • q         :离开 less 这个程序;

    head

    取出文件前面几行

    语法:

    head [-n number] 文件 

    选项与参数:

    • -n :后面接数字,代表显示几行的意思
    [root@www ~]# head /etc/man.config

    默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:

    [root@www ~]# head -n 20 /etc/man.config

    tail

    取出文件后面几行

    语法:

    tail [-n number] 文件 

    选项与参数:

    • -n :后面接数字,代表显示几行的意思
    • -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
    [root@www ~]# tail /etc/man.config
    # 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
    [root@www ~]# tail -n 20 /etc/man.config

    系统常用操作命令

    visudo:编辑sudo命令的配置
            编辑第98行
            ## Allow root to run any commands anywhere
                root    ALL=(ALL)                               ALL
                用户名  登录的主机=(以什么样的身份运行)  可以执行什么命令
            如果想让huadian用户也居于root相关权限。。
                huadian  ALL=(root)  NOPASSWD:service iptables status
                huadian  ALL=(root)  NOPASSWD:service iptables start
            推荐用法    
                huadian  ALL=(root)  NOPASSWD:ALL
                
            使用权限:sudo     service iptables status  ----(检查防火墙状态)

    网络管理:ping、ifconfig
        服务管理命令:
            service:必须掌握
                格式:
                    service s_name start|stop|status|restart
                linux系统所有自带服务名称:/etc/init.d/
                    常用:
                        关闭防火墙服务
                        service iptables stop
                        重启网络服务:
                        service network restart
                        mysql数据库服务的名称:
                            mysql版本低于5.5  mysqld
                            mysql版本高于5.5  mysql
                
            chkconfig:设置是否开机启动           :必须掌握
                判定是否开机启动
                    chkconfig iptables --list
                    2.3.4.5是on表示开机启动
                设置
                    chkconfig iptables on|off
                        
        进程管理:ps
            ps:查当前进程
                查看java的进程
                ps -ef | grep java
            jps:==(ps -ef | grep java) 只有在linux中安装了JDK才能用
            kill :杀死某个进程
                kill -9 pid
                
        端口管理
            nststat:查看端口开放情况
                -a:表示列举所有的连接、服务器监听
                -t:列出所有tcp协议的服务
                -u:列出所有udp协议的服务
                -n:使用端口号来显示
                -l:列出所有的监听
                -p:列出所有服务的进程id(pid)
                常用:netstat -atunlp
            
        redhat的selinux安全机制
            关闭selinux安全机制
                vim /etc/selinux/config
                    SELINUX=disabled
                重启机器生效

     

    vim/vi命令看下一篇帖子

    vim/vi命令看下一篇帖子

    vim/vi命令看下一篇帖子

    展开全文
  • Linux常用软件安装命令

    千次阅读 2017-04-02 20:54:35
    一、mysql  1.ubuntu下安装mysql需要一些命令 (1)sudo apt-get install mysql-server ... (2)sudo apt-get isntall mysql-client (3)sudo apt-get install libmysqlclient-...安装完成之后,可以下面的命令检查是

    一、mysql5.5

     1.ubuntu下安装mysql需要一些命令

    (1)sudo apt-get install mysql-server

    安装过程中会出现窗口,需要用户输入相关的数据库密码。

    (2)sudo apt-get isntall mysql-client

    (3)sudo apt-get install libmysqlclient-dev

    安装完成之后,可以用下面的命令检查是否安装成功

    sudo netstat -tap | grep mysql

    通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。


    2.登陆mysql可以输入如下命令:

    mysql -u root -p

    3.补充一些安装过程中的小知识

    (1). 删除mysql

    sudo apt-get autoremove --purge mysql-server-5.0

    sudo apt-get remove mysql-server

    sudo apt-get autoremove mysql-server

    sudo apt-get remove mysql-common (非常重要)

    上面的其实有一些是多余的,建议还是按照顺序执行一遍

    (2). 清理残留数据

    dpkg -l |grep ^rc|awk'{print $2}' |sudoxargs dpkg -P

    (3).ubuntu下启动/停止/重启 mysql

    a.使用service:

    sudo service mysql stop

    sudo service mysql start

    sudo service mysql restart

    b.使用 mysqld 脚本启动 

    sudo /etc/init.d/mysql stop

    sudo /etc/init.d/mysql start

    sudo /etc/init.d/mysql restart

    重启提示错误如下:

    Rather than invoking init scripts through /etc/init.d, use the service(8) utility, e.g. service mysql start...

    其实已经告诉怎么做了:用sudo service mysql start启动即可



    二、Android Studio

    Ubuntu 15.04 上安装 Android Studio

    打开terminal,输入以下命令

    1. sudo apt-add-repository ppa:paolorotolo/android-studio

    2. sudo apt-get update

    3. sudo apt-get install android-studio

    如果要把Android Studio添加到启动栏,你需要如下操作

    打开Android Studio,点击Configure选择Create Desktop Entry,这样Android Studio应该在dash中创建快捷方式了。

    三、Install PyCharm in Ubuntu 14.04

    $ wget -q -O - http://archive.getdeb.net/getdeb-archive.key |sudo apt-key add -
    $ sudo sh -c 'echo "deb http://archive.getdeb.net/ubuntutrusty-getdeb apps" >>/etc/apt/sources.list.d/getdeb.list'
    $ sudo apt-get update
    $ sudo apt-get install pycharm

    你懂的:
    pycharm
    ========= Sjolzy.cn ========= 
    61667-12042010
    0000285EqkWlIA2ky6BoNqCag!fvO3
    j2ICltgk6kiG8IjRMEfE17TsxSr4EF
    b60Y9vBcUyQ6y0XdSjYF!b”E7f09oD
    =========== Sjolzy.cn =============

    展开全文
  • Linux 常用命令如何使用

    千次阅读 2018-12-28 12:17:30
    作者 |守望责编 | 郭芮Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简...
        

    640?wx_fmt=gif

    640?wx_fmt=jpeg

    作者 | 守望
    责编 | 郭芮

    Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。

    本文将简单介绍一下这些命令。


    640?wx_fmt=png

    示例程序


    我们用一个小程序,来帮助后面我们对这些命令的描述,程序清单cmdTest.c如下:

    #include<stdio.h>
    int test(int a,int b)
    {
        return a/b;
    }
    int main(int argc,char *argv[])
    {
        int a = 10;
        int b = 0;
        printf("a=%d,b=%d\n",a,b);
        test(a,b);
        return 0;
    }

    编译获得elf文件cmdTest并运行:

    gcc -g -o cmdTest cmdTest.c
    ./cmdTest
    a=10,b=0
    Floating point exception (core dumped)

    程序内容是在main函数中调用test,计算a/b的值,其中b的值为0,因此程序由于除0错误异常终止。


    640?wx_fmt=png

    查看文件基本信息——file


    file cmdTest
    cmdTest: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=448e1c34b4c548120e2c04f6a2bfce4e6d2281a3, not stripped

    通过file命令可以看到cmdTest的类型为elf,是64位、运行于x86-64的程序,not striped表明elf文件中还保留着符号信息以及调试信息等不影响程序运行的内容。


    640?wx_fmt=png

    查看程序依赖库——ldd


    ldd cmdTest
           linux-vdso.so.1 =>  (0x00007ffc8e548000)
           libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0621931000)
           /lib64/ld-linux-x86-64.so.2 (0x00007f0621cf6000)

    我们可以看到cmdTest依赖了libc.so等库。


    640?wx_fmt=png

    查看函数或者全局变量是否存在于elf文件中——nm


    nm命令用于查看elf文件的符号信息。文件编译出来之后,我们可能不知道新增加的函数或者全局变量是否已经成功编译进去。这时候,我们可以使用nm命令来查看。

    例如,查看前面所提到的elf文件有没有test函数,可以用命令:

    nm cmdTest|grep test
    000000000040052d T test  #打印结果


    按照地址顺序列出符号信息:

    nm -n cmdTest
                     w _ITM_deregisterTMCloneTable
                     w _ITM_registerTMCloneTable
                     w _Jv_RegisterClasses
                     w __gmon_start__
                     U __libc_start_main@@GLIBC_2.2.5
                     U printf@@GLIBC_2.2.5
    00000000004003e0 T _init
    0000000000400440 T _start
    0000000000400470 t deregister_tm_clones
    00000000004004a0 t register_tm_clones
    00000000004004e0 t __do_global_dtors_aux
    0000000000400500 t frame_dummy
    000000000040052d T test
    0000000000400540 T main
    0000000000400590 T __libc_csu_init
    0000000000400600 T __libc_csu_fini
    (列出部分内容)

    可以看到test函数的开始地址为0x000000000040052d,结束地址为0x0000000000400540。


    640?wx_fmt=png

    打印elf文件中的可打印字符串——strings


    例如你在代码中存储了一个版本号信息,那么即使编译成elf文件后,仍然可以通过strings搜索其中的字符串甚至可以搜索某个.c文件是否编译在其中:

    strings elfFile| grep "someString"



    640?wx_fmt=png

    查看文件段大小——size


    可以通过size命令查看各段大小:

    size cmdTest
       text       data      bss      dec      hex  filename
       1319      560        8     1887      75f   cmdTest
    • text段:正文段字节数大小;

    • data段:包含静态变量和已经初始化的全局变量的数据段字节数大小;

    • bss段:存放程序中未初始化的全局变量的字节数大小。

    当我们知道各个段的大小之后,如果有减小程序大小的需求,就可以有针对性的对elf文件进行优化处理。


    640?wx_fmt=png

    为elf文件”瘦身“——strip


    strip用于去掉elf文件中所有的符号信息:

    ls -al cmdTest
    -rwxr-xr-x 1 hyb root 9792 Sep 25 20:30 cmdTest #总大小为9792字节
    strip cmdTest
    ls -al cmdTest
    -rwxr-xr-x 1 hyb root 6248 Sep 25 20:35 cmdTest#strip之后大小为6248字节

    可以看到,“瘦身”之后,大小减少将近三分之一。

    但是要特别注意的是,“瘦身”之后的elf文件由于没有了符号信息,许多调试命令将无法正常使用,出现core dump时,问题也较难定位,因此只建议在正式发布时对其进行“瘦身”。


    640?wx_fmt=png

    查看elf文件信息——readelf


    readelf用于查看elf文件信息,它可以查看各段信息,符号信息等,下面的例子是查看elf文件头信息:

    readelf -h cmdTest
      Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  #elf文件魔数字
      Class:                             ELF64  #64位 elf文件
      Data:                              2's complement, little endian#字节序为小端序
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V #
      ABI Version:                       0
      Type:                              EXEC (Executable file)#目标文件类型
      Machine:                           Advanced Micro Devices X86-64 #目标处理器体系
      Version:                           0x1
      Entry point address:               0x400440  #入口地址
      Start of program headers:          64 (bytes into file)
      Start of section headers:          4456 (bytes into file)
      Flags:                             0x0
      Size of this header:               64 (bytes)
      Size of program headers:           56 (bytes)
      Number of program headers:         9
      Size of section headers:           64 (bytes)
      Number of section headers:         28
      Section header string table index27

    从elf头信息中,我们可以知道该elf是64位可执行文件,运行在x86-64中,且字节序为小端序。另外,我们还注意到它的入口地址是0x400440(_start),而不是400540(main)。也就是说,我们的程序运行并非从main开始。


    640?wx_fmt=png

    反汇编指定函数——objdump


    objdump用于展示elf文件信息,功能较多,在此不逐一介绍。有时候我们需要反汇编来定位一些问题,可以使用命令:

    objdump -d cmdTest #反汇编整个cmdTest程序

    但是如果程序较大,那么反汇编时间将会变长,而且反汇编文件也会很大。如果我们已经知道了问题在某个函数,只想反汇编某一个函数,怎么处理呢?

    我们可以利用前面介绍的nm命令获取到函数test的地址,然后使用下面的方式反汇编:

    objdump -d cmdTest --start-address=0x40052d --stop-address=0x400540 ##反汇编指定地址区间


    640?wx_fmt=png

    端口占用情况查看——netstat


    我们可能常常会遇到进程第一次启动后,再次启动会出现端口绑定失败的问题,我们可以通过netstat命令查看端口占用情况:

    netstat -anp|grep 端口号


    640?wx_fmt=png

    core dump文件生成配置——ulimit -c


    有时候我们的程序core dump了却没有生成core文件,很可能是我们设置的问题:

    ulimit -c #查看core文件配置,如果结果为0,程序core dump时将不会生成core文件
    ulimit -c unlimited #不限制core文件生成大小
    ulimit -c 10 #设置最大生成大小为10kb



    640?wx_fmt=png

    调试神器——gdb

    gdb是一个强大的调试工具,但这里仅介绍两个简单使用示例。

    有时候程序可能已经正在运行,但是又不能终止它,这时候仍然可以使用gdb调试正在运行的进程:

    gdb processFile PID #processFile为进程文件,pid为进程id,可通过ps命令查找到

    有时候程序可能core dump了,但是系统还留给了我们一个礼物——core文件。

    在core文件生成配置完成之后,运行cmdTest程序,产生core文件。我们可以用下面的方法通过core文件定位出错位置:

    gdb cmdTest core #processFile为进程文件,core为生成的core文件
    Core was generated by `./cmdTest'.
    Program terminated with signal SIGFPE, Arithmetic exception.
    #0  0x00000000004004fb in test (a=10, b=0) at cmdTest.c:4
    4         return a/b;
    (gdb)bt
    #0  0x00000000004004fb in test (a=10, b=0) at cmdTest.c:4
    #1  0x000000000040052c in main (argc=1, argv=0x7ffca9536d38) at cmdTest.c:10
    (gdb)

    输入bt后,就可以看到调用栈了,出错位置在test函数,cmdTest.c的第4行。


    640?wx_fmt=png

    定位crash问题——addr2line


    有时候程序崩溃了但不幸没有生成core文件,是不是就完全没有办法了呢?还是cmdTest的例子。运行完cmdTest之后,我们通过dmesg命令可以获取到以下内容:

    [27153070.538380] trapscmdTest[2836] trap divide error ip:40053b sp:7ffc230d9280 error:0 in cmdTest[400000+1000]


    该信息记录了cmdTest运行出错的基本原因(divide error)和出错位置(40053b),我们使用addr2line命令获取出错具体行号:

    addr2line -e cmdTest 40053b
    /home/hyb/practice/cmdTest.c:4

    可以看到addr2line命令将地址(40053b)翻译成了文件名(cmdTest.c)和行号(4),确定了出错位置。


    640?wx_fmt=png

    总结


    本文对以上命令仅介绍其经典使用,这些命令都还有其他一些有帮助的用法,但由于篇幅有限,不在此介绍,更多使用方法可以通过man命令名的方式去了解。

    作者:守望,一名好文学,好技术的开发者。在个人公众号【编程珠玑】分享原创技术文章和学习资源,期待一起交流学习。

    声明:本文为作者投稿,版权归作者个人所有。


     热 文 推 荐 

    OPPO 推出 10 亿引力计划,全力构建智能化服务生态

    开除“野狗”式程序员,团队的效率提高了

    16 岁程序媛遭辍学歧视死亡威胁,最终是如何开发出爆款应用的?

    ☞ 雷军:执掌金山纯属意外

    ☞ 关于5G接入网,看这一篇就够啦!

    ☞ 别说创业维艰,16岁开发者从辍学歧视死亡威胁, 到开发出爆款应用, 她的人生远非成人想象

    ☞ AI in 美团:吃喝玩乐背后的黑科技

    ☞ 老程序员肺腑忠告:千万别一辈子靠技术生存!

    print_r('点个好看吧!');
    var_dump('点个好看吧!');
    NSLog(@"点个好看吧!");
    System.out.println("点个好看吧!");
    console.log("点个好看吧!");
    print("点个好看吧!");
    printf("点个好看吧!\n");
    cout << "点个好看吧!" << endl;
    Console.WriteLine("点个好看吧!");
    fmt.Println("点个好看吧!");
    Response.Write("点个好看吧!");
    alert("点个好看吧!")
    echo "点个好看吧!"

    640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

    640?wx_fmt=png喜欢就点击“好看”吧!
    展开全文
  • LinuxIn命令详解

    2014-12-03 17:09:14
    例如: ln -s /66666/ /root 将66666目录的文件夹 软连接到 root目录下

    例如:
    ln -s /66666/ /root
    将66666目录的文件夹 软连接到 root目录下

    展开全文
  • Linux中的In命令

    万次阅读 2015-01-04 11:00:33
    ln是linux中一个非常重要命令。它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是:  ln -s 源文件 目标文件 -s 是 symbolic的意思。  例:ln -s /lib/lsb ...
  • linuxIn命令使用

    千次阅读 2017-04-04 11:34:50
    这是Linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。 这个命令最常用的参数是-s,具体用法是: sudo ln -s 源文件 目标...
  • linuxin命令使用方法

    千次阅读 2013-11-14 12:22:23
    这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。 当我们需要在不同的目录,用到相同的...
  • linuxin命令

    千次阅读 2018-03-31 23:44:40
    1.用法 : ln [option] source_file dist_file -f 建立时,将同档案名删除. -i 删除前进行询问. ln -s abc cde 建立abc 的软连接 ln abc cde 建立abc的硬连接,2. 软链接与硬链接的区别(通俗):硬链接可认为是一...
  • linux系列之常用运维命令整理笔录

    万次阅读 多人点赞 2020-09-21 15:15:25
    本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些...
  • linux下载命令wget

    万次阅读 2018-04-14 19:27:30
    linux下载命令原创 2017年11月03日 14:20:0732Linux wget是一个下载文件的工具,它在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到 本地服务器。...
  • linux wget 命令In this tutorial, let’s learn how to download a file using the wget command in Linux. For any Linux user, downloading files is a frequent task. While you can download things using your...
  • Linux ln命令详解及使用

    万次阅读 2018-01-12 10:55:40
    Linux ln命令详解及使用  ln是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件。 1. ln命令概述 当我们...
  • linux下的一些常见命令学习

    万次阅读 多人点赞 2017-09-05 18:12:51
    Linux常用命令学习Linux常用命令学习 1 last命令 2 awk命令 3 cat命令 4 top命令 5 ps命令1、 last命令last命令用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp的文件,并把该文件中记录的登入...
  • Linux使用adb命令的一些坑

    千次阅读 2018-12-11 10:50:31
    Linux使用adb命令的一个问题记录Linux adb采坑记录Linux安装Linux下adb命令使用Vim编辑器退出小结 Linux adb采坑记录 笔者最近接到一个很easy的任务,需要在Linux环境下连接手机,跑一个脚本,听起来十分的容易,...
  • LinuxLinux超全实用指令大全

    万次阅读 多人点赞 2019-09-18 09:24:38
    指定运行级别 运行级别说明: 0:关机 ...2:多用户状态没有网络...4:系统未使用保留给用户 5:图形界面 6:系统重启 常用运行级别是3和5 要修改默认的运行级别可改文件/etc/inittab的id: 5:initdefault:这一行中的...
  • linux命令——man

    千次阅读 2018-07-14 22:41:40
    Shell(也称为终端或壳)用户与Linux系统的交互常见执行Linux命令的格式是这样的: 命令名称 [命令参数] [命令对象]注意,命令名称、命令参数、命令对象之间请空格键分隔。命令对象一般是指要处理的文件、目录、...
  • ln 指令,快捷方式,软连接(符号连接) ln -s /root linktoRoot cd linktoRoot //进入root 文件 pwd 查看 发现还是 /home/linktoRoot 删除软连接: rm -rf linktoRoof 注意删除软连接的时候 不要加/
  • linux 命令找不到

    2019-12-05 08:52:48
    whereis(命令名称) ln -s /usr/share/man/man1/source.1.gz /usr/bin
  • Linux命令有内部命令(内建命令)和外部命令之分,内部命令和外部命令功能基本相同,但也有些细微差别。 内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并...
  • Linux链接命令-ln

    万次阅读 2019-04-07 07:35:55
    链接命令ln,并且介绍了软链接和硬链接的特点和区别。
1 2 3 4 5 ... 20
收藏数 560,991
精华内容 224,396
关键字:

linux的in命令怎么用