分类目录归档:linux

以非 root 用户身份使用 Wireshark 抓包(Sniffing with Wireshark as a Non-Root User)【轉】

【鏈接】

https://blog.csdn.net/imred/article/details/50252211

【內容】

这篇文章是针对Linux和某些UNIX系统而写的,Windows用户可以参阅这里
许多网络工程师第一次在Linux机器上使用Wireshark时可能感到很奇怪,因为他们没有权限使用任何网络接口。因为在默认情况下,网络接口(比如说eth0)的原始操作权限(raw access)需要root权限。但是Wireshark会提示你直接以root身份运行Wireshark并不是一个好主意,你可能会收到下面这样的警告:

Wireshark包含超过一百五十万行代码。不要以root身份执行它们。

的确,Wireshark有数目众多且复杂的协议解析器,这使得它在处理一些畸形的网络流量(故意的或无意的)潜在被攻击的可能性,最终可能导致无法正常工作或者执行恶意代码。那么,如果我们不以root身份运行Wireshark,我们该如何抓包呢?
Wireshark的首席开发人员,Gerald Combs,指出某些Linux发行版已经开始实现网络原始操作权限的Linux权能(capabilities)(许多关于Linux基本使用方法的书籍里并没有提到过Linux的capabilities机制,它是一种关于权限的机制,下面会提到一些,具体可查阅capabilities的man page,关于其他的权限机制,可以参阅我的博客其他一些文章,译者注)。在这篇文章里,我将一步步的教你具体如何使用这种权能特性,以及这些系统命令的背后机理,我使用的是Ubuntu 9.10。

文件系统权能(Filesystem Capabilities)

什么是文件系统权能?下面是man page的部分内容:

为了实现执行权限检查的目的,传统的Unix将进程分为两类:特权进程(有效UID为0,指超级用户或root),非特权进程(有效UID非0)。特权进程可以绕开内核的任何权限检查,而非特权进程则会被内核根据进程的凭证信息(有效UID,有效GID,附属组列表)进行完全的权限检查。
从kernel 2.2开始,Linux将传统上关联于超级用户的各种特权分离到了独立的单元,即我们所知的权能,这使它们可被独立的开启或关闭。权能是每个线程的属性。

手册接着列出了二十几个独立的POSIX权能,它们可被单个的可执行文件获取。为了进行嗅探,我们需要特别注意其中的两项权能:

CAP_NET_ADMIN-允许各种和网络相关的操作(比如设置特权套接字选项(privileged socket options),开启多播,设置网络端口,修改路由表)。
CAP_NET_RAW-允许使用原始(RAW)套接字和数据包(PACKET)套接字

CAP_NET_ADMIN允许我们将端口设置为混杂模式(promiscuous mode),CAP_NET_RAW允许对网络接口的原始操作权限,这样我们就可以直接从网线中抓包了。我们要使用setcap工具来进行这些权能的赋予。

允许非root用户抓包(Enabling Non-root Capture)

第一步:安装setcap(Install setcap)

首先,如果系统中没有setcap工具的话,我们必须要安装它。我们要用它来赋予Wireshark中dumpcap程序粒度化(granular)的权能。setcap是libcap2-bin包的一部分。

stretch@Sandbox:~$ sudo apt-get install libcap2-bin
Reading package lists… Done
Building dependency tree
Reading state information… Done
Suggested packages:
libcap-dev
The following NEW packages will be installed:
libcap2-bin
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 17.7kB of archives.
After this operation, 135kB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com karmic/universe libcap2-bin 1:2.16-5ubuntu1 [17.7kB]
Fetched 17.7kB in 0s (36.7kB/s)
Selecting previously deselected package libcap2-bin.
(Reading database … 146486 files and directories currently installed.)
Unpacking libcap2-bin (from …/libcap2-bin_1%3a2.16-5ubuntu1_amd64.deb) …
Processing triggers for man-db …
Setting up libcap2-bin (1:2.16-5ubuntu1) …

第二步:创建Wireshark用户组(可选)(Create a Wireshark Group (Optional))

一个应用程序获得权能以后,它默认仍然可被所有用户执行,因此我们最好建立一个Wireshark用户组,将Wireshark及类似工具的可执行权限仅赋给这个用户组的用户。当然了,这并不是必需的。

