共 426 篇文章

标签:技术文档 第38页

Linux内核私闯进程地址空间并修改进程内存的方法-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Linux内核私闯进程地址空间并修改进程内存的方法

进程地址空间的隔离 是现代操作系统的一个显著特征。这也是区别于 “古代”操作系统 的显著特征。 进程地址空间隔离意味着进程P1无法以随意的方式访问进程P2的内存,除非这块内存被声明是共享的。 这非常容易理解,我举个例子。 我们知道,在原始野人社会,是没有家庭的观念的,所有的资源都是部落内共享的,所有的野人都可以以任意的方式在任意时间和任何其他野人交互。类似Dos这样的操作系统就是这样的,内存地址空间并没有隔离。进程可以随意访问其它进程的内存。 后来有了家庭的观念,家庭的资源被隔离,人们便不能私闯民宅了,人们无法以随意的方式进入别人的家用别人的东西,除非这是主人允许的。操作系统进入现代模式后,进程也有了类似家庭的概念。 但家庭的概念是虚拟的,人们只是遵守约定而不去破坏别人的家庭。房子作为一个物理基础设施,保护着家庭。在操作系统中,家庭类似于虚拟地址空间,而房子就是页表。 邻居不能闯入你的房子,但警察可以,政府公务人员以合理的理由也可以。所谓的特权管理机构只要理由充分,就可以进入普通人家的房子,touch这家人的东西。对于操作系统而言,这就是内核可以做的事,内核可以访问任意进程的地址空间。 当然了,内核并不会无故私闯民宅,就像警察不会随意闯入别人家里一样。 但是,你可以让内核故意这么做,做点无赖的事情。 我们来试一下,先看一个程序: // test.c // gcc test.c -o test #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/mman.h> int main() { char* addr = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); strcpy(addr, "Zhejiang wenzhou pixie shi"); printf("addr: %lu pid:%d\n", addr, getpid()); printf("before:%s \n", addr); getchar(); printf("after:%s\n", addr); return 0; } 这个程序的输出非常简单,before和after都会输出 “Zhejiang wenzhou pixie shi”,但是我们想把这句话给改了,怎么办呢?显然,test进程如果自己不改它,那就没辙…但是可以让内核强制改啊,让内核私闯民宅就是了。 接下来我写一个内核模块: // test.c // make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` modules #include <linux/mm.h> #include <linux/sched.h> #include <linux/module.h> static int pid = 1; module_param(pid, int, 0644); static unsigned long addr = 0; module_param(addr, long, 0644); // 根据一个进程的虚拟地址找到它的页表,相当于找到这家人的房子地址,然后闯入! static pte_t* get_pte(struct task_struct *task, unsigned long address) { pgd_t* pgd; pud_t* pud; pmd_t* pmd;...

技术分享

linux安装部署ftp图片服务器的实现方法

参考Linux中FTP服务器的搭建教程  # 今天给大家分享linux安装部署ftp图片服务器的教程,感兴趣的朋友一起看看吧! 1.安装http反向代理服务器、安装ftp文件传输组件vsftpd 详细安装及配置参见安装vsftpd、nginx 2.搭建图片服务器环境 2.1 实现的效果 例如,图片通过ftp客户端上传至服务器/home/ftpuser/www/images目录下,我想通过nginx反向代理服务器来访问ftp目录下的图片文件,该url地址为:20170229_lmvs0iin5hd.jpg,即使用http请求访问原本需要ftp请求才能访问到的静态资源文件。 2.2 具体实现方法 修改nginx/conf/nginx.conf,在默认的server里再添加一个location并指定静态资源在服务器中的实际路径,具体配置如下: location /images {    root /home/ftpuser/www/;    autoindex on;   } 1)root则是将/images映射到/home/ftpuser/www/目录; 2)autoindex on则是打开浏览功能;   修改完成重启nginx。   修改ftp用户的访问权限: chown ftpuser /home/ftpuser chmod 777 -R /home/ftpuser 2.3 访问图片测试 通过浏览器输入访问地址即可(注意:要关闭防火墙或者开启20数据端口、21控制端口才能访问) service iptables stop 或者 systemctl stop firewalld 到此这篇关于linux安装部署ftp图片服务器的文章就介绍到这了,更多相关linux ftp图片服务器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

技术分享
Centos7 下安装python3及卸载的教程-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Centos7 下安装python3及卸载的教程

