zoukankan      html  css  js  c++  java
  • Ubuntu16.04使用所遇问题记录

      记录笔者在使用Ubuntu系统过程中所遇到过的错误/问题和解决方案。本机系统为Ubuntu 16.04 LTS,64-bit。

      目前已有的解决方案:

      (1)Ubuntu安装搜狗输入法

      (2)Windows+Linux双系统导致时间显示不一致

      (3)删除/etc目录后恢复和补救

      (4)64位系统对32位程序的支持

      (5)/boot分区饱和和拓展问题

      (6)使用apt-get install 报错的问题

      (7)通过 sudo apt install git-all 安装 git 出错

      (8)Ubuntu下使用tar.gz包为FireFox安装Flash插件

      (9)Ubuntu设置开机自启动应用的问题

      (10)Linux环境下安装和配置qtcreator的问题

      (11)Ubuntu环境下安装 Capstone 和 ROPgadget

      (12)Ubuntu环境下包管理工具 apt-get 和 dpkg 进行软件安装和卸载

      (13)安装 Ubuntu 18.04 后经常死机——关于安装显卡驱动的问题

    1.输入法设置--安装了搜狗拼音的linux版本

      由于尝试了多种解决方案,可能使得各个步骤混淆在一起,这里只列出自己尝试过的操作,而不是具体的某一种方法。

      (1)将System Setting->Language Support中的Keyboard input method system选项改为fcitx;

      (2)在Install/Remove Language弹出的对话框中将Chinese语言包选择,点击apply。完成中文语言包的安装;

      (3)在搜狗官网下载sogou for linux的deb安装包,这里笔者直接通过点击进行安装,没有报错,也可通过命令sudo dpkg -i 安装包路径 进行安装,典型的路径是~/Downloads/**.deb;

      (4)在System Setting->Text Entry->Input sources to use中点击“+”按钮,找到Sogou Pinyin(Fcitx),进行添加,右侧还可以选择切换的快捷键方式;

      (5)选中(4)中添加的输入法项,点击界面右下角形如扳手的按钮,进入到Input Method Configuration,点击左下角的“+”按钮,寻找Sogou的输入方式,若未找到,可以点击取消下方的Only Show Current Language,选择Sogou的输入方式,点击OK即可,此时应该已经可以根据已设置的切换快捷键进行输入方式的切换。

      若上述方法没有效果时,可以重复(1)(2)步骤,如现将输入方式修改为ibus,并将(2)中的Chinese语言包卸载后重装,之后再改为fcitx,并重启,即可继续上述步骤。

    2.Windows和Ubuntu的双系统,使用时系统时间不一致问题(参见UbuntuTime)

      主要针对安装 Windows 和 Ubuntu 双系统时,在切换不同的系统时,两者的时间显示会不一致的问题。

      问题产生的原因在于 Windows 与 linux 默认的设置硬件时钟(hardware clock)的方式不同。Windows将硬件时间设置为本地时间(localtime)而Ubuntu默认设置为UTC时间。也就是说,当在7:00PM关机时,Windows会将硬件时钟设置为7:00PM,硬件以这个时间为基准继续计时,开机时读取到的也是正确的本地时间。而对于Ubuntu,系统默认会将7:00PM转化为UTC时间进行存储,而启动时再将读取的硬件时钟的时间转化为本地时间。这样就会造成Ubuntu关机之后,Windows开机时时间会出现问题的情况。

      解决方法:

      1.禁用UTC而使用本地时间。对于老版本的ubuntu,将Ubuntu的配置文件/etc/default/rcS中关于UTC的选项由yes转换为no。对于较新的版本,可以使用命令sudo timedatectl set-local-rtc 1即可以进行设置。相应的关闭使用本地时间功能可以使用sudo timedatectl set-local-rtc 0;

      2.将Windows设置为使用UTC时间( 在Windows8.1和Windows10中验证通过 )。桌面右下角windows图标-->右键,运行-->regedit,选择HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->TimeZoneInformation,出现关于时间信息的注册表项,右键新建-->DWORD(32位)/QWORD(64位)(位数根据系统位数确定)-->将项目名称改为RealTimeIsUniversal-->将值改为1,格式为16进制。或则参考链接中的方法,即新建一个注册表文件来实现相同的功能。

    3.关于删除了/etc目录之后的补救O.O(有备份)

      在练习使用打包命令tar的过程中产生事故。笔者练习使用tar指令将/etc进行打包。并在/tmp新建了一个/etc目录以供解压,解压时发现tar产生的文件的解压结果是生成完整的/etc目录,从而产生了/tmp/etc/etc的目录结构。于是进入/tmp/etc目录,想将里面重复的/etc目录使用rm -rf命令删除掉。结果想当然的使用了rm -rf /etc命令...发现/tmp/etc文件下的/etc目录仍然存在...然后突然意识到自己用绝对路径删除掉了/etc文件夹。

      补救过程:

      (1)由于是tar命令的练习,所以有/etc文件生成的压缩文件存在。尝试将压缩文件再解压到根目录下,提示permission denied。尝试使用sudo命令,提示无法识别uid,推测是因为关于用户信息的/etc/passwd和/etc/shadow等文件已经被删除了;

      (2)尝试上网查找资料,结果发现网络链接不可用。原因和配置文件缺失也有关系;

      (3)想到以前看到过的重启进入单用户调试模式尝试进行修复,但是由于/etc目录缺失,担心可能进入不了单用户模式,而且一旦关机将再无法进入系统(/etc目录没有了),所以没有进行这一种方法的尝试;

      (4)由于文件系统中是存在/etc的备份的,所需要的是找到root权限将备份文件写回原来的/etc目录,但是当前系统由于没有了/etc目录又无法提升权限。最终想到了使用live CD的方法。即借助装有linux安装程序的U盘,设置BIOS从U盘启动,再使用安装程序所自带的试用选项。此时将可以使用sudo进行权限的提升。在进入试用模式后,使用sudo fdisk /dev/sda(不同设备的设备名可能不同)得到系统的磁盘分区情况,分别将需要的文件系统挂载(在笔者情况下,是分别挂载了/和/home),然后使用sudo命令将备份的信息写回挂载的根目录即可。最后再重新启动,发现可以正常进入系统了,问题解决!

      联想:既然可以通过Ubuntu的Live CD使用备份文件恢复/etc文件夹,是否可以在Live CD上进行新建用户等操作,再直接将Live CD的/etc用于被删除的/etc的恢复?这样虽然会有部分配置文件会丢失,但是在没有备份的情况下比重装系统的性价比还是大不少?当然对于配置环境较多的系统,首先还是经常备份。

      经验与教训:

      (1)linux命令中敲击命令时千万不要想当然,特别是对于root权限,带来极大的便利的同时也可能孕育魔鬼,对于命令的作用和潜在效果一定要做重审;

      (2)对与linux中的路径问题,只存在绝对路径和相对路径两种情况,对应产生问题的命令,使用相对路径就应该为./etc,而使用绝对路径时就应该使用/tmp/etc/etc的完整路径名,使用/etc会被认作绝对路径,从而造成问题;

      (3)备份是十分重要的。这次问题能够解决一定程度上要感谢是在练习使用打包指令tar,从而存在备份,否则会有更大的麻烦。相对的,若是存在备份,再借助live CD的强大功能,便可以解决很多问题。所以有备份的习惯,做好的备份,会在关键时刻帮上很大的忙。

    4.在64位Ubuntu环境下运行32位程序的问题

      在做CSAPP配套的buffer实验时发现实验提供的hex2raw为64位程序,无法在32位环境中使用(可通过命令 file execname 来查看文件的相关信息 ),切换至64位环境后,发现另一个程序bufbomb为32位,理论上可以在64位环境下运行,但实际使用 ./bufbomb 命令运行时,bash总是报错 bash: ./bufbomb: No such file or directory。可以看到设备还无法处理32位程序。

       通过搜索后发现,在Ubuntu64位环境下想要执行32位程序需要安装额外的32位兼容的库。找到的答案有:

      收集到的一些信息有:

      (1)在Ubuntu13.10版本之前,可以通过一个安装包 ia32-libs 来安装32位程序所需的环境;

      (2)对Ubuntu13.10以后的版本,如果只是运行单个程序的需求,则可以查看试图运行程序时系统的提示信息,如缺失某个函数库,则可以通过 sudo apt-get install libname:i386安装对应的i386体系库解决;

      (3)也可以直接将i386体系结构下的常用库安装,从而使得64位系统提供32位程序的兼容;使用 sudo dpkg --add-architecture i386 将i386架构列入无需使用 --force-architecture 选项指定就能安装的安装包的体系列表中。再安装32位程序运行常用的库文件,sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386,即可运行。(主要参考askubuntu
      

      后续:

      1.除了可以使得64bit机器运行32bit程序外,有时还需要能在64bit环境下进行32bit程序的编译( gcc的-m32 选项),笔者通过命令 sudo apt-get install gcc-multilib 安装了编译32bit C程序所需的函数库(同样若需要支持C++,则安装g++-multilib),从而可以实现将程序编译为32bit结构(可参考stackoverflow)。可以解决诸如 "bits/c++config.h: No such file or directory" 等问题
      2.在新安装的 Ubuntu 系统中,可能默认并不包含进行 C/C++ 开发所需的开发环境如 gcc 、g++ 以及编译所依赖的一些标准库等,可通过命令 sudo apt-get install build-essential 来安装开发所需的必要的软件。

    5.关于/boot分区经常空间饱和的问题

      最初安装系统时为/boot单独建立分区并分配了大致120M左右的空间,觉得应该够用,结果发现在进行OS更新时,会将新的内核文件也放置在/boot文件夹下,直接导致/boot剩余空间不足系统报错的情况,所以需要进行一定的调整。主要收集到的解决方案有一下几种:

      (1)可以进入/boot目录,若该目录下存在有多个内核版本的内核文件,则可以对旧的内核文件进行删除,操作一定要慎重,不要删除正在使用的内核文件,可通过 uname -r 查看正在使用的内核版本,不要在正在进行OS更新时使用此操作;

        uname -r    //查看当前使用的内核版本

      (2)使用命令sudo apt-get autoremove,apt-get的autoremove选项会将之前为满足其他包的依赖关系而自动下载但现在不再需要的包删除。使用该命令会删除部分在/boot中的旧内核文件(但不限于此)。还可以在此命令上加上--purge参数,在删除上述文件时会将对应的配置文件也删除,该种方法可能也需要一部分剩余的/boot空间,所以更适合正常情况下的空间清理,而无法用在/boot接近饱和时进行清理。

        sudo apt-get autoremove     //自动删除系统已不需要的安装包
        sudo apt-get --purge autoremove    //删除对象包括旧的内核文件

      (3)使用live CD的方法,通过其中的GParted工具重新调整分区的大小,减少某些分区的大小,从而将空间分配给/boot。Gparted软件目前好像只包含在Ubuntu的Live CD版本中。可以通过从U盘启动进入Live CD,选择试用Ubuntu,在软件搜索中键入GParted,即可找到对应的软件。在GParted界面中,选中正确的硬盘(界面右上角)和分区,右键选择resize,可以通过拖动图标或键入数字的方式设置想要修改的分区大小。在所有的修改设置完成后,点击界面上方的 √ 按钮,则开始执行之前的设置操作。

      注意:修改/boot分区可能会影响系统的再次启动(笔者本次的操作中并未遇到),对于数据分区的操作应该提前做好备份操作。

      可以参考教程:How to Resize Your Ubuntu Partitions

      (4)在Ubuntu论坛中看到的一个方案,在合适的目录新建一个足够空间的文件夹,并将原/boot目录下的文件复制至该文件夹,再修改/etc/fstab中的挂载关系,使得系统在启动时挂载新建的文件夹。个人认为只是新建一个文件夹是无法进行挂载的,若设备上尚有较大的未分配的空间,可以使用fdisk先建立一个大小合适的分区,再将/boot内容复制(部分数据应该需要使用dd而不是简单的cp)至新分区,此时修改/etc/fstab中的挂载关系应该是可行的。感觉这种方法较之使用GParted由于没有移动和修改其他分区的数据似乎更稳妥一点,但首先需要有未分配的额外空间,其次可能需要修改一些开机有关的信息(如grub的信息),笔者并未进行尝试,仅在此陈述思路。

      

    6.关于使用 apt-get install 出现如下错误信息的解决方案 

    E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
    E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
    

      从报错的字面信息来看,主要是由于无法对于需要运行的进程上锁,且系统询问是否有另外一个进程在使用锁。这是由于使用apt命令时,相应的进程会被上锁,进程结束时则会释放锁。但若是某个进程在运行过程中受阻,则锁无法释放,使得后续的需要加锁的进程也无法运行。

      解决方法:

      (1)根据系统的提示,检查是否真的有另外一个apt进程在使用锁。使用命令 ps aux | grep apt 显示所有名字包含apt的进程,查看该进程运行状态是否正常,若是运行停滞状态,则可以使用kill pid的方式将其强制结束.注意,上述进程也有可能是正常运行的apt进程(如正在正常进行之前指定的安装操作),该情况下应该等待进程的进程结束,而不是将其强制停止。上述方法对于apt-get进程较为有效。

      (2)上述情况很容易发生在用户刚进入Ubuntu即进行apt操作的过程中,这好像是由于Ubuntu的一些新的版本中引入了自动更新的功能,系统在每次开机后会检查是否有新的版本更新,并自动进行更新操作而不需要用户的参与。可以权衡一下是否需要关闭该操作,若用户可以坚持手动更新,可以选择将此服务关闭。

    sudo systemctl disable apt-daily.service # 使得自动更新服务不再开机启动
    sudo systemctl disable apt-daily.timer   # 使得timer不再能用

      相应的启动该服务只需将上述命令中的disable修改位enable即可。主要参考这里。

      (3)删除与apt的锁操作有关的文件夹。建议只有所有的方法都不管用的情况下使用该操作,可以参考这里的第一个回答。

    7.使用 sudo apt install git-all 安装 git 时出错

      在Ubuntu 16.04 通过 sudo apt install git-all 命令安装 git 时出现错误,报错信息包括 "Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused" 和 "Errors were encountered while processing:  runit  git-daemon-run "。

      问题原因:可以看到报错信息显示无法连接至Upstart。这是由于自Ubuntu15.04开始,Ubuntu将各版本的服务框架(service framework)由upstart转换至了Systemd。

        关于Upstart与Systemd比较,可以参考: Linux初始化init系统介绍

      笔者在安装git的过程中遇到该问题,收集到的信息中,主要的两种修正建议是(1) 将服务框架修改为Upstart; (2)将需要Upstart服务框架的作业切换至Systemd。

      具体操作步骤有:

      (1)使用命令 ps -p1 | grep systemd && echo systemd || echo upstart 可以查看当前系统正在运行的系统服务框架是upstart或systemed,笔者的显示为systemd;

      (2)将系统服务框架转换为upstart。首先安装upstart -sysv包,系统会同时删除ubuntu -standard 和system -sysv 包,之后执行命令 sudo update -initramfs -u,之后系统会转为使用upstart服务框架(笔者并未尝试,也不是很推荐。相应的如果想要回归Systemd框架,则需安装ubuntu-standard和system-sysv包。另有用户反应在16.04版本的Ubuntu中的上述操作会出现系统问题,故操作前请慎重考虑并认真参考资料。参考askUbuntuSystemdForUpstartUser);

      (3)解决待安装的包对于Upstart框架的依赖问题。主要参考这里的第一个回答。即当安装失败时,安装包处于一个安装的中间状态,可以在/var/lib/dpkg/info文件夹下找到一个runit.postinst文件,该文件主要描述安装后(post - installation)需要执行的一些脚本,问题在于该脚本似乎尝试使用了两种不同的框架,可以在上述文件中通过在行首加 '#' 注释掉依赖Upstart服务的脚本,再使用命令 sudo apt-get install -f 继续安装即可

      

      (4)除以上提供的方法外,网上还存在的一种思路是将已安装的 git 相关程序卸载,并重新安装 git。

      使用以下命令,主要参考这里的回答。注意,这里重新安装的是 git 而不是之前安装的 git-all。 

        sudo apt-get purge runit
        sudo apt-get purge git-all
        sudo apt-get purge git
        sudo apt-get autoremove
        sudo apt update
        sudo apt install git       

     

    8.Ubuntu下使用tar.gz包为FireFox安装Flash插件

      (1)首先在官网上下载对应的tar.gz安装包,并将其解压至指定的目录,使用tar命令

        tar -xzvf flash.tar.gz -C dir_name    //将flash安装包解压值dir_name指定的目录下

      (2)在解压后文件中存在libflashplayer.so、readme.txt和usr目录,其中readme.txt记录了详细的安装流程

      (3)将libflashplayer.so复制至firefox的插件目录中,在笔者电脑中,是/usr/lib/firefox-addons/plugins 目录(不同系统和应用版本该目录可能不同)

        sudo cp 解压目录/libflashplayer.so  firfox插件目录

      并将解压文件中的usr目录复制至Linux的/usr目录

        sudo cp -r 解压目录/usr/*  /usr        //    注意前者是解压文件中的目录路径,后者为系统的usr目录路径

      之后重启Firefox即可使用Flash。

     

    9.Ubuntu设置开机自启动应用的问题

      最近为系统安装了Shadowsocks-qt5客户端,为了更方便的使用代理服务,需要客户端能在开机时自动启动并建立连接。但是通过客户端的图形化界面设置的开机时自动启动并没有产生作用,所以考虑通过系统设置开机启动应用,来保证开机自动启动该客户端。

      尝试了以下两种方式:

      1.通过添加脚本的方式设置启动项。在Ubuntu系统中,init进程在进行一系列初始化和设置时,会在最后执行/etc/init.d/rc.local脚本,而该脚本会执行位于文件/etc/rc.local中的脚本命令,该文件默认为空,用户可以通过编辑该文件设置需要在启动时被自动加载的命令脚本(从而在init初始化阶段即启动),而不必等到用户登录。具体设置可以参考这里

      笔者通过该种方法进行了尝试(即在该文件中加入了启动客户端的命令行指令),但没有效果。通过命令 systemctl status rc-local.service 获得了失败的原因。

      

      可以看到使用该种方法试图运行客户端时出现了一些服务和设置上的错误。笔者猜测可能直接添加脚本的方式并不适合启动图形化界面的客户端,因为可能某些环境需要在用户登录后才能具备。

      2.通过Startup Applications设置开机启动的应用。在Ubuntu上搜索 Startup Applications,点击进入,可以编辑需要开机启动的应用名称。通过设置对应的Name、执行的命令等,即设定自动启动的应用。

      

      其中command命令可以通过Browse来指定对应文件,还可以添加一些辅助可执行命令用于控制等。事实上,可以通过Startup Applications 设置自动启动的命令、任务等等,而不仅限于自动启动的应用,可以参考这里。笔者使用这种方法成功的将客户端设置为了开机自动启动应用。

      Startup Applications中成功配置后,在~/.config/autostart 目录下会多出一个对应的条目xxx.desktop,如图所示

      

      可以看到该条目记录了条目类型、是否隐藏图标、是否能够启动等关键参数,由于是放置在当前用户的文件夹中,故而只有当前用户登录时才会根据该条目内容起到自动启动的效果。

      

    10.Linux环境下安装和配置qtcreator的问题

      --->通过Ubuntu的apt-get命令安装了qt,但实际运行时产生报错:Cannot start '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake':no such file or directory.

       (1)通过apt-get命令直接安装qtcreator;  

         sudo apt-get install openjdk-8-jre qtcreator build-essential    //其中openjdk应选择对应版本(可键入openjdk通过两次tab键展示所有备选包,再选择合适版本的jdk,如qt5好像不支持openjdk-9-jre)

       (2)安装完成后,通过命令 qtcreator 运行程序,显示了如图所示的错误,但程序可以正常运行,即证明这里缺失的是qt在运行过程中的一个组件;

         

         (3)在qtcreator的Options-> build&run 窗口中,查看到qt默认的qmake是在/usr/lib/x86_64-linux-gnu/qt5/bin目录下;

       

       根据应用反映的信息,似乎在上述目录下存在/qt4和/qt5两个目录。于是查看了/usr/lib/x86_64-linux-gnu/目录,验证了之前的思想,其中qt4/bin文件夹下只存在一个可执行文件qdbus,这也是之前报错在  /qt4/bin目录下无法找到qmake原因,而相应的,在qt5//bin目录下则存在有qmake可执行文件,所以问题的关键是将qtcreator启动时默认使用的目录切换至qt5而不是之前显示的qt4.同时在/usr/lib/x86_64-   linux-gnu目录下还存在以下几个与qt相关的目录,猜想qtchooser与qt的设置有一定的关系。事实上,通过 man qtchooser 确实获得了对 qtchooser 命令的帮助文档。

       

       (4)根据 qtchooser的帮助文档,使用 -list-versions 参数会根据配置文件显示所有可用的qt版本,而 -print-env 命令则输出qt目前使用的环境变量,而 -qt = version 命令则选择指定的qt版本。

      笔者使用qtchooser -list-versions 命令输出结果:

       

       使用 qtchooser -print-env 命令输出结果:

       

      ( 该段现仅供解决方案的一种参考,可能不需要尝试。可以看到,这里的QT_SELECT变量的值为default,理论上通过命令 qtchooser -qt = qt5 将该变量直接设置为使用 qt5 版本即可解决问题(但笔者使用 -qt=qt5 参数时,输出无法识别参数的问题)。事实上,之前的截图中可以看到,/usr/lib/x86_64-linux-gnu/目录下存在qt-default目录,即为上述 default 选项的配置文件目录,修改其中的配置内容,使其使用qt5的目录也可达成同样的效果。)

      

      通过 sudo apt-get install qt5-default  并重启解决问题。笔者后来由于重装系统需要再次安装 qtcreator 时,发现仅通过该命令即可将问题解决。该命令还可以解决在qtcreator界面下中,tools -> options -> build & run 选项下中的 qt version 一项中显示了错误标志,下方显示 "QT version is not properly installed..."信息的问题。

      其他:该问题是由于默认的配置文件指向了错误的路径(qt4,其中不含有相应的可执行文件,而qt5中拥有),故而可以通过修改配置文件中的路径解决。但该报错也有可能是由于系统上本身就不存在qmake组件造成的,所以若上述方法没有作用,可尝试下在对应的qt版本的qmake,如sudo apt-get install qt5-qmake,可以参考stackoverflowaskubuntu的两个问题的回答和评论。  

      

      --->在qtcreator界面下,界面上方不存在菜单栏

      

      实际上菜单栏是存在的,在整个屏幕的左上角,在小窗口模式下,菜单栏并没有显示在该小窗口中,而是位于主屏幕左上角,移动鼠标至相应位置即可显示。事实上,menu菜单的显示位置可以在系统自带的设置中进行调整。在System Settings -> Appearance -> behavior -> Show the menus for a windows 条目中,可以选择是否将菜单栏显示在窗口的标题栏位置,但一般而言菜单工具栏均需要鼠标移动至对应位置时,才会显示出来。

     

    11.Ubuntu环境下安装 Capstone 和 ROPgadget

      在实现缓冲区溢出漏洞攻击中的 ROP 技术时,需要通过搜索程序扫描目标程序,从中获取可用的指令序列片段,从而构造出完整的 ROP 执行链。ROPgadget 为一款较为优秀的二进制指令序列搜索程序,这里为其位于 Github 上的主页在。以下内容记录安装 ROPgadget 所需的 Capstone 环境进而安装 ROPgadget 的步骤。

      安装 Capstone

      通过 Capstone 官方网站的文档获得 Capstone 的下载安装信息。安装 Capstone 主要分为两步进行:(1)安装 Capstone 的核心引擎( essential core engine ); (2)安装对应语言版本的关联程序( 这里安装的是 Python 相关的程序,其他语言支持见这里 );

      (1)Ubuntu 和 Debian 通过以下指令安装 Capstone 的核心二进制包,其它平台可参考官方文档的描述。

        sudo apt-get install libcapstone3    //安装 Capstone 的核心二进制包

      (2)从官网下载页面的 Source archive 部分下载 Capstone 的程序包。这里笔者下载的是 .tgz 压缩文件,其适用于 Java 和 Python 环境。

        tar -zxvf 压缩文件路径 -C ~    //将下载获得的压缩文件解压至用户根目录下

      进入该目录下的 bindings/python 目录,并执行以下命令进行安装。注意:在安装对应语言的 bindings 时必须安装 Capstone 的核心组件,即进行步骤1.

        cd bindings/python  //进入 python 目录  
        sudo make install    //进行安装

      安装 ROPgadget

      (1)通过 git 获得 ROPgadget 项目仓库,git 的安装可参见xxxx。

        git clone -b master http://github.com/JonathanSalwan/ROPgadget.git    //获取对应的项目仓库

      (2)进入用户主目录下的 ROPgadget 目录,执行以下命令完成安装过程。安装完成后,即可通过 ROPgadget 命令执行用户所需的操作。

        python setup.py install    //安装 ROPgadget

      问题

      在 ROPgadget 的安装过程中,可能会报错"ImportError: No module named setuptools",这是由于 ROPgadget 目录中提供的 setup.py 文件需要 setuptools 包所造成的。

      

      直接通过以下命令安装所需的 setuptools 包即可,主要参考这里

      sudo apt-get install python-setuptools  //对于 Python 3.x,应该安装 python3-setuptools 

       常用的 ROPgadget 指令参数记录

        --binary hello     //指定对名为 hello 的二进制文件进行搜索
        --only key          //只显示特定 key 指定的指令
        --string key        //在可读段中搜索字符串 key

       示例:

      ROPgadget --binary hello --only ' pop | ret ' | grep eax  //搜索 hello 程序中只包含 pop 或 ret 指令的指令片段,并将其中包含 eax 的片段筛选出来

      ROPgadget --binary hello --string '/bin/sh'       //搜索 hello 程序中是否包含有字符串'/bin/sh'

     

    12.Ubuntu环境下包管理工具 apt-get 进行软件安装和卸载

      Ubuntu环境下使用 apt-get 作为包管理工具,进行软件的安装和卸载的常用命令如下所示(需要 root 权限如使用 sudo ):

      apt-get 进行包的安装和卸载

      apt-get install package_name    //安装名为 package_name 的程序,注意给出的名称为包的名称而不是全名

      apt-get remove package_name   //卸载名为 package_name 的程序,只用于删除包,注意会保留包的配置文件

      apt-get purge package_name    //卸载名为 package_name 的程序(包括配置文件)

      另附上一些 apt-get 可用的参数:

      clean    //会删除/var/cache/apt/archives/ 和/var/cache/apt/archives/partial/目录下除lock目录以外的所有文件(从而释放部分空间)

      autoremove //会删除之前为满足其他包的依赖关系而自动下载但现在不再需要的包,如老版本的某些库等

      update    //会获取/etc/apt/sources.list中指定的源中的包,从而确定可供更新的软件包的版本信息

      upgrade    //会将目前系统上安装的所有包更新至最新版本,更新的源在/etc/apt/sources.list中给出,该命令需在update之后使用

      source   //获取对应包的源代码文件,可用于软件的源码编译等过程

      

      使用 apt-cache 进行包查找,用于查找所需包的信息

      apt-cache search key_word  //搜索与关键字相关的包

      apt-cache show key_word  //显示对应包的相关的信息

      dpkg -l            //显示所有已安装包的信息

      在进行一般的删除操作时,用户可以通过以下命令较为干净的删除对应应用包的数据。

          sudo apt-get purge package_name    //删除对应的包及其配置文件
          sudo apt-get autoremove            //自动清除那些已经不再被需要的依赖包

      进一步的删除操作还可以将当前主目录下.config 目录中对应的配置文件删除,即将 ~/.config 文件夹下所有与待卸载应用相关的文件全部删除。

       

      使用 dpkg 安装应用包

      某些情况下,用户从网站上下载到的是某些安装软件的 .deb 安装包,用户可通过命令行的方式进行安装。 

      (1)通过 dpkg 命令安装所获得的 .deb 安装包

        dpkg -i /path/to/xxx.deb        //命令行安装 .deb 安装包

      (2)若当前设备上存在待安装的 .deb 软件所需要的依赖库的缺失时,会导致安装过程的失败,此时应通过 apt 命令安装所有缺失的软件依赖项。

        sudo apt install -f        //安装之前安装过程中缺失的依赖项,-f 选项为 --fix-broken 选项的简写,使得系统尝试解决缺失的依赖项

      (3)在安装完软件所确实的依赖项之后,再次进行 .deb 文件的安装即可。

       dkpg 的部分有用参数记录:

        dpkg -i xx.deb           //安装对应的数据包
        dpkg -l                        //显示所有安装应用的信息
        dpkg --remove app_name               //删除一个已安装的包(卸载),保留配置文件
        dpkg --purge app_name                  //同上,但删除配置文件,简化参数为 -P 

      13.安装 Ubuntu 18.04 后经常死机——关于安装显卡驱动的问题

      在实验室的主机上安装 Ubuntu 18.04 后,经常出现系统死机,只有鼠标可移动而键盘输入无响应的情况(无法通过 Ctrl + Alt + F1 等方式打开命令行进行操作),从而需要通过电源键强制关机的方法来重启系统,而经常性的这样无疑为电脑上进行的功过产生了极大的妨碍和影响。通过查找网上的资料发现,系统死机很可能是由于显卡驱动不适配造成的,故而这里记录下简单的 Ubuntu 系统下与显卡驱动的命令和操作,以供不时之需。主要的命令及步骤来自MuyuXiaoxiang的博客

      (1) 查看当前设备上显卡情况

      用户可以通过 Ubuntu 系统内置的命令查看当前设备上显卡的情况。

        lspci -k | grep -A 2 -i "VGA"        //查看当前设备上的显卡情况

      如笔者的电脑上即可看到当前设备上存在的显卡设备为 NVIDIA Quadro K4000.

       

      (2) 查看当前系统中使用的相对应的硬件的驱动程序,可在菜单栏搜索 Software&Updates ( 或直接通过终端输入命令 software-properties-gtk )打开软件及更新工具栏,在 Additional Drivers 中即可看到当前显卡使用的驱动程序。一般而言 Ubuntu 默认使用的是开源驱动程序 Nouveau,同时系统也应该会给出若干个其他可选驱动的条目。

      

      (3) 查看当前显卡所推荐使用的显卡驱动程序。

        sudo ubuntu-drivers devices    //查看当前显卡所适用的驱动程序

      可以看到存在某一个驱动版本后面带有"recommended"关键字,即为当前显卡推荐使用的驱动程序。

       

      (4) 设置使用推荐的显卡驱动。

      在(2)步骤中,若 Addtional Drivers 一栏中已经存在推荐的显卡驱动程序的选项,则直接点选,并点击应用修改( Apply Changes )即可。若在上述提供的菜单项中不存在对应的推荐显卡驱动程序,则通过 apt-get 直接安装对应的驱动程序。

        sudo apt-get install nvida-driver-390    //安装对应的显卡驱动程序

       在安装完成后,在 Software&Updates 的 Additional Drivers 中直接点选对应的驱动程序即可。在完成配置后,需要重启设备使得设置生效。

      (5) 对于 NVIDA 显卡,可通过命令行输入 nvida-settings 打开显卡的管理界面,进行一些显卡配置的管理工作。若当前支持 NVIDA 的 prime,则可以通过 PRIME Profiles 来完成切换使用的显卡等操作。

  • 相关阅读:
    python中关于操作时间的方法(一):使用time模块
    size_t类型
    批量下载网络图片并zip打包
    遇到的java面试题
    jsp中button与submit的用法
    springmvc json字符串转化成json对象
    Cas 介绍及使用
    java中post时中文乱码
    mybatis使用generator生成对应的model、mapping配置文件、dao
    移动端接口:java写get方式访问数据(springmvc+spring。。。)
  • 原文地址:https://www.cnblogs.com/yhjoker/p/7435012.html
Copyright © 2011-2022 走看看