root@Sandbox# groupadd wireshark
root@Sandbox# usermod -a -G wireshark stretch

把你自己的非root用户添加到这个用户组之后,这个用户需要登出再登入才能使用户组设置生效。或者,你可以执行newgrp命令来强制使这个新的用户组生效(你必须在这个相同的终端环境下进行第三步操作)。(需要事先使用gpasswd设置用户组密码才能使用newgrp命令,而且使用newgrp只是临时的得到了用户组权限,下次登录就会消失,当然本例并不会消失,因为已经设置了新用户组,关闭终端也会使权限消失。译者注)

stretch@Sandbox$ newgrp wireshark

我们把dumpcap程序的执行权限赋给这个用户组,而不是Wireshark本身,这是因为负责底层抓包操作的只有dumpcap这个程序。将它的权限设为750,这样只有在这个用户组的用户才能执行它了。

root@Sandbox# chgrp wireshark /usr/bin/dumpcap
root@Sandbox# chmod 750 /usr/bin/dumpcap

第三步 获取权能(Grant Capabilities)

使用setcap获取权能相当简单:

root@Sandbox# setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

权能表后面的=eip分别在生效(effective),可继承(inheritable)和允许的(permitted)三个映射集合中设置了这些权能的有效位。想要获取更彻底的解释,可以参阅这个FAQ
可以使用getcap来确认一下配置是否生效。

root@Sandbox# getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

现在,我们添加在第二步创建的wireshark用户组中的用户就可以正常的使用Wireshark了。你现在在可开始嗅探列表中应该能看到所有的网络端口了。(如果没有,请再次检查wireshark用户组是否出现在了groups命令的输出中,而且你可能需要登出再登入才能使用户组设置生效。)

linux mint 18.2 安装wireshark【轉】

【鏈接】

https://www.cnblogs.com/or2-/p/7764261.html

【內容】

Method 1: Via PPA

Step 1: Add the official PPA

sudo add-apt-repository ppa:wireshark-dev/stable

Step 2: update the repository

sudo apt-get update

Step 3: Install Wireshark 2.4.2

sudo apt-get install wireshark

During the installation, it will require confirming security about allowing non-superuser to execute Wireshark.

Just confirm YES if you want to. If you check on NO, you must run Wireshark with sudo. Later, if you want to change this,

sudo dpkg-reconfigure wireshark-common

使用wc统计代码行数【轉】

【鏈接】

https://www.cnblogs.com/Maopei/p/7418953.html

【內容】

最近写了一些代码,想统计一下代码的行数,在eclipse中好像没这功能,网上搜了一下才发现原来Linux有一个统计文件行数的命令wc。使用wc可以打印出每个文件和总文件的行数、字数和字节数,如果没有指定文件,则会读取标准输入(一般是终端)做统计。格式如下:

    Usage: wc [OPTION]... [FILE]...
    -c, --bytes, --chars print the byte counts
    -l, --lines print the newline counts
    -L, --max-line-length print the length of the longest line
    -w, --words print the word counts
        --help display this help and exit
        --version output version information and exit

 

下面举几个例子:

1.统计当前目录下,py文件数量:

find . -name “*.py” |wc -l

2.统计当前目录下,所有py文件行数:

find . -name “*.py” |xargs cat|wc -l

3.统计当前目录下,所有py文件行数,并过滤空行:

find . -name “*.py” |xargs cat|grep -v ^$|wc -l

VNC中Tab键不能实现命令自动补全解决方法【轉】

【原文鏈接】

https://blog.csdn.net/zzq060143/article/details/78240687

【內容】

最近由于学习需要,跑tensorflow的实验,但是用VNC连接上服务器后打开的终端中Tab键居然不能自动补全命令,每次都要自己一个一个照着敲,实在忍不了了。出现这种状况的原因是Tab键被占用了,从而不能命令自动补全了,真是尴尬,下面来说下本人的解决方法,以方便大家高效的撸代码。。。

首先在桌面点击右键打开终端,然后切换到如下目录,由于不能Tab键补全,只能一个一个字母敲了。。。

cd ~/.config/xfce4/xfconf/xfce-perchannel-xml/