一、安装python3 1、安装依赖包yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc* make -y 2、下载python安装包wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz 这里下载安装python3.5.2的原因主要是由于后期结合Django的稳定性好 3、解压python安装包tar -Jxvf Python-3.5.2.tar.xz 4、配置安装路径 切入到解压目录下 ./configure prefix=/usr/local/python3 5、编译安装 切入到解压目录下 make && make install 6、配置软连接ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 现在可以正常使用python3.5.2和pip3 这里发现pip3配置软链接后用不了: 解决方式: [root@localhost bin]# which pip3/usr/bin/pip3[root@localhost bin]# pip3-bash: /usr/local/bin/pip3: 没有那个文件或目录[root@localhost bin]# type pip3pip3 已被哈希 (/usr/local/bin/pip3)[root@localhost bin]# hash -r[root@localhost bin]# type pip3pip3 是 /usr/bin/pip3 7、导出之前Windows中python安装的包的清单 打开cmd切换到桌面 pip freeze > package.txt 然后将其导入Centos7中,并用pip3安装文件中的模块 至此python3中的功能及常用模块已安装完毕并可以正常使用 卸载python3 查看当前python版本: python -V 注意卸载的时候python后跟的2或3或者什么都不跟,否则会全部删除 卸载python3 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸载pyhton3 whereis python3 |xargs rm -frv 删除所有残余文件 成功卸载! whereis python 查看现有安装的python 总结 以上所述是小编给大家介绍的Centos7 安装python3及卸载的教程,大家如有疑问可以留言,或者联系站长。感谢亲们支持!!!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

技术分享

低硬件要求的Linux系统推荐 (硬件要求低的linux发行版)

