zoukankan      html  css  js  c++  java
  • Linux笔记

    Linux文件目录和分区

    文件目录:

    /:根目录

    /root:存放root用户的相关文件

    /home:存放普通用户的相关文件

    /bin:存放普通用户的可执行命令

    /sbin:存放需要具备一定权限才可以使用的命令

    /mnt:默认挂载光驱(iso)的挂载点

    /etc:存放系统配置相关的文件

    /var:存放经常变化的文件

    /usr:存放系统的应用程序,比如apt-get install xxx安装的软件

    /tmp:存放临时文件、日志文件

    /dev:存放硬盘设备信息

    /boot:存放Linux操作系统启动时的引导文件

    Linux设备命名规则:

    Linux中IDE硬盘,驱动标识符为“hdx-”,其中hd表示设备类型为IDE硬盘,x为盘号,表示第几块硬盘(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“-”代表分区,前4个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区(扩展分区不能直接使用,需切割出逻辑分区,逻辑分区的数量没有限制)

    Linux中SATA或SCSI硬盘,驱动标识符为“sdx-”,sd表示设备类型为SATA硬盘,如:

    hda2:表示第一个IDE硬盘上的第二个主分区或扩展分区

    sdb5:表示第二个SATA硬盘上的第一个逻辑分区

    通过命令fdisk -l:查看Linux系统分区的具体情况

    通过命令df -h 目录: 查看目录在哪个分区和磁盘使用情况,下图说明“/home”对应第一块逻辑分区

    挂载点和分区:

    在Linux系统里,“分区”被称作挂载点,“挂载点”的意思是:把一部分硬盘容量映射成为一个文件夹,这个文件夹的名字就叫做“挂载点”,因此Linux中只有文件夹形式存在的挂载点,而不会有C盘,D盘,E盘等,Linux中分区(硬盘容量)映射为文件夹(挂载点)

    挂载命令:mount [-参数] [设备名称] [挂载点]

    卸载命令:umount 挂载点

    比如:mount  /dev/sda1  /test/ 将主分区挂载到test目录;umount /test/ 卸载

    Linux常见挂载点的容量设置:

    /boot:100M

    swap:交换分区,通常为物理内存的两倍

    /:根分区,容量尽可能大

    /home:容量尽可能大

    Linux常用命令(有问题Google)

    Tab:双击,命令补全

    sudo su:进入root用户

    apt-get install package:安装程序

    apt-get remove --purge softname:卸载并清除配置

    ./test.bin &:在当前目录下安装bin文件,./指当前目录,&指程序以后台方式运行

    startx:进入Linux图形界面

    shutdown –h now:立刻关机

    reboot;shutdown–r now:重启

    dos2unix:Windows文件( )转化为Linux文件( )

    unix2dos:Linux文件( )转化为Windows文件( )

    exit:退出

    clear:清空

    pwd:显示当前目录

    cd:改变目录

    cdnull:切换到当前用户(如zzjie)的主目录

    ls:列出文件和目录

    ls -a:显示隐藏文件

    ls -l:显示长列表格式

    ll:显示文件详细内容

    mkdir:建立目录

    rmdir:删除空目录

    touch:建立空文件

    cp:复制

    cp-r 文件夹 目标目录:拷贝文件夹

    scp:在Linux主机间复制文件

    scplocal_file remote_username@remote_ip:remote_folder

    scplocal_file remote_username@remote_ip:remote_file

    scplocal_file remote_ip:remote_folder

    scplocal_file remote_ip:remote_file

    scp–r:复制文件夹

    scp:从远程到本地同理             

    rsync:远程数据同步

    rsync–option src dest

    rsync–option src remote_username@remote_ip:remote_file

    rsync–option src remote_username@remote_ip:remote_fodler

    mv:移动文件和改文件名

    rm:删除文件和目录

    rm-rf:递归、强制删除目录和内容,fr:recursive force

    ln:链接,指向源文件

    ln-s 源文件 目标文件:目标指向源文件

    more:分页显示文件内容,下一页:空格 上一页:Shift + PageUp

    less:分页显示文件内容

    grep:在文本中查询内容

    grep–n“xxx” Hello.java,其中-n显示行数

    |:管道命令

    在Linux系统中,| 就是管道,把上一个命令的结果交给 | 后面的命令处理,比如:

    ls/etc/ | more:列出etc目录内容,分页显示

    find/ -name *.html | grep bookmark:在根目录,按照文件名*.html查找,再在文件中查找bookmark

    find:搜索文件(夹)

    1)在特定的目录下搜索并显示指定名称的文件(夹)

    find/ -name Hello.java:从根目录,按照文件名查找Hello.java

    2)搜索一段时间内被存取、变更的文件(夹)

    findhome/ -amin -10:10分钟内存取的文件或目录

    findhome/ -atime -10:10小时内存取的文件或目录

    findhome/ -cmin -10:10分钟内更改过的文件或目录

    findhome/ -ctime +10:10小时前更改过的文件或目录

    3)搜索指定大小的文件

    findhome/ -size +10k:查找home下,大小为10k的文件

    >:管道定向命令,比如:

    grep“main”-nam Hello.java > 1.bak:结果输送到1.bak保存起来(覆盖)

    grep“main”-nam Hello.java >> 1.bak:结果输送到1.bak保存起来(添加到文件末尾)

    >filename 2>&1:“>&”is the syntax to redirect a streamto another file descriptor,“&”indicates that what follows is a file descripter and not a file,0 is stdin,1 is stdout,2 is stderr

    chown:改变文件(夹)的所有者

    chownDave hello.c

    chownDave:Dave hello:改变文件(夹)的属主和属组

    chgrp:改变文件(夹)所在组

    chgrpDave hello.c

    chmod:改变文件(夹)的权限,比如:chmod 777 Hello.java

    jobs:查看所有的作业列表

    Linux用户(组)管理命令(只有root用户能添加用户)

    useradd用户名:添加用户

    useradd[-u uid] [-g group] [-d home] [-s shell]user_name:添加用户

    useradd–m 用户名:自动建立用户的登入目录

    useradd–d 用户名:指定用户登陆时的起始目录

    passwd用户名:给用户设密码

    userdel用户名:删除用户

    userdel–r 用户名:删除用户和用户相关文件

    userdel–r 用户名:删除用户和户主目录

    groupadd组名:添加用户组, 

    useradd-g 组名 用户名:创建用户,并指定组,该命令还能用于改变用户所在组

    whoam i:显示用户信息

    Note:

    查看linux中所有用户信息:cat/etc/passwd | more,假如显示如下:

    along:x:1001:1001::/home/along:/bin/sh

    对应格式:用户名:密码:用户id:组id::用户目录:用户使用的shell解析器

    root用户查看用户密码:cat /etc/shadow | more

    root用户查看群组信息:cat /etc/group | more

    查看linux中所有组的信息:cat /etc/group | more

    mount [-参数] [设备名称] [挂载点]:挂载设备

    umount 挂载点:卸载设备

    fdisk -l:查看Linux系统分区的具体情况

    df -h 目录:查看目录在哪个分区和磁盘使用情况

    env:查看操作系统的环境

    history:显示历史命令

    history10:显示最近使用的10个命令

    !5:执行历史编号为5的命令

    !ls:执行最后一次以“ls”开头的命令

    ping:ping通网络

    tracepath:trace网络节点

    route:显示路由表

    ifconfig:查看ip情况

    ifconfigeth0 xxx.xxx.xxx.xxx:更改设备的IP地址

    ifconfigeth0 x.x.x.x netmask x.x.x.x. up:配置eth0 IP地址和子网掩码,同时激活设备

    hostname name:更改主机名称

    netstat:显示网络统计信息

    netstat–anp:按端口显示网络信息,并显示进程号

    date:显示系统时间

    date月月日日时时分分年年年年.秒秒

    cal 月 年:显示月历

    ps -aux:显示正在运行的进程

    ps–ef | grep zzjie:显示父进程ID(PPID)

    ps–aux | grep zzjie:显示所有包含其他使用者的进程

    -a:显示所有用户的所有进程

    -u:按用户名和启动时间的顺序来显示进程

    -x:显示无法控制终端的进程

    TTY:终端 “?”是守护进程,deamon无终端

    VSZ:占用虚拟内存大小

    RSS:占用内存大小

    ps–axf:查看进程树

    ps–axm:列出线程

    pspid:显示pid进程

    pstree:显示即进程树

    top:动态监控进程

    时间系统已启动时间  用户数 当前系统负载情况 …僵尸进程

    96.0id:CPU资源空闲比例;内存和Swap

    监视特定用户:输入u,输入用户名,回车

    终止指定进程:输入k,输入要结束的进程号

    指定系统状态更新时间:top -d 10:10秒更新1次

    top运行中可以通过 top 的内部命令对进程的显示方式进行控制:

    l:开启或关闭第一部分第一行top信息

    t:开启或关闭第一部分第二行Tasks和第三行Cpus信息

    m:开启或关闭第一部分第四行Mem和第五行Swap信息

    N:以PID的大小顺序排列进程

    P:以CPU占用率大小排列进程

    M:以内存占用率大小排列进程

    q:退出top

    top–p pid:只监控pid线程

    vmstat:Linux系统监控工具,是查看虚拟内存vm使用状况的工具

    在Linux内存管理中,主要是通过“调页Paging”和“交换Swaping”,Paging:将内存中不常使用的页面换到磁盘上,Swaping:将整个进程交换到磁盘上

    Page-out:分页写入磁盘;Page-in:分页回到内存

    vmstat2 10:

    r:run queue运行队列中进程数量,超过CPU数目,出现CPU瓶颈

    b:blocked等待IO的进程数量,阻塞的进程

    swpd:当前使用的虚拟内存KB数,如果大于0,表示机器内存不足

    free:当前空闲的物理内存KB数

    buff:缓冲的内存大小

    cache:缓存的内存大小

    si:swapin 每秒从交换区读入虚拟内存的大小,如果大于0,表示物理内存不够用

    so:swapout 每秒从虚拟内存写入交换区的大小,如果大于0,表示物理内存不够用

    bi:blockin 每秒从块设备读入内存的数据总量(读磁盘)

    bo:blockout 每秒从内存写入块设备的总量(写磁盘)

    in:每秒中断数

    cs:每秒上下文切换数

    us:user 用户进程执行时间

    sy:system系统进程执行时间

    id:idle  cpu空闲时间

    wa:wait  cpu等待IO时间

    通过/proc/cpuinfo:查看CPU性能

    grep‘model name’/proc/cpuinfo:查看CPU和CPU核数

    jstack:

    jps:查出java进程的pid

    top –p pid:观察进程情况

    Shift + h:显示该进程的所有线程

    将线程id转化为16进程,比如线程id 3720 == 0x7d0,注意小写

    jstack pid | grep -A 10 0x7d0:查询具体线程的状态,基本可以定位程序的问题所在

    需要的时候再了解其他JVM监控工具

    kill 进程号:终止进程,本质是协商退出,并不是强制退出

    kill-9(KILL) 进程号:发送SIGKILL信号,强制终止进程

    killall进程号:终止进程和子进程

    kill–STOP pid:发送SIGSTOP信号,将后台进程暂停

    kill–CONT pid:使后台暂停的进程恢复运行

    kill–l:list available signals

    kill信号说明:

    2)SIGINT^C sends a SIGINT to all the processes in theforeground process group. To do the equivalent with kill,kill –SIGINT pid(OS-level concept)or to the job,kill –SIGINT %(shell-level concept,the pipeline ended with&)

    man command:命令手册

    info command:在线查看命令文档

    输入/:Gegexp search

    stty –a:get all the terminal controlcharacter assignments

    比如,intr = ^C,susp = ^Z等

    free -m:查看内存使用情况

    内存描述文件:cat /proc/meminfo:机器的内存使用情况

    /proc/pid/maps:显示当前进程所占用的虚拟地址

    /proc/pid/statm:进程所占用的内存

    Linux空闲内存:free+ buffers + cached

    export:设置或显示环境变量(临时)

    exportPAHT=&PATH:&HOME/bin:root/test:设置PATH环境变量

    如果将export写入:/etc/profile或/etc/bashrc等全局,那么针对所有用户,环境变量永久生效

    如果将export写入:/home/zzjie/.bashrc或.bash_profile,那么仅对zzjie登陆的用户环境变量有效

    echo$PATH:查看PATH环境变量

    /etc/profile:为系统的每个用户设置环境信息,当用户第一次登陆时,该文件被执行

    /etc/bashrc:为每个运行bashshell的用户执行此文件,当bash shell被打开时,该文件被读取

    /zzjie/profile:zzjie用户的环境设置

    /zzjie/bashrc:zzjie用户的bash shell配置,给bash初始化,如bash代码补全,bash别名等

    /zzjie/bash_logout:当用户每次退出bash shell时,该文件被执行

    alias:指定别名

    aliasdump=’mysqldump –u root –p db > /home/date.bak’:指定数据库备份操作别名dump

    aliassubl="/home/zzjie/Downloads/Sublime Text 2/Sublime Text2/sublime_text"

    shell通配符:* ?

    reptyr:reptyr is a utilityfor taking an existing running program and attaching it to a new terminal

    iptraf:网络测量工具

    iptraf–g:

    iptraf–d eth0:

    Notes:命令最终在linux的内核执行,但先传给shell解析器,再传给Kernel

    Linux文件和文件夹权限

    llHello.java和test文件夹显示文件详细信息

    -rw-rw-r-- 1 zzjie zzjie 96  7月 1322:34 Hello.java

    drwxrwxr-x 2 zzjie zzjie 4096  7月 1511:53 test/

    权限说明:r:可读,用4表示;w:可写,用2表示;x:可执行,用1表示

    文件类型:

    分析:-rw-rw-r--;drwxrwxr-x

    第一部分-表示Hello.java是普通文件,d表示test是文件夹;第二部分rw-和rwx表示文件(夹)所有者zzjie对该文件具有的权限;第三部分rw-和rwx表示文件(夹)所在组对该文件的权限;第四部分r--和r-x表示其他组的用户对该文件(夹)的权限

    Linux压缩、解压、RPM

    zip(zip --help)

    zipxxx.zip 文件1 文件2 …:将多个文件压缩

    zip–r xxx.zip 目录 文件1 文件2:将目录下所有文件和文件夹,文件1,文件2压缩

    zip–m xxxx.zip 文件:向压缩文件xxx.zip中添加文件

    unzip–od /home/zzjie xxx.zip:把xxx.zip文件解压到/home/zzjie

    tar(tar --help):可调用gzip,bzip2,compress

    -c:--create

    -r:--apend

    -t:--list

    -u:--update

    -x:--extrate

    -f:--file

    -v:--verbose

    -z:--gzip,--gunzip

    -j:--bzip2

    -z:--compress,--uncompress

    压缩:

    tar –cf archive.tar 1.jpg:将1.jpg文件压缩打包成tar文件

    tar –uf archive.tar 1.jpg:更新原来tar包中的1.jpg文件

    tar –cvfarchive.tar *.jpg:将目录里所有jpg文件压缩

    tar –czf archive.tar.gz*.jpg:将目录里所有jpg文件打包成jpg.tar,再用gzip压缩,生成一个gzip压缩过的包,命名为archive.tar.gz

    tar –cjf archive.tar.bz2*.jpg:将目录里所有jpg文件打包成jpg.tar,再用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2

    tar –cZfjpg.tar.Z *.jpg:将目录里所有jpg文件打包成jpg.tar,再用compress压缩,生成一个compress压缩过的包,命名为jpg.tar.Z

    解压:

    tar –xvffile.tar:解压tar包

    tar -xzvf file.tar.gz(file.tgz):解压tar.gz或者tgz包

    tar -xjvf file.tar.bz2:解压 tar.bz2包

    tar –xZvffile.tar.Z:解压tar.Z包

    gunzip(gzip –d) *.gz:解压gz包

    bunzip(bzip –d) *.bz2:解压bz2包

    uncompress *.Z:解压Z包

    源文件安装:

    ./configure(--prefix=path):针对当前系统,配置好安装参数(配置软件安装目录)

    make:将源代码文件编译为二进制文件

    makeinstall(runas root):将编译好的二进制文件安装到系统中

    结合:& ./configure && make && sudo make install

    rpm

    rpm就是软件包管理工具,可以安装、删除、更新以rpm包形式发布的软件,类似Windows里面的“添加/删除程序”,通常包括Binary和Source两种rpm包

    rpm常用命令:

    rpm-q 软件名 //查询软件是否安装

    rpm-qa | grep samba //在所有已经安装的软件包中查找samba

    rpm-ql samba //查询rpm包安装位置

    rpm-qi samba  //查询rpm包的信息

    对未安装软件包的查看:

    rpm–qpi file.rpm  //查看一个软件包的用途、版本

    rpm–qpl file.rpm  //查看一个软件包所包含的文件

    rpm-ivh file.rpm  //安装rpm包并显示进度

    rpmivh file.rpm --nodes --force:强制安装,忽略依赖关系

    rpm-ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm  //指定安装目录

    rpm-Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本

    rpm–e --nodeps file.rpm  //强制删除rpm包

    Linux Shell编程

    Shell基本概述:

    壳(Shell)保护内部的核(Kernel),Shell是一种具备特殊功能的程序,是用户和Linux Kernel间的接口,为了屏蔽内核的复杂性,为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳,用户向shell提出请求,shell解释并将请求转发给内核,比如ls /home命令,首先由shell解析,最终转发给内核,有内核处理

    Shell的本身就是一个解释型程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组、程序控制结构等,任何在提示符中能键入的命令都能放到一个可执行的shell程序中,本质上,shell脚本:是一个文本文件,是命令的集合,有执行的权限,执行方式(./script.sh)

    Shell种类有:Bourne shell(sh),Korn Shell(ksh),C shell(csh),BourneAgain Shell(bash)等,通过echo$SHELL查看当前shell

    Shell的使用:

    1)用户登陆后自动执行的shell脚本文件:

    .bashrc位于主目录下,执行系统的脚本/etc/bashrc:配置系统基本数据

    .bash_profile位于主目录下,执行系统的脚本/etc/profile:配置系统环境变量

    (比如PATH,CLASSPATH等都能在这里配置)

    2)在/home/zhengzj目录下有用户的环境变量:.bashrc、.bash_profile等

    Linux任务调度:crontab

    在root用户下添加crontab定时计划任务(修改/etc/crontab文件)

    时间格式:* * * * * 对应:分钟 小时 月 年 星期,比如:

    0 2* * *  root date >> /home/date:每天凌晨2:00,root用户,待执行命令

    crontab调度多个任务:

    1)vi /etc/crontab中写多个命令

    2)shell编程:将多个任务组织到sh文件中,再写入/etc/crontab文件,比如:

    0022 * * * root /home/xx/mysql_backup.sh:每晚22:00备份mysql数据库

    crontab-r:终止任务

    crontab–l:列出当前调度任务

    Linux网络环境配置

    1、临时配置:重启机器,配置消失

    ifconfigeth0 x.x.x.x netmask x.x.x.x. up:配置eth0 IP地址,同时激活设备

    route adddefault gw x.x.x.x:配置网关

    hostnamexxxx:配置主机名

    dhcclienteth0:DHCP动态获取IP

    2、修改配置文件(Google)

    Ubuntu网络配置涉文件:

    /etc/network/interfaces:网络接口配置,包括:IP地址、子网掩码、网关等

    /etc/resolv.conf:DNS服务器设置

    /etc/hostname:主机名设置

    /etc/hosts:域名解析映射

    /etc/hosts.allow:IP访问允许规则

    /ect/hosts.deny:IP访问禁止规则

    注意:修改网络配置文件后,要重启网络接口:/etc/init.d/networking restart

    Linux vi编辑器

    1)vi Hello.java

    2)输入i:进入到插入模式

    3)输入esc:进入命令模式

    4)输入冒号:

    5)wq:保存退出或者q!:退出不保存

    Linux Java开发

    在Linux上建立CookieService和TaskService,并且运行爬虫:

    目录说明:

    设置CLASSPATH:export CLASSPATH=.:/home/zzjie/service/lib/je-5.0.73.jar

    或者修改vi /home/zzjie/.bashrc文件(用户级别):

    进入src目录下,编译源文件:

    $javac com/crawl/common/SystemProperties.java

    $javac hhf/crawl/master/InitLoadTask.java

    进入src目录下,运行InitLoadTask.class文件:

    $java hhf/crawl/master/InitLoadTask:

    此时,任务数据库建立完毕

    PS:保证文件的目录都正确,每次修改源文件都需要重新编译

    ————————————————————————————————————

    启动Cookie服务和Task服务:

    问题:要导入的Jar包太多,如何处理?

    exportCLASSPATH=.:$CLASSPATH:/home/zzjie/service/lib/log4j-1.2.17.jar

    进入src目录下,编译源文件:

    $javac hhf/crawl/master/MasterServer.java

    进入src目录下,运行程序:

    $java hhf/crawl/master/MasterServer -start CookieService

    $ javahhf/crawl/master/MasterServer -start UserTaskService

    启动服务成功:

    查看service.log:ss

    ————————————————————————————————————

    下面运行爬虫程序:

    在/home/zzjie目录下建立distributed_crawler文件夹:

    将爬虫程序打包成Jar包:

    MANIFEST.MF文件如下:

    一定要遵循固定的格式

    运行jar文件:

    $ java-Dfile.encoding=utf-8 -jar distributed_crawler_test.jar

    (注意检查配置文件是否都已经正确)

    程序正常启动:

    查看日志文件:

    登陆日志:

    Cookie和Task分配日志:

    微博下载日志:

    可以看出多个线程同时爬取微博

    查询mongodb:

    因此,多线程爬虫已经正常工作

    ————————————————————————————————————

    服务器后台运行:

    服务器后台运行cookie和task服务:使用nohup和&,并且重定向控制台输出到文件

    服务器后台运行爬虫:

    Linux远程登录,让程序后台运行

    nohup:让提交的命令忽略hangup信号

    “> filename 2>&1”来更改缺省的重定向文件名,通常配合“&”使命令成为后台运行的任务

    catfilename;cat filename | more;cat filename | less查看文件

    举例:

    nohup java-Dfile.encoding=utf-8 -jar distributed_crawler.jar > log/44 2>&1&

    nohupcommand &:控制台logout,进程仍然运行,起到守护进程的作用,脱离终端的控制

    原理说明:

    进程组(process group):每个进程组有唯一的GID,即进程组长进程的ID

    会话期(session):有唯一一个会话期首进程(session leader),会话期ID为首进程ID,会话期可以有一个单独的控制端,与控制终端连接的会话期首进程叫做控制进程

    当网络断开或者终端窗口关闭时,终端接口将挂断信号送给控制进程(会话期首进程),控制进程收到SIGHUP信号退出,使得会话期内其他进程退出

    &:在结尾加上“&”使命令成为作业,并放入后台运行,能通过jobs查看作业情况

    setsid:run a program in a new session

    我们知道如果事先在命令前加上nohup或者setsid就可避免HUP信息的影响,但如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免HUP信号的影响:

    disown:detachthe process from its parent(the shell)

    $ disown –h jobspec:使某个作业忽略HUP信号

    $ disown –ah:使所有作业都忽略HUP信号

    $ disown –rh:使正在运行的作业忽略HUP信号

    disown示例1:如果提交命令时未使用&将命令放入后台运行

    如果没有把命令当做作业来运行,能通过CTRL-z:将当前的进程挂起到后台暂停运行,然后通过jobs查看它的作业号,用fg(foreground)将挂起的进程重新放回前台,bg(background)将挂起的进程放在后台继续运行,这样我们就能在一个终端内灵活切换多个任务,但是如果挂起会影响进程的运行结果,得慎用此方法(使用fg和bg能够在一个终端内灵活的切换作业)

    disown示例2:如果提交作业时已经使用&命令放入后台运行

    我们已经知道如何让进程避免HUP信号的影响,但如果有大量这种命令需要稳定在后台运行,如何避免对每条命令都做这样的操作?

    screen:

    Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,screen中有会话的概念,用户可以在一个session会话中创建多个screen窗口(^a + a),在每一个screen窗口中就像操作一个真实的SSH连接窗口那样:

    $ screen:登陆Linux,输入screen命令,创建screen会话,同时创建第一个screen窗口(^a + w

    (子进程、父进程的关系非常清楚)

    screen还有更高级的功能,我们可以在不中断screen各窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach),重新控制各窗口中运行的程序

    比如,我们在一个screen会话中打开4个窗口(/bin/bash),输入^a + d ,断开会话:

    看出screen会话中保存了4个screen窗口,screen会话首进程父进程为1

    如果退出screen窗口,当只剩余那一个窗口时,screen会话结束,否则回到上一个窗口

    在一个screen窗口中输入screen命令,相当于^a +c:创建一个新窗口

    (注意到给screen发送命令使用了特殊的组合键:^a)

    $ screen –ls:列出所有会话

    $ screen –rsession_name:重新连接指定的会话

    $ screen –dmSsession_name:建立一个处于断开模式下的会话

    $ screen –wipe:同list,但删除那些无法连接的会话

    当我们用“-r”连接到screen会话后,我们就可以在这个伪终端里执行各种操作,再也不用担心HUP信号会对我们的进程造成影响,也不用给每个命令都加上“nohup”或者“setsid”

    原因:

    未使用screen时新进程的进程树:

    使用screen后新进程的进程树:

    screen常用键绑定:

    总结:

    nohup/setsid/&:临时需要

    disown:补救当前已经在运行了的作业

    screen:大批量操作命令

    Windows下Linux开发

    1)samba服务器:实现Windows和Linux文件共享

    2)ssh:Windows客户端远程登录Linux服务器,并且上传、下载(sftp)文件到Linux

    下图是Windows用户远程登录到Linux服务器:

    3)Xshell:集成ssh客户端

  • 相关阅读:
    Ubuntu20.04本地安装Redash中文版
    ubuntu设置root密码
    qmake设置生成文件分类
    QML对象的构造函数和析构函数
    QString使用split按照某字符进行分解
    Qt的qDebug直接打印不添加头文件
    C++宏定义中的#
    Qt设置生成的文件路径
    QWidget禁止最大化
    js-去掉回车和空格
  • 原文地址:https://www.cnblogs.com/kaid/p/7639533.html
Copyright © 2011-2022 走看看