然后利用强大的vim编辑器打开xfce4-keyboard-shortcuts.xml文件
vim xfce4-keyboard-shortcuts.xml

打开之后,找到下面这一行
<property name=”<Super>Tab” type=”string” value=”switch_window_key”/>
如下图所示:

然后修改为:

<property name=”<Super>Tab” type=”empty”/>


最后保存退出,然后重启下,在此打开就可以了。。。

如何执行sudo命令时保留当前用户env变量【轉】

【原文鏈接】

https://blog.csdn.net/otengyue/article/details/79217563

【原文摘錄】

在linux环境中我们经常使用sudo命令执行root权限,但默认情况下sudo运行时,会默认重置环境变量为安全的环境变量,也即,但前设置的变量都会失效。可以通过如下设置来取消这种设置:
1、编辑sudoers文件
vim /etc/sudoers
注释掉:

#Defaults       env_reset
#Defaults       mail_badpass
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

添加

Defaults !env_reset

添加普通用户分配权限

zhangshan ALL=(ALL:ALL) ALL

这里写图片描述
2、添加特殊变量
从 1.6.9 版开始,在 sudo 执行给定的脚本或命令之前,会缩减一些系统环境变量(比如 LIBPATH)【其实就是一些包含path关键字的变量为了安全被缩减了】的设置。这会给在 sudo 下运行的现有命令造成问题。但是,在大多数情况下有办法解决。方法有很多,下面提供一种方法:
在普通用户的.profile或.bashrc中添加如下代码,下面添加PYTHONPATH和LD_LIBRARY_PATH为例:

export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64/
export PYTHONPATH=/export/songhongwei/code/py-faster-rcnn/caffe-fast-rcnn/python
alias sudo='sudo env PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH'

Linux 程序编译过程的来龙去脉【轉】

【原文鏈接】

https://blog.csdn.net/p23onzq/article/details/81977367

【原文摘錄】

大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类,一种是编译型语言,例如C,C++,Java,另一种是解释型语言,例如Python、Ruby、MATLAB 、JavaScript。

本文将介绍如何将高层的C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程,包括四个步骤:

  • 预处理(Preprocessing)
  • 编译(Compilation)
  • 汇编(Assembly)
  • 链接(Linking)

640?wx_fmt=png

GCC 工具链介绍

通常所说的GCC是GUN Compiler Collection的简称,是Linux系统上常用的编译工具。GCC工具链软件包括GCC、Binutils、C运行库等。

GCC

GCC(GNU C Compiler)是编译工具。本文所要介绍的将C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程即由编译器完成。

Binutils

一组二进制程序处理工具,包括:addr2line、ar、objcopy、objdump、as、ld、ldd、readelf、size等。这一组工具是开发和调试不可缺少的工具,分别简介如下:

  • addr2line:用来将程序地址转换成其所对应的程序源文件及所对应的代码行,也可以得到所对应的函数。该工具将帮助调试器在调试的过程中定位对应的源代码位置。
  • as:主要用于汇编,有关汇编的详细介绍请参见后文。
  • ld:主要用于链接,有关链接的详细介绍请参见后文。
  • ar:主要用于创建静态库。为了便于初学者理解,在此介绍动态库与静态库的概念:
    • 如果要将多个.o目标文件生成一个库文件,则存在两种类型的库,一种是静态库,另一种是动态库。
    • 在windows中静态库是以 .lib 为后缀的文件,共享库是以 .dll 为后缀的文件。在linux中静态库是以.a为后缀的文件,共享库是以.so为后缀的文件。
    • 静态库和动态库的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。在Linux系统中,可以用ldd命令查看一个可执行程序依赖的共享库。
    • 如果一个系统中存在多个需要同时运行的程序且这些程序之间存在共享库,那么采用动态库的形式将更节省内存。
  • ldd:可以用于查看一个可执行程序依赖的共享库。
  • objcopy:将一种对象文件翻译成另一种格式,譬如将.bin转换成.elf、或者将.elf转换成.bin等。
  • objdump:主要的作用是反汇编。有关反汇编的详细介绍,请参见后文。
  • readelf:显示有关ELF文件的信息,请参见后文了解更多信息。
  • size:列出可执行文件每个部分的尺寸和总尺寸,代码段、数据段、总大小等,请参见后文了解使用size的具体使用实例。