现如今,Linux系统作为一款开源的操作系统已经被越来越多的人所接受,使用Linux系统有许多优点,比如稳定性高、安全性强、资源占用率低等等。然而,对于拥有较低硬件配置的计算机来说,选择适合的Linux系统并不容易。本文将推荐几个低硬件要求的Linux系统,以供读者参考。 1. Lubuntu Lubuntu是基于Ubuntu系统开发而来的一款轻量级Linux系统,其特点就是资源消耗非常低。在低配的笔记本电脑或者老旧的台式机上运行非常流畅。Lubuntu的安装体积只有1GB左右,虽然它的系统界面看起来非常简洁,但是它的功能却是完备的。它自带了轻量级的LXDE桌面环境和一些基本软件,比如Firefox、LibreOffice等等。对于只需要进行日常办公和上网搜索的用户来说,Lubuntu已经足够好用。 2. Linux Lite Linux Lite是另一款轻量级Linux系统,基于Ubuntu开发而来。Linux Lite的目标用户是拥有较低硬件配置的个人电脑用户,它的安装体积只有900MB左右。Linux Lite采用Xfce桌面环境,它可以在笔记本电脑和老旧的台式机上运行得很好。Linux Lite支持Wine软件,可以运行Windows应用程序,这使得很多Windows用户可以非常方便地切换到Linux Lite系统上。 3. Peppermint Peppermint是一款基于Ubuntu的轻量级Linux系统,它的特点是能够与各种云服务很好地集成。Peppermint使用的是LXDE和Xfce桌面环境,它的资源占用率很低,适合使用拥有较低配置的电脑。Peppermint内置了很多优秀软件,比如Firefox、Chromium、Dropbox等等,这些软件可以非常好地实现云服务与系统整合。例如,Peppermint可以自动将您的Dropbox云硬盘集成到桌面环境中,使您能够轻松地管理您的文件。 4. Bodhi Linux Bodhi Linux是一款非常轻量级的Linux系统,使用Moksha桌面环境。它的安装体积只有500MB左右,能够在较低硬件配置的电脑上运行顺畅。Bodhi Linux的特点是非常灵活,你可以自定义桌面环境,因此可以让你的电脑风格更加独特和个性化。Bodhi Linux的软件中心中包含许多非常流行的软件,这些应用程序可以在低资源消耗的情况下正常运行。 5. AntiX AntiX是一款基于Debian的轻量级Linux系统。它的安装体积只有700MB左右,更低硬件配置为128MB RAM和1.5GB的硬盘空间。AntiX使用的是IceWM桌面环境,尽管它不如其他Linux系统的桌面环境漂亮,但是它在功能方面非常强大。AntiX系统中包含了一些常用的软件,比如Firefox、Chromium、Thunderbird、LibreOffice等等,可以满足基本日常使用需求。 结语 在选择Linux系统的时候,我们需要考虑自己的计算机硬件配置以及日常使用需求。以上推荐的Linux系统都非常适合拥有低配计算机的用户,它们占用的资源非常少,而且都具备完备的办公和上网功能。此外,这些Linux系统的安装非常简单,对于对Linux不熟悉的用户也非常友好。希望本文对您选择适合自己的Linux系统有所帮助。 相关问题拓展阅读: 初学Linux选哪个版本好 电脑装哪个Linux发行版更好? 初学Linux选哪个版本好 推荐centos6系列,现正凳历在比较稳定资料也多。举搜 centos6系同RHEL6系同粗桥源,属于企业级的应用。 我给出的意见: 目前主流和常用的Linux版本主要有: 1、Redhat 版本5.5和6.0最新;培训、学习、应用、知名度更高的Linux发行版本,对硬件兼容性来说也比较不错,版本更新很快,对新硬件和新技术支持较好。 2、Debian 版本5.0和6.0最新;社区版的Linux来说是较好的,文档和资料较多,尤其是英文的。但在国内的占有率有一定的局限性。关键是上手难,但在所有的Linux发行版本中,这个版本应该说是最自由的。 3、SuSe 版本11和11.4最新;最华丽塌拍的Linux发行版,很多人都这样说,X windows和程序应用方面做的确实不错。尤其与Microsoft的合作关系,应该是在所有的Linux发行版本中最亲密的。 4、Ubuntu 版本9和10最新;最近几年出来的,主要指Server版本,强项就是其desktop版,应用是在太广泛了。 5、Centos 版本5.4和6.0最新;这个发行版主要是Redhat企业版的社区版,基本上跟redhat是兼容的,相对来说局限性教孙衫亩少。很多人都喜欢使用。 至少gentoo、mandriva、Slackware、redflag等可以暂时不考虑。虽然各自均有特点,但市场占有率和应用相对较少。 说了各自的特点,给出结论: —-如果作为php、jsp等开发平台使用,更好选择Redhat或Centos,原因主要是硬件和软件兼容性方面应该是所有Linux发行版本中较好的。最主要的原因是国内的多数游戏运营商和大型网站,使用这两个版本的较多。 —-如果是作为asp.net等开发平台使用,更好使用suse,原因是与Microsoft的合作关系。同时也说明下,移动运营商好像很多使用suse的操作系统平台。 —-如果是作为c或c++等开发平台使用,而且对应用程序则森开发要求较高,建议使用debian版本的Linux,毕竟这个版本的Linux限制性是最小的。自由度较大。 希望以上的说明对你有所帮助。 1,Linux 主要作为Linux发行版,的一部分而使用。这些发行版由个人,松散组织的团队,以及商业机构和志愿者组织编写。2,主流和常用的Linux版本主要有: (1)Redhat 版本5.5和6.0最新;培训、学配族旦习、应用、知名度更高的Linux发行版本,( 2)Debian 版本5.0和6.0最新;在国内的占有率有一定的局限性。关键是上手难,但在所有的Linux发行版本中,这个版培扰本应该说是最自由的。 (3)、SuSe 版本11和11.4最新;最华丽的Linux发行版,X windows和程序应用方面做的不错。 (4)Ubuntu 版本9和10最新;最近几年出来的,主要指Server版本,强项就是其desktop版,应用是在太广泛了。3,因此初学者学习RHEL5.0以上版本好的,fedora也行,不过RHEL的相关技术文档和教学资料穗敏相比fedora会多一些。4,不建议使用ubuntu。如果想知道更多的linux相关可以关注《linux就该这么学》这本书。 现在学习毕裤Linux可以选择搭数扮CentOS 7.6版本,这个是目前的最新版本,现在学很合适,等学成了,企业也开始使用了,知灶到时候也是一种优势! 现在公司主要用的两个流行版本的,一个是Redhat红帽的;一个是Centos。Centos是开源的(开源的意思是免费试茄笑正用,不用还钱,自己可以定制开发),公司用的最多的Centos6.9和Centos7.4;SuSe和Ubuntu几乎颤悔没人用!Centos能升茄占80%以上的时长! linux用哪个好 电脑装哪个Linux发行版更好? 小历键白用 Ubuntu,支持国产用 deepin,服务器用 centos。manjaro 也肢液巧不错,对新手友好埋段。 1、运维和分布式开发可以选择红帽版本:红帽版本主要分为了RHEL和centos,新手学习的时候如果不想太过于折腾,可以直接使用conetos,和RHEL在操作使用层面上完全没有区别的,只是来源有所区分,分为了开源免费和企业收费知虚漏两种。国内运维所采用的教材一般都是redhat,所以都是基于RHEL的。细分版本的情况下,初学者可以安装一个带有桌面的centots6或者7,都可以。 2、具有生产力的工具可以选择ubuntu版本:对于生产力版本更大的要求就是稳定了,ubuntu就是非常不错的选择,死机崩溃几乎可以避免了。还可以选择fedora版本,也是非常不错的,也具有非常不错的稳定性,不过整体来说还是ubuntu,各种生产力软件都适用于它,不用浪费时间找软件。而且还拥有海量的知识库,互联网上可以找到关于ubuntu的一切问题解决方案,非常适合初学者学习。 3、日常使用可以选择deepin、manjaro版本:相搭烂对于来说更加省心一些。deepin对于从Windows迁移过来的用户是非常不错的选择,高度兼容Windows风格和操作习惯的系统,可以适配Windows下的软件,可以让初学者快速融入其中。manjaro版本,拥有所有Linux桌面版本中更大的软件仓库,最多适配的桌面环境、最简单易用的应用管理方式,如果作为家用的情况下,是非常适合的选誉培择。 你对这个系统的熟悉程度如何? 这个配置大多数发行版都没问题 你对哪一个发行版的linux最熟悉? 装这个系统源如的主要用途是? 请先考虑好以上问题再决定是否要安雹中启装 不培孙然装上也没用,用不上 希望可以帮助你,请采纳 关于硬件要求低的linux发行版的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

