Linux-高阶知识
目录
1、Httpd服务... 1
2、系统管理... 2
2.1、挂载外部设备... 2
2.2、统计文件或者文件夹大小... 3
2.3、系统服务管理... 4
2.4、修改系统时间... 4
3、软件安装... 5
4、配置本地YUM源... 7
5、进程管理... 8
5.1、进程概念... 8
5.2、进程状态... 8
5.3、进程管理常用操作... 9
5.3.1、PS命令... 9
5.3.2、kill/pidof/pkill命令... 10
5.3.3、进程切换... 10
5.3.4、top命令... 11
5.3.5、pstree命令... 11
5.3.6、JPS命令... 12
6、计划任务... 12
6.1、概念... 12
6.2、命令服务管理crontab. 12
6.3、crontab功能使用... 13
7、克隆虚拟机... 14
8、SSH免密登录配置... 14
service --status-all | grep httpd
为确保是否开启成功,请再重新检查一次
cd /var/www/html
vi huangbo.html
挂载是一个非常重要的功能,使用非常频繁。它指将一个设备(通常是存储设备,可以挂载光盘、硬盘、磁带、光盘镜像文件等)挂接到一个已存在的目录上(这个目录可以不为空,但挂载后这个目录下以前的内容将不可用)。
需要理解的是,Linux操作系统将所有的设备都看作文件,它将整个计算机的资源都整合成一个大的文件目录。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备。
挂载需要有挂载源和挂载点
在常用挂载目录/mnt下创建一个目录cdrom用来进行挂载:
mkdir /mnt/cdrom
将挂载源设备/dev/cdrom挂载到该挂载点(/mnt/cdrom)上:
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/
ln -s /mnt/cdrom /var/html/cdrom(软连接)
注:-t:文件系统类型,iso9660表示光盘或者光盘镜像
-o:挂载方式,ro表示以只读方式,loop表示把挂载的设备当做一个磁盘分区
我们准备一个镜像文件:CentOS-6.7-x86_64-bin-DVD1.iso
再准备一个挂载目录:mkdir /mnt/centos
mount -t iso9660 -o loop /root/CentOS-6.7-x86_64-bin-DVD1.iso /mnt/centos
/dev/cdrom /mnt/cdrom iso9660 defaults 0 0 /root/CentOS-6.7-x86_64-bin-DVD1.iso /mnt/centos iso9660 defaults,ro,loop 0 0 |
第一列:/dev/cdrom:挂载源,要挂在的磁盘分区或者存储设备,或者文件系统 第二列:/mnt/cdrom:挂载点,挂载位置 第三列:iso9660:文件系统类型,ext4文件系统,swap表示交换分区,…… 第四列:defaults:挂载参数 第五列:0:表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上大多数的dump设置都是0 第六列:0:读取文件系统时候的检查顺序,允许的数字是0,1,2,根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为2,0表示不检查 |
umount /mnt/cdrom
df -h
du -sh /mnt/cdrom/packages
1、跟服务相关的基本使用命令:
service --status-all # 查看系统所有的后台服务进程
service sshd status # 查看指定的后台服务进程的状态
service sshd stop # 停止
service sshd start # 开始
service sshd restart # 重启
2、配置后台服务进程的开机自启
chkconfig httpd on ## 让httpd服务开机自启
chkconfig httpd off ## 让httpd服务开机不要自启
[root@hadoop01 mnt]# chkconfig httpd off [root@hadoop01 mnt]# chkconfig --list | grep httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@hadoop01 mnt]# chkconfig --level 35 httpd on [root@hadoop01 mnt]# chkconfig --list | grep httpd httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off |
查看时间:下面两种都OK
[root@hadoop01 ~]# date -R [root@hadoop01 ~]# date [root@hadoop01 ~]# date '+%Y-%m-%d %H:%M:%S' |
查看时区:cat /etc/sysconfig/clock
/etc/localtime
其他时区文件则位于
/usr/share/zoneinfo
其中中国时区使用
/usr/share/zoneinfo/Asia/Shanghai
则,更改时区的话,直接使用如下命令就OK
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
PS:如果没有Asia/Shanghai时区文件,请使用tzselect命令去生成时区文件,生成好的时区文件就在/usr/share/zoneinfo目录下
[root@hadoop01 ~]# date -s 12/25/2016 [root@hadoop01 ~]# date -s 19:57:30 [root@hadoop01 ~]# date -s “2016-12-25 19:57:30” |
[root@hadoop01 ~]# ntpdate time.nist.gov [root@hadoop01 ~]# ntpdate 202.120.2.101 |
上海交通大学网络中心NTP服务器地址:202.120.2.101(ntp.sjtu.edu.cn)
中国国家授时中心服务器地址:cn.pool.ntp.org
若以上提供的网络时间服务器不可用,请自行上网寻找可用的网络时间服务器
crontab的使用后面会有详细讲解
上面的配置表示,每隔十分钟从202.120.2.101该时间服务器同步一次时间。
|
1、二进制发布包
软件已经针对具体平台编译打包发布,只要解压,修改配置即可
演示过程见JDK安装文档”资料-jdk安装”
或者参考Linux系统中的Tomcat的安装
2、RPM发布包
软件已经按照RedHat(Redhat Package Manager)的包管理工具规范RPM进行打包发布,需要获取到相应的软件RPM发布包,然后用rpm命令进行安装
演示过程见MySQL安装文档”资料-MySQL安装”
常用命令:
1、安装包:rpm -ivh 包名 参数: -i :安装的意思 -v :可视化 -h :显示安装进度 另外在安装一个rpm包时常用的附带参数有: --force 强制安装,即使覆盖属于其他包的文件也要安装 --nodeps 当要安装的rpm包依赖其他包时,即使其他包没有安装,也要安装这个包
2、升级包:rpm -Uvh filename -U 升级
3、卸载包rpm -e filename (这里的filename是通过rpm的查询功能所查询到的)
4、查询一个包是否安装:rpm -q 包名(这里的包名,是不带有平台信息以及后缀名的)
5.查询当前安装的所有rpm包:rpm -qa 查询当前安装的和sql相关的包:rpm -qa | grep 'sql' 查询sqlite安装路径:rpm -ql sqlite |
3、Yum在线安装
Yum(Yellow dog Updater, Modified)是一个在CentOS和RedHat以及SUSE中的Shell前端软件包管理器。比如软件已经以RPM规范打包,但发布在了网络上的一些服务器上,可用yum在线安装服务器上存在的rpm软件,并且会自动解决软件安装过程中的库依赖问题(注:类似于maven),yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记
yum仓库服务器本质上就是一台http服务器,服务器的目录中放置了rpm包,及rpm包的索引信息文件,即可为yum客户端提供rpm文件下载
安装示例:yum install nc
yum命令工具使用举例
yum update 升级系统
yum install ~ 安装指定软件包
yum update ~ 升级指定软件包
yum remove ~ 卸载指定软件
4、源码编译安装
软件以源码工程的形式发布,需要获取到源码工程后用相应开发工具进行编译打包部署
安装示例:资料-Redis的安装
yum install -y httpd
service httpd status
比如,将centos安装光盘中的rpm库放入:
mkdir /var/www/html/centos
cp -r /mnt/cdrom/* /var/www/html/centos/
注:上面这种方式比较浪费空间,可以不用拷贝,其实只要创建一个软连接即可
ln -s /mnt/cdrom /var/www/html/centos
地址:http://192.168.123.202/centos
将本地http服务器加入repo地址
首先,将内置的源全部disable掉
cd /etc/yum.repos.d/
rename .repo .repo.bak *
然后,新建一个repo源:
vi CentOS-Local.repo
[CentOS-Local] name=CentOS-Local baseurl=http://192.168.123.202/centos/cdrom0 http://192.168.123.202/centos/cdrom1 gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 |
接下来,我们检查我们自定义的源是否生效,使用命令:yum repolist
yum install -y 你要的软件
7、补充:
国内有名的Yum源:
网易:
CentOS5 :http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS6 :http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS7 :http://mirrors.163.com/.help/CentOS7-Base-163.repo
进程是操作系统中非常重要的一个概念,进程是程序的执行过程,相对于程序,进程是动态的,在linux系统中,它与用户权限相关,程序与进程并没有一一对应,一个程序可能对应多个进程。
子进程与父进程:一个进程产生另外一个进程,产生的进程称为子进程,生成另外一个进程的进程称为父进程
进程状态总体来看主要包括三种,分别是就绪状态、运行状态、等待状态,就绪状态指的是进程除了CPU资源,其他运行资源都已获得,当就就绪状态的进程得到CPU资源时,则进入进程进入运行状态,运行状态的进程在时间片用完后会重新转换成就绪状态,如果在运行时进程遇到IO等阻塞操作,则进程会进入等待状态,等待状态的进程当阻塞操作完成后,进程将进入就绪状态。
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
ps 命令常用选项包括: 1、a显示所有用户的进程 2、u显示用户名和启动时间 3、x显示所有进程,包括没有控制终端的进程 4、e显示所有进程,包括没有控制终端的进程,较x选项,信息更为简略 5、l显示进程详细信息,按长格式显示 |
常用组合
ps -au 显示所有用户进程,并给出用户名和启动时间等详细信息 |
ps -aux 显示所有用户进程,包括没有控制终端的进程,并给出用户和和启动埋单等详细信息 |
ps -el 按长格式显示进程详细信息 |
以上命令执行结果中可能出现的一个字段含义:
USER: 进程所有者 PID: 进程号 PPID: 进程的父进程ID %CPU: CPU占用率 C: 进程的CPU占用率 %MEM: 内存占用率 VSZ: 表示如果一个程序完全驻留在内存的话需要占用多少内存空间; RSS: 指明了当前实际占用了多少内存; TTY: 终端的次要装置号码 (minor device number of tty) F:进程的标志 S:进程的状态 STAT: 该进程程的状态,有以下值 D: 不可中断的静止 R: 正在执行中 S: 静止状态 T: 暂停执行 Z: 不存在但暂时无法消除 W: 没有足够的记忆体分页可分配 <: 高优先序的进程 N: 低优先序的进程 L: 有记忆体分页分配并锁在记忆体内 PRI:进程的优先权 NI:进程的Nice值 ADDR:进程的地址空间 SZ:进程占用内存的大小 WCHAN:进程当前是否在运行 TTY:进程所属终端 START: 进程开始时间 TIME: 执行的运行时间 COMMAND:所执行的指令 CMD:进程的命令 |
有时候某个进程可能会长期占用CPU资源或无法正常执行或超出运行时间等,此时可能希望人工干预直接将进程杀死,这时候kill命令可以派上用场
1、kill pid 直接杀死进程,但不能保证一定能杀死
2、kill -9 pid 强制杀死进程
3、pidof命令用于查看某个进程的进程号(例如:pidof mysqld)
4、pkill命令可以按照进程名杀死进程。pkill和killall应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill来杀掉
前台进程指的是进程在执行时会将命令行阻塞,直到进程执行完毕;后台进程指的是进程在执行时不会阻塞当前命令行,而是在系统后台执行
1、ctrl + c 终止进程
2、ctrl + z 挂起进程
3、fg命令将进程转换到前台执行
4、bg命令将进程转换到后台执行
5、jobs命令查看任务
Top 命令可以定期显示所有正在运行和实际运行并且更新到列表中,它显示出 CPU 的使用、内存的使用、交换内存、缓存大小、缓冲区大小、过程控制、用户和更多命令。它也会显示内存和 CPU 使用率过高的正在运行的进程。
按q键退出查看
将进程间的关系以树结构的形式展示,能清楚看各进程之间的父子关系
pstree :以树状形式显示进程
pstree -p : 以树状形式显示进程,并且显示进程号
JPS命令是JDK提供的一个检查系统是否启动了JVM进程的一个进程。不是linux系统自带的。主要任务就是用来检查java进程的。
计划任务在Linux的体现主要分为at和crontab,其中:
at:通过at命令安排任务在某一时刻执行一次
crontab:通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
在CentOS系统上,crontab服务的名称叫做crond
1、安装
yum -y install crontabs
2、服务操作说明
service crond start ## 启动服务
service crond stop ## 关闭服务
service crond restart ## 重启服务
service crond reload ## 重新载入配置
service crond status ## 服务状态
## 查看crontab服务是否已设置为开机启动,执行命令:
chkconfig --list
## 加入开机自动启动:
chkconfig --level 35 crond on
1、命令格式
crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
参数说明: -u user:用来设定某个用户的crontab服务,例如,”-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。 file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。 -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。 -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。 -r:删除定时任务配置,从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 -i:在删除用户的crontab文件时给确认提示。
命令示例: crontab file [-u user] ## 用指定的文件替代目前的crontab。
必须掌握: crontab -l [-u user] ## 列出用户目前的crontab. crontab -e [-u user] ## 编辑用户目前的crontab.
补充:通过crontab添加的计划任务都会存储在/var/spool/cron/目录里 |
2、配置说明
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时0~23(0表示0点) 7-9表示:7点到9点之间 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 |
*/1 * * * * date >> /root/date.txt 上面的例子表示每分钟执行一次date命令
30 21 * * * /usr/local/etc/rc.d/httpd restart 上面的例子表示每晚的21:30重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/httpd restart 上面的例子表示每月1、10、22日的4 : 45重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/httpd restart 上面的例子表示每周六、周日的1 : 10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/httpd restart 上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache
0 23 * * 6 /usr/local/etc/rc.d/httpd restart 上面的例子表示每星期六的11 : 00 pm重启apache
* */1 * * * /usr/local/etc/rc.d/httpd restart 上面的例子每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/httpd restart 上面的例子晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/httpd restart 上面的例子每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/httpd restart 上面的例子一月一号的4点重启apache |
见文档”资料-vmware克隆虚拟机”
SSH为Secure Shell(安全外壳协议)的缩写,简单说,SSH只是一种网络协议,用于计算机之间的加密登录,很多ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而SSH就是专为远程登录会话和其他网络服务提供安全性的协议。
SSH是由客户端和服务端的软件组成的 服务端是一个守护进程(sshd),他在后台运行并响应来自客户端的连接请求。 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。 |
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证) 只要你知道自己帐号和口令,就可以登录到远程主机。
第二种级别(基于密钥的安全验证) 需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密”质询”(challenge)并把它发送给客户端软件。客户端软件收到”质询”之后就可以用你的私人密匙解密再把它发送给服务器。
原理图: |
假如A要登录B:
在A上进行操作:
ssh-keygen 或者 ssh-keygen -t rsa 上面一种是它的简写形式,提示要输入信息的时候不用输入任何东西,直接回车三次就OK 上述命令执行完成之后,会生成这么两个文件,其中id_rsa.pub是公钥
cat id_rsa.pub > authorized_keys 或者 cp id_rsa.pub authorized_keys
或者 scp -r authorized_keys [email protected]:/root/.ssh/ 这是一个远程拷贝命令,意思是把authorized_keys拷贝到192.168.123.202这台机器对应目录下
ssh 192.168.123.202
重点理解之处:A将公钥发给B,不是B可以访问A,而是A可以访问B,所以任何一台机器想要能访问其他机器,那么就把自己的公钥内容发送到别的机器的authorized_keys中去,记住,是追加,不是覆盖 |