C运行库

C语言标准主要由两部分组成:一部分描述C的语法,另一部分描述C标准库。C标准库定义了一组标准头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义,譬如常见的printf函数便是一个C标准库函数,其原型定义在stdio头文件中。

C语言标准仅仅定义了C标准库函数原型,并没有提供实现。因此,C语言编译器通常需要一个C运行时库(C Run Time Libray,CRT)的支持。C运行时库又常简称为C运行库。与C语言类似,C++也定义了自己的标准,同时提供相关支持库,称为C++运行时库。

准备工作

由于GCC工具链主要是在Linux环境中进行使用,因此本文也将以Linux系统作为工作环境。为了能够演示编译的整个过程,本节先准备一个C语言编写的简单Hello程序作为示例,其源代码如下所示:

#include <stdio.h> 

//此程序很简单,仅仅打印一个Hello World的字符串。
int main(void)
{
  printf("Hello World! \n");
  return 0;
}

编译过程

1.预处理

预处理的过程主要包括以下过程:

  • 将所有的#define删除,并且展开所有的宏定义,并且处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等。
  • 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。
  • 删除所有注释“//”和“/* */”。
  • 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
  • 保留所有的#pragma编译器指令,后续编译过程需要使用它们。
    使用gcc进行预处理的命令如下:
$ gcc -E hello.c -o hello.i // 将源文件hello.c文件预处理生成hello.i
                        // GCC的选项-E使GCC在进行完预处理后即停止

hello.i文件可以作为普通文本文件打开进行查看,其代码片段如下所示:

// hello.i代码片段

extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));
# 942 "/usr/include/stdio.h" 3 4

# 2 "hello.c" 2


# 3 "hello.c"
int
main(void)
{
  printf("Hello World!" "\n");
  return 0;
}

2.编译

编译过程就是对预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。

使用gcc进行编译的命令如下:

$ gcc -S hello.i -o hello.s // 将预处理生成的hello.i文件编译生成汇编程序hello.s
                        // GCC的选项-S使GCC在执行完编译后停止,生成汇编程序

上述命令生成的汇编程序hello.s的代码片段如下所示,其全部为汇编代码。

// hello.s代码片段

main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    $.LC0, %edi
    call    puts
    movl    $0, %eax
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc

3.汇编

汇编过程调用对汇编代码进行处理,生成处理器能识别的指令,保存在后缀为.o的目标文件中。由于每一个汇编语句几乎都对应一条处理器指令,因此,汇编相对于编译过程比较简单,通过调用Binutils中的汇编器as根据汇编指令和处理器指令的对照表一一翻译即可。

当程序由多个源代码文件构成时,每个文件都要先完成汇编工作,生成.o目标文件后,才能进入下一步的链接工作。注意:目标文件已经是最终程序的某一部分了,但是在链接之前还不能执行。

使用gcc进行汇编的命令如下:

$ gcc -c hello.s -o hello.o // 将编译生成的hello.s文件汇编生成目标文件hello.o
                        // GCC的选项-c使GCC在执行完汇编后停止,生成目标文件
//或者直接调用as进行汇编
$ as -c hello.s -o hello.o //使用Binutils中的as将hello.s文件汇编生成目标文件

注意:hello.o目标文件为ELF(Executable and Linkable Format)格式的可重定向文件。

4.链接

链接也分为静态链接和动态链接,其要点如下:

  • 静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。链接器将函数的代码从其所在地(不同的目标文件或静态链接库中)拷贝到最终的可执行程序中。为创建可执行文件,链接器必须要完成的主要任务是:符号解析(把目标文件中符号的定义和引用联系起来)和重定位(把符号定义和内存地址对应起来然后修改所有对符号的引用)。
  • 动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。
    • 在Linux系统中,gcc编译链接时的动态库搜索路径的顺序通常为:首先从gcc命令的参数-L指定的路径寻找;再从环境变量LIBRARY_PATH指定的路径寻址;再从默认路径/lib、/usr/lib、/usr/local/lib寻找。
    • 在Linux系统中,执行二进制文件时的动态库搜索路径的顺序通常为:首先搜索编译目标代码时指定的动态库搜索路径;再从环境变量LD_LIBRARY_PATH指定的路径寻址;再从配置文件/etc/ld.so.conf中指定的动态库搜索路径;再从默认路径/lib、/usr/lib寻找。
    • 在Linux系统中,可以用ldd命令查看一个可执行程序依赖的共享库。