技术分享

详解Ubuntu16.04安装nvidia驱动+CUDA+cuDNN的教程

准备工作 1.查看GPU是否支持CUDA lspci | grep -i nvidia 2.查看Linux版本 uname -m && cat /etc/*release nvidia驱动 1. 先卸载原有N卡驱动 #for case1: original driver installed by apt-get: sudo apt-get remove –purge nvidia* #for case2: original driver installed by runfile: sudo chmod +x *.run sudo ./NVIDIA-Linux-x86_64-384.59.run –uninstall 2. 禁用nouveau驱动 sudo gedit /etc/modprobe.d/blacklist.conf 在文本最后添加: blacklist nouveau options nouveau modeset=0 然后执行: sudo update-initramfs -u 重启之后,可以查看nouveau有没有运行: lsmod | grep nouveau  # 没输出代表禁用生效 3.禁用X-Window服务 sudo service lightdm stop #这会关闭图形界面 按Ctrl-Alt+F1进入命令行界面,输入用户名和密码登录。 4.命令行安装驱动 驱动网址https://www.nvidia.cn/Download/index.aspx?lang=cn #给驱动run文件赋予执行权限: sudo chmod +x NVIDIA-Linux-x86_64-384.59.run #后面的参数非常重要,不可省略: sudo ./NVIDIA-Linux-x86_64-384.59.run –no-opengl-files 5.Driver测试: nvidia-smi #若列出GPU的信息列表,表示驱动安装成功 nvidia-settings #若弹出设置对话框,亦表示驱动安装成功 CUDA安装 1.下载对应系统的CUDA 网址http://developer.nvidia.com/cuda-downloads 选择runfile安装 2.安装 sudo sh cuda_<version>_linux.run 开始安装之后,需要阅读说明,可以使用Ctrl + C直接阅读完成,或者使用空格键慢慢阅读。下面为安装选项: (是否同意条款,必须同意才能继续安装) accept/decline/quit: accept (这里不要安装驱动,因为已经安装最新的驱动了,否则可能会安装旧版本的显卡驱动,导致重复登录的情况) Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48? (y)es/(n)o/(q)uit: n Install the CUDA 10.0 Toolkit?(是否安装CUDA 10 ,这里必须要安装) (y)es/(n)o/(q)uit:...

技术分享

使用Linux编译Java文件的详细步骤教程 (linux如何编译java文件)

Java是一种跨平台、面向对象的高级编程语言,通常用于开发Web应用程序和移动应用程序。在Linux操作系统上,使用Java编程需要先进行编译,这篇文章将为您介绍如何。 1. 安装Java JDK Java JDK是Java开发工具包,它包含了Java编译器(javac)、Java虚拟机(JVM)和Java程序开发所需的各种工具库。在Linux系统中,可以通过包管理工具安装Java JDK。以Ubuntu系统为例,可以使用以下命令进行安装: “` sudo apt-get update sudo apt-get install default-jdk “` 2. 编写Java文件 在安装Java JDK后,可以使用任何文本编辑器编写Java程序。这里以使用vi编辑器创建一个HelloWorld.java文件为例: “` vi HelloWorld.java “` 然后在vi编辑器中输入以下代码: “` public class HelloWorld { public static void mn(String[] args) { System.out.println(“Hello, World!”); } } “` 保存并退出vi编辑器。 3. 编译Java文件 使用Java编译器(javac)编译Java文件,可以将Java源文件编译成Java字节码文件(.class文件)。在Linux命令行界面中,进入HelloWorld.java所在的目录,然后运行以下命令: “` javac HelloWorld.java “` 如果编译成功,将会生成一个HelloWorld.class文件。 4. 运行Java程序 使用Java虚拟机(JVM)运行Java程序,可以将Java字节码文件(.class文件)转换成可以执行的机器码。在Linux命令行界面中,运行以下命令: “` java HelloWorld “` 如果一切顺利,将会输出“Hello, World!”。 使用Linux编译Java程序需要安装Java JDK、编写Java文件、使用Java编译器(javac)进行编译、使用Java虚拟机(JVM)运行Java程序。通过本文的介绍,相信您已经能够轻松掌握Linux编译Java文件的详细步骤教程。 相关问题拓展阅读: 如何在Linux中反编译java源代码 如何在Linux中反编译java源代码 之前看同事使用JD-GUI来反编译java .class文件,觉得很爽,不过一直以来也没有再次接触到这个问题,渗改所以也没有对这个工具进行深入的了解。 今天咐派无聊看了些技术文档,忽然想起这个工具来,上网一找。呼呼果真也有Linux的衡喊贺版本。 不过我网上资料显示主页上下载的gz包是32位的程序,我在64位的Fedora 12下可能有些问题,程序在运行时会调用不到关键的32位库而失败。幸运的是只要安装几个包即可: yum install libcanberra-gtk2.i686 PackageKit-gtk-module.i686 gtk2-engines.i686 下载后: tar -xzvf jd-gui-0.3.2.linux.i686.tar.gz sudo mv jd-gui /usr/local/bin 至此jd-gui便可以在linux下运行,对于class或者jar文件都可以使用这个工具打开查看反编译源码 转载,仅供参考。 用javap反编译 关于linux如何编译java文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

技术分享

CentOS7安装调试Mysql数据库的步骤详解【实例】

本实例要求下载并安装调试Mysql数据库。 第一步:下载Mysql数据库安装所需的全部软件。 我已提前下载好数据库软件,直接在服务器下载即可,如下: 通过scp直接下载: [root@agt20 ~]# scp root@192.168.122.10:/root/mysql* /root/ 软件如下图: [root@agt20 ~]# ls mysql-* mysql-5.7.17.tar mysql-community-client-5.7.17-1.el7.x86_64.rpm mysql-community-common-5.7.17-1.el7.x86_64.rpm mysql-community-devel-5.7.17-1.el7.x86_64.rpm mysql-community-embedded-5.7.17-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm mysql-community-libs-5.7.17-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm mysql-community-server-5.7.17-1.el7.x86_64.rpm mysql-community-test-5.7.17-1.el7.x86_64.rpm 第二步:通过yum进行安装,起服务器并查看 [root@agt20 ~]# yum -y install mysql-*.rpm [root@agt20 ~]# systemctl restart mysqld [root@agt20 ~]# systemctl enable mysqld [root@agt20 ~]# systemctl status mysqld.service \u25cf mysqld.service – MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since \u4e8c 2019-10-15 11:29:11 CST; 1min 15s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Main PID: 31584 (mysqld) CGroup: /system.slice/mysqld.service \u2514\u250031584 /usr/sbin/mysqld –daemonize –pid-file=/var/run/mysqld/mysqld.pid… 10\u6708 15 11:28:42 agt20.tedu.cn systemd[1]: Starting MySQL Server… 10\u6708 15 11:29:11 agt20.tedu.cn systemd[1]: Started MySQL Server. [root@agt20 ~]# 第三步:连接MySQL服务器,修改密码; 1)查看初始密码 [root@agt20 ~]# grep -i ‘password’ /var/log/mysqld.log 2019-10-15T03:28:55.200931Z 1 [Note] A temporary password is generated for root@localhost:...

技术分享

详解nohup /dev/null 2>&1 含义的使用

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。 该命令的一般形式为:nohup command & ls xxx 1>out.txt 2>&1 nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对 于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.其中0 表示键盘输入 1表示屏幕输出 2表示错误输出.把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。 command >out.file 2>&1 & command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行。 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出; 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出. 你可以用 ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1; ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中; ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了; ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。 为何2>&1要写在后面? command > file 2>&1 首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。 command 2>&1 >file 2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。 用strace可以看到: 1. command > file 2>&1 这个命令中实现重定向的关键系统调用序列是: open(file) == 3 dup2(3,1) dup2(1,2) 2. command 2>&1 >file 这个命令中实现重定向的关键系统调用序列是: dup2(1,2) open(file) == 3 dup2(3,1) 为什么要用 /dev/null 2>&1 这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.下面我就为大家来说一下, command > file 2>file   与command > file 2>&1 有什么不同的地方. 首先~command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command   > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道. 而command...

技术分享

Linux /etc/network/interfaces配置接口方法

Linux下/etc/network/interfaces文件用来配置网络接口。 初始化网口Ethernet Interface 大部分的网络接口配置都可以在/etc/network/interfaces中解决。例如为网卡配置静态IP(dhcp),设置路由信息,配置IP掩码,设置默认路由等。 PS: 如果想要在系统启动时就自动启动网口,需要添加auto一行,详见下面示例。 1. 使用动态IP地址 auto eth0 iface eth0 inet dhcp 2. 使用静态IP地址 auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 # network 192.168.1.0 # broadcast 192.168.1.255 network和broadcast一般使用默认值就行。 3. 查看路由表 # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 route -n不解析名字。 本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!

技术分享

详解bash中的初始化机制

Bash初始化文件 交互式login shell 在下列情况下,我们可以获得一个login shell: 登录系统时获得的顶层shell,无论是通过本地终端登录,还是通过网络ssh登录。这种情况下获得的login shell是一个交互式shell。 在终端下使用–login选项调用bash,可以获得一个交互式login shell。 在脚本中使用–login选项调用bash(例如:#!/bin/bash –login)可以得到一个非交互式的login shell。 使用su -切换到指定用户时,获得此用户的login shell。如果不使用-,则获得non-login shell。 login shell启动时首先读取/etc/profile系统全局配置,然后依次查找~/.bash_profile、~/.bash_login、~/.profile三个配置文件,并且读取首个找到的并且可读的文件。 login shell退出时读取并执行~/.bash_logout中的命令。 如果配置文件存在但不可读,则会显示错误消息;如果文件不存在,bash将自动搜索下一个文件。 默认在/etc/profile文件中会定义PATH、USER、MAIL、HOSTNAME、HISTSIZE等全局环境变量,还会自动导入/etc/bash.bashrc文件(包含系统级shell函数和别名),以及/etc/profile.d路径下被用于针对特定程序进行初始化的所有*.sh文件。 交互式non-login shell 非登录shell意味着在启动时不必通过系统身份验证。 GUI中用户打开的终端默认为非登录shell,可以通过logout命令判断: # 在Ubuntu GUI桌面打开一个终端 > logout bash: logout: not login shell: use `exit' > bash --login > logout # 正常登出 什么也不会输出 非登录shell在初始化时仅读取~/.bashrc资源文件, 而~/.bashrc文件会自动被~/.bash_profile或~/.profile加载,因此为了保证login shell和交互式non-login shell得到相同的配置,一般将环境变量定义在~/.bashrc文件中。 > echo "export sflag=\"login shell will see this message\"" >> ~/.profile > bash > echo $sflag # 找不到这个变量 会打印一个空行 > exit > bash --login > echo $sflag login shell will see this message > logout 非交互式shell 通过bash命令执行脚本时会以非交互(non-interactively)的方式启动shell,这保证了在脚本执行过程中不会被用户干扰。在非交互式脚本启动时,仅会加载BASH_ENV变量指向的文件。但要注意, 由于PATH变量默认不会被非交互式shell加载,因此变量BASH_ENV的值应该为绝对路径。 通过特殊变量-可以查看当前shell的模式: > echo $- himBHs # 带有'i‘就是交互式shell 另一个简单的方式是检查当前shell中是否存在提示符环境变量PS1. if [ -z "$PS1" ]; then echo "非交互式";else echo "交互式";fi 特殊情况 兼容模式 如果使用命令sh调用bash,则为了保证兼容性会按照sh的方式对bash进行初始化。作为login shell启动时,bash依次读取/etc/profile和~/.profile配置文件。作为non-login shell启动时,bash仅会读取环境变量ENV指向的文件。 POSIX模式 当通过以下方式启动bash时: 设置set -o posix 或 export POSIXLY_CORRECT=1 bash...

技术分享