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文件(\r\n)转化为Linux文件(\r)
unix2dos:Linux文件(\n)转化为Windows文件(\r\n)
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\ Text\2/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客户端