由于链接动态库和静态库的路径可能有重合,所以如果在路径中有同名的静态库文件和动态库文件,比如libtest.a和libtest.so,gcc链接时默认优先选择动态库,会链接libtest.so,如果要让gcc选择链接libtest.a则可以指定gcc选项-static,该选项会强制使用静态库进行链接。以Hello World为例:

  • 如果使用命令“gcc hello.c -o hello”则会使用动态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看)如下所示:
    $ gcc hello.c -o hello
    $ size hello  //使用size查看大小
       text    data     bss     dec     hex filename
       1183     552       8    1743     6cf     hello
    $ ldd hello //可以看出该可执行文件链接了很多其他动态库,主要是Linux的glibc动态库
            linux-vdso.so.1 =>  (0x00007fffefd7c000)
            libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fadcdd82000)
            /lib64/ld-linux-x86-64.so.2 (0x00007fadce14c000)
  • 如果使用命令“gcc -static hello.c -o hello”则会使用静态库进行链接,生成的ELF可执行文件的大小(使用Binutils的size命令查看)和链接的动态库(使用Binutils的ldd命令查看)如下所示:
    $ gcc -static hello.c -o hello
    $ size hello //使用size查看大小
         text    data     bss     dec     hex filename
     823726    7284    6360  837370   cc6fa     hello //可以看出text的代码尺寸变得极大
    $ ldd hello
           not a dynamic executable //说明没有链接动态库
    

链接器链接后生成的最终文件为ELF格式可执行文件,一个ELF可执行文件通常被链接为不同的段,常见的段譬如.text、.data、.rodata、.bss等段。

分析ELF文件

1.ELF文件的段

ELF文件格式如下图所示,位于ELF Header和Section Header Table之间的都是段(Section)。一个典型的ELF文件包含下面几个段:

  • .text:已编译程序的指令代码段。
  • .rodata:ro代表read only,即只读数据(譬如常数const)。
  • .data:已初始化的C程序全局变量和静态局部变量。
  • .bss:未初始化的C程序全局变量和静态局部变量。
  • .debug:调试符号表,调试器用此段的信息帮助调试。

640?wx_fmt=jpeg

可以使用readelf -S查看其各个section的信息如下:

$ readelf -S hello
There are 31 section headers, starting at offset 0x19d8:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
……
  [11] .init             PROGBITS         00000000004003c8  000003c8
       000000000000001a  0000000000000000  AX       0     0     4
……
  [14] .text             PROGBITS         0000000000400430  00000430
       0000000000000182  0000000000000000  AX       0     0     16
  [15] .fini             PROGBITS         00000000004005b4  000005b4
……

2.反汇编ELF

由于ELF文件无法被当做普通文本文件打开,如果希望直接查看一个ELF文件包含的指令和数据,需要使用反汇编的方法。

使用objdump -D对其进行反汇编如下:

$ objdump -D hello
……
0000000000400526 <main>:  // main标签的PC地址
//PC地址:指令编码                  指令的汇编格式
  400526:    55                          push   %rbp 
  400527:    48 89 e5                mov    %rsp,%rbp
  40052a:    bf c4 05 40 00          mov    $0x4005c4,%edi
  40052f:    e8 cc fe ff ff          callq  400400 <puts@plt>
  400534:    b8 00 00 00 00          mov    $0x0,%eax
  400539:    5d                      pop    %rbp
  40053a:    c3                          retq   
  40053b:    0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
……

使用objdump -S将其反汇编并且将其C语言源代码混合显示出来:

$ gcc -o hello -g hello.c //要加上-g选项
$ objdump -S hello
……
0000000000400526 <main>:
#include <stdio.h>

int
main(void)
{
  400526:    55                          push   %rbp
  400527:    48 89 e5                mov    %rsp,%rbp
  printf("Hello World!" "\n");
  40052a:    bf c4 05 40 00          mov    $0x4005c4,%edi
  40052f:    e8 cc fe ff ff          callq  400400 <puts@plt>
  return 0;
  400534:    b8 00 00 00 00          mov    $0x0,%eax
}
  400539:    5d                          pop    %rbp
  40053a:    c3                          retq   
  40053b:    0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
……

VNC Viewer 设置屏幕分辨率-解决屏幕分辨率问题【轉】

【原文鏈接】

https://blog.csdn.net/runningtortoises/article/details/51425332

【原文摘錄】

1.第一种方法:使用geometry参数进行调整

vncserver -geometry 1280×1024即可,之后通过window下vnc连接后的ubuntu分辨率即为1280×1024了,注意这里的X是小写的x而不是*

2.第二种方法:修改配置文件vncservers

[root@secdb ~]# vi /etc/sysconfig/vncservers
# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the line below to start a VNC server on display :1
# as my ‘myusername’ (adjust this to your own).  You will also
# need to set a VNC password; run ‘man vncpasswd’ to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see
# .

# VNCSERVERS=”1:myusername”
# VNCSERVERARGS[1]=”-geometry 800×600″
VNCSERVERS=”1:root 2:oracle”
VNCSERVERARGS[1]=”-geometry 1024×768″
VNCSERVERARGS[2]=”-geometry 1024×768″

例如我们可以将最后一行内容调整为如下
VNCSERVERARGS[2]=”-geometry 800×600″

重启vncserver后,使用“192.168.23.102:2”登录VNC便会得到一个800×600的操作窗口,用户是oracle。
[root@secdb ~]# /etc/init.d/vncserver restart
Shutting down VNC server: 1:root 2:oracle              [  OK  ]
Starting VNC server: 1:root 2:oracle                   [  OK  ]

configure: error: cannot compute suffix of object files: cannot compile【轉】

【原文鏈接】

https://blog.csdn.net/testcs_dn/article/details/45437149

【原文摘錄】

CentOS 6.5下安装gcc-4.8.4 make的时候提示以下错误:
configure: error: cannot compute suffix of object files: cannot compile

解决办法:
我的gmp, mpfr, mpc都是使用默认参数安装的,没指定任何参数

./configure
make
make install

所以直接使用下面的命令设置环境变量就可以了:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

如果安装时指定了安装目录,使用类似下面的命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gcc-4.6.3/mpc-0.9/mpc_install/lib:/opt/gcc-4.6.3/gmp-5.0.4/gmp_install/lib:/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install/lib

Cygwin安装类似apt-get的包管理工具——apt-cyg【轉】

【原文鏈接】

https://blog.csdn.net/atekiryu/article/details/52299957

【原文摘錄】

Cygwin可以在winodws下模拟*unix,可以在上面运行*unix的软件。当Cygwin缺少软件包时,通常需要重新运行Cygwin安装程序setup-x86_64.exe 或者setup-x86.exe,来选择未安装的软件,进行安装。

但是这样很不方便,后来发现apt-cyg这个软件,可以和ubuntu下的apt-get一样方便的管理软件包。https://github.com/transcode-open/apt-cyg

文档给出的安装方法为:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

网络原因,经常安装失败。那么可以自己手动下载github中的apt-cyg文件,放到windows 的Cygwin安装目录中去,这样就可以在Cygwin命令行中找到该文件,在该文件的目录中运行

install apt-cyg /bin

apt-cyg便安装成功了,这样就可以像使用apt-get一样方便的管理软件了。

linux内核配置make menuconfig菜单无法进行删除操作【轉】

【原文鏈接】

https://blog.csdn.net/zengxianyang/article/details/47616125

【原文摘錄】

问题背景:

这是我当初在编译Linux内核的时候出现的一个小插曲错误,当时使用secureCRT登陆自己的Linux系统,在配置内核的时候,我按照项目需求,要在内核中删除“broadcom linux”标识,可是出现一个奇怪的现象,进入make menuconfig界面的时候居然删除不了!我那时郁闷啊,以为是权限的问题什么的,后来经人指导才知道,原来是secureCRT设置的问题!

问题解决:

点击secureCRT的选项—>会话选项—>终端—>映射键,在右边的菜单框中,把其他映射选项下的“Backspace 发送delete(B)”选项勾上就可以解决问题了。具体操作如下图所示: