网络通信命令
ping
命令路径:/bin/ping 执行权限:所有用户
作用:测试网络的连通性
语法:ping 选项 IP地址
-c 指定发送次数
ping 命令使用的是icmp协议,不占用端口
#ping -c 3 127.0.0.1
ip addr
英文:interface configure 命令路径:/sbin/ifconfig 执行权限:root
作用:查看和设置网卡网络配置
语法:ifconfig [-a][网卡设备标识]
-a: 显示所有网卡信息
ifconfig 网卡名字 查看单个的网卡信息
netstat
英文:network statistics 命令路径:/bin/netstat 执行权限:所有用 户
注意:如果在系统中默认没有这个命令:直接安装net-tools包即可
作用:主要用于检测主机的网络配置和状况
-a (all)显示所有连接和监听端口
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 使用数字方式显示地址和端口号
-p 显示socket的PID和进程的名字
-l (listening)显示监控中的服务器的socket
# netstat -tlnu 查看本机监听的端口
# tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 协议 待收数据包 待发送数据包 本地ip地址:端口 远程IP地址:端口 netstat –antpl
# netstat -ntlp | grep httpd 查看某一个程序的端口信息
# netstat -atnp | grep httpd
# netstat -atnp | grep 80 查看端口
修改映射关系
修改主机名和ip地址之间的映射关系
执行# vim /etc/hosts 进入hosts文件,加入代码
主机ip 主机名
192.168.10.111 l01
192.168.10.112 l02
192.168.10.113 l03
最好让主机名字,虚拟机名字,网络连接名字保持一致
进程管理命令
ps命令
作用:查看系统中的进程信息
语法:ps [-auxle] 常用选项
a:显示所有用户的进程
u:显示用户名和启动时间
x:显示没有控制终端的进程
e:显示所有进程,包括没有控制终端的进程
l:长格式显示
查看系统中所有进程
ps aux #查看系统中所有进程,使用BSD操作系统格式,
unix ps -le #查看系统中所有进程,使用Linux标准命令格式
# ps -u or ps -l 查看隶属于自己进程详细信息
# ps aux | grep sam 查看用户sam执行的进程
# ps -ef | grep init 查看指定进程信息
pstree
需要安装软件包:psmisc.x86_64
作用:查看当前进程树
语法:pstree [选项]
-p 显示进程PID
-u 显示进程的所属用户
top
作用:查看系统健康状态
显示当前系统中耗费资源最多的进程,以及系统的一些负载情况。
语法:top [选项]
-d 秒数,指定几秒刷新一次,默认3秒(动态显示)
kill
作用:关闭进程
语法:kill [-选项] pId
# kill -9 进程号(强行关闭) 常用
# kill -1 进程号(重启进程)
# killall -l 关闭所有进程(忽略进程名的大小写)
w
作用: 查看用户信息
语法: w 用户名
# w root
显示:
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.158.3 06:02 0.00s 0.13s 0.00s w root
解释:
JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里
PCPU:CPU执行程序耗费的时间
WHAT:用户正在执行的操作
nohup
作用: 使进程在用户退出登陆后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认储 存到文件nohup.out中
语法: nohup program & &在后台运行的意思
# nohup ping www.baidu.com &
使用:
# ps -ef | grep ping 查看当前的ping进程
uptime
作用: 查看负载
例如: 使用uptime确定是服务器还是网络出了问题。如果网络应用程序运行,运行uptime来了解 系统负载是否很高。如果负载不高,这个问题很有可能是由于网络引起的而非服务器。
语法: uptime
执行:
# uptime 显示: 06:32:04 up 19:57, 4 users, load average: 0.00, 0.01, 0.00
解释: 系统时间 用户数量 服务器在过去的1分钟、5分钟、15分钟的系统平均负 载值
用户与组的创建和删除
su
语法: su 用户名
作用: 切换用户
# su root 切换回root用户,注意:如果是root用户,每次都会 要求输入密码.普通的用户可以直接切换
useradd
添加用户
语法:useradd [选项] 用户名
passwd
修改密码命令
语法:passwd [选项][用户名]
用户密码:生产环境中,用户密码长度8位以上,设置大小写加数字加特殊字符,要定期更换密 码。
userdel
删除用户
-r 删除账号时同时删除宿主目录(remove)
注意:一个用户已经打开,需要删除
做法:先跳到当前用户下面,执行exit 或 exit 用户名。这时会自动跳回root界面。
如果还是无法删除,可以将系统重启
groupadd
用于添加组
-g 指定gid
groupmod
用于修改组
-n 更改组名(new group)
# groupmod -n new_gname old_gname
groupdel
用于删除组
如果要删除的组归属于某一个用户的所属组,则不能删除该组
# useradd -g hadoop hdfs
# groupdel hadoop
文件权限命令
三种基本权限
r 读权限(read)
w 写权限(write)
x 执行权限 (execute)
权限说明
第1位:文件类型(d 目录,- 普通文件,l 链接文件)
第2-4位:所属用户(所有者)权限,用u(user)表示
第5-7位:所属组权限,用g(group)表示
第8-10位:其他用户(其他人)权限,用o(other)表示
第2-10位:表示所有的权限,用a(all)表示
eg: -rw-r--r--. 1 root root 3664 Nov 30 17:42 CentOS-Vault.repo.bak
第十一位的1代表硬链接数
r
读权限
可以查看文件内容
可以列出目录的内容(ls)
w
写权限
可以修改文件内容
可以在目录中创建删除文件( mkdir,rm )
x
执行权限
可以执行文件
可以进入目录(cd)
对于文件,我们有执行权限的命令:
r-cat,more,head,tail,less
w-echo,vi
x-命令,脚本
对于目录,我们有执行权限的命令:
r-ls
w-touch,mkdir,rm,rmdir
x-cd
能删除文件的权限是必须对该文件所在的目录有wx权限。
chmod
用于权限更改 英文:change mode (change the permissions mode of a file)
作用:改变文件或目录权限
语法:
chmod [{ugoa}{+-=}{rwx}][文件名或目录]
chmod [mode=421][ 文件或目录]
参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
可以有修改一个文件的权限:
1.root
2.文件所有者
# chmod u+x a.txt
# chmod u+x,o-x a.txt 用数字来表示权限(r=4,w=2,x=1,-=0)
# chmod 750 b.txt
rwx和数字表示方式能随意切换
注意:root用户是超级用户,不管有没有权限,root都能进行更改。用普通用户测试权限。 不能用一个普通用户去修改另一个普通用户的权限。
chown
用于更改所有者
英文:change file ownership
作用:更改文件或者目录的所有者
语法 : chown user[:group] file...
-R : 递归修改
参数格式 : user : 新的档案拥有者的使用者 ID
group : 新的档案拥有者的使用者群体(group)
# chown lee file1 把file1文件的所有者改为用户lee
# chown lee:test file1 把file1文件的所有者改为用户lee,所 属组改为test
# chown –R lee:test dir 修改dir及其子目录的所有者和所属 组
chgrp
用于改变所属组
英文:change file group ownership
作用:改变文件或目录的所属组
语法 : chgrp [group] file...
# chgrp root test.log 把test.log的所属组修改为root
sudo权限的配置
root把本来只能超级用户执行的命令赋予普通用户执行。
sudo的操作对象是系统命令
修改sudoers文件
执行# visudo 这里实际修改的是/etc/sudoers文件
sudoers文件内部的信息解释
root ALL=(ALL) ALL
#用户名 被管理主机的地址(不是访问地址)=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
# sudo -l 查看可用的sudo命令
注意: sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo 指令的用户。 若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。 用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法
sudo(选项)(参数) 选项
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s:执行指定的shell;
-u:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
实例
1 配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用 visudo编辑。
2 之所以使用visudo有两个原因
一是它能够防止两个用户同时修改它
二是它也能进行有限的语法检查
3 所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。 visudo默认的是在vi 里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。
4 visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理, 错误提示:sudoers file:syntax error,line 22<<
此时我们有三种选择:
键入“e”是重新编辑
键入“x”是不保存退出 键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
免密配置
我们这样再添加一行配置文件
hdp1 ALL=NOPASSWD: /bin/ls, /usr/bin/sudo
再来sudo一下:不再需要密码
软件管理机制
Linux下软件的安装大概可以分为如下几种
1 二进制程序的安装(最简单安装)
2 rpm程序安装(后缀名为*.rpm)
3 yum源安装(本质也是rpm安装,它只是rpm的一种安装方式而已)
4 源码安装
二进制安装
Linux下二进制格式的软件是指事先已经在各种平台编译安装好相关软件,然后压缩打包,在 安装时只需解压或者执行安装可执行文件即可。
安装*.tar.gz、*.bz2二进制软件包
对于*.tar.gz软件格式解压:tar –zxvf xxxxxx.tar.gz 对于*.bz2软件格式解压: tar -jxvf xxxxxx.tar.gz这类软件的卸载,对于解压后只有单一目录的软件,可以直接删除对应软件目 录即可,如果解压后文件分散在几个目录中,需要一一手动删除目录。
提供安装程序的软件包
这种软件包都提供了安装脚本或者安装向导程序,只需在下载此类软件包后解压,然后进入 安装目录,找到类似的setup、install、install.sh之类的可执行文件运行即可,然后根据提示 (比如安装路径,参数设置等等)进行相应的设置,接着安装就自动完成,这类软件的卸载也提供了相应的卸载脚本或者卸载向导,根据提示即可完成软件卸载。
rpm安装
RPM软件包管理
RPM软件包也称为二进制软件包
rpm的常用参数
i:安装应用程序(install)
vh:显示安装进度(verbose hash)
U:升级软件包(update)
qa: 显示所有已安装软件包(query all)
e:卸载应用程序(erase) 注意:如果其它软件包有依赖关系,卸载时会产生提示信息,可使用--nodeps强行卸载。
查询所有安装的rpm包: # rpm –qa
查询mysql相关的包: # rpm –qa | grep mysql
安装:# rpm -ivh jdk.rpm
卸载: # rpm –e mysql*
强行卸载:# rpm –e mysql* --nodeps
yum日常操作
图形化界面,手动挂载
yum(yellowdog updater modified):软件包管理工具
1 自动解决软件包依赖关系
2 方便的软件包升级
查询
yum list 查询所有可用软件包列表
yum search 关键字 搜索服务器上所有和关键字相关的包
yum info 关键字 来查找包名
安装
yum -y install 包名 -y 自动回答yes
升级
yum -y update 包名
注意:如果不加包名,就升级所有的,包括内核。必须加包名升级单个软件包,慎用升级所有的
检测升级 yum check-update
卸载
yum -y remove 包名
其他操作
yum --help、man yum 帮助
yum clean all 清除缓存和旧的包
yum repolist 查看当前可用的yum源
yum deplist httpd 列出一个包所有依赖的包
scp命令
集群模式下,各节点之间如何方便的拷贝文件?
命令格式:
scp file 远程用户名@远程服务器IP:~/ (注意:冒号和目录之间不能有空格)
如果拷贝目录,需要加-r 选项。
使用root用户
# scp /etc/profile root@lee2:/etc
# scp -r /usr/jdk1.8 lee2:/usr/java 使用 root用户可以将远程用户名省略
# scp /root/a/ qianfeng02:$PWD 注:使用$PWD 默认到当前正在操作的目录(lee2的etc下)。
注意:目标主机要有与当前 正在操作的目录相同的目录,前面的文件或文件夹会直接拷贝到后面的目录中
~:到当前用户的宿主目录
# scp /etc/services lee2:/root/service.hard 可以通过这种方式修改拷贝的文件名。
ssh免密登录
ssh免密登录作用
方便的进行节点之间的切换 ssh node2
免密登录实现流程
在第一台机器上生成一对钥匙,公钥和私钥
ssh-keygen -t rsa
当前用户的宿主目录下的.ssh目录多了两个文件
将公钥拷贝给要免密码登录的机器
注意:
1 主机名和ip都可以(确保配置了ip的映射)
2 如果出现-bash: ssh-copy-id: command not found,说明ssh-copy-id这个指令没有找到, 自己安装下即可
安装命令: # yum -y install openssh-clients
还需要输入密码
拷贝完成之后,会在要免密登录的机器上生成授权密码文件
注意:免密码登录是单向的
ssh免密登录原理
1 node1 使用 ssh-keygen –t rsa 生成公钥和私钥
2 ssh-copy-id root@node2 将公钥拷贝到node2上,实际上是把公钥内容追加到 authorized_keys文件中。
3 请求时:node1向node2发送连接请求时,附带主机,ip地址等信息
4 node2收到请求后,去授权文件里查找node1的公钥,找到之后,随机生成一个字符串,并 用公钥加密,并发送给node1
5 node1接收到密文之后,用私钥解密,并把解密结果返回给node2
6 node2拿到解密结果之后,与之前的字符串进行比较,如果相同,则可以登录成功。
定时器crontab
- 在Linux中,周期性的执行任务一般由cron这个守护进程来处理,它是一个linux下 的定时任务 执行工具,可以在无需人工干预的情况下运行作业。
[ps -ef|grep cron]
- cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。
- cron的配置文件称为“crontab”,是“cron table”的简写。
cron服务
# service crond start //启动服务
# service crond stop //关闭服务
# service crond restart //重启服务
# service crond reload //重新载入配置
# service crond status //查看服务状态
cron的配置文件位置
1 /var/spool/cron/
2 说明这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比 如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个 crontab文件。
crontab命令格式
作用:用于生成cron进程所需要的crontab文件
格式:crontab [-u username] -e
文件内容格式
格式如下: * * * * * user-name command to be executed
共有六部分组成,分别表示:
分 时 日 月 星期 要运行的命令
解析:
minute: 一小时中的哪一分钟 [0~59]
hour: 一天中的哪个小时 [0~23]
day: 一月中的哪一天 [1~31]
month: 一年中的哪一月 [1~12]
week: 一周中的哪一天 [0~6] 0表示星期天
commands: 执行的命令
书写注意事项
1 全都不能为空,必须填入,不知道的值使用通配符*表示任何时间
2 每个时间字段都可以指定多个值,不连续的值用,间隔,连续的值用-间隔。
3 命令应该给出绝对路径
4 用户必须具有运行所对应的命令或程序的权限
5 */num 表示频率
应用案例
1 每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt
//注意 如果不进行追加 ,从屏幕上看不到任何输出,因为cron把任何输出都email到 root的信箱了。
2 每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
3 晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
4 周一到周五下午,5点半提醒学生15分钟后关机
30 17 * * 1-5 /usr/bin/wall < /etc/issue
45 17 * * 1-5 /sbin/shutdown -h now
5 学校的计划任务, 12点14点,检查apache服务是否启动
*/2 12-14 * 3-6,9-12 1-5
6 每月 1、1 0、2 2日的4:45运行/apps/bin目录下的backup.sh
45 4 1,10,22 * * /apps/bin/backup.sh
7 每周六、周日的 1 : 10运行一个find命令
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
8 在每天 18:00至23 :00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh
0,30 18-23 * * * /apps/bin/dbcheck.sh
9 每星期六的 11:00 pm运行/apps/bin目录下的qtrend.sh
0 23 * * 6 /apps/bin/qtrend.sh
时间同步服务器的搭建
同步网络上的时间
在每一台机器上,都可以使用定时任务crontab同步网络上的时间服务器 ,如 time.windows.com
前提:安装ntpdate.x86_64 然后: 使用root用户,进行定时 0 * * * * /usr/sbin/ntpdate -u time.windows.com
自定义时间服务器
如果集群没有联网,那么可以自己搭建一个时间服务器,让集群中的所有机器都同步局域网 内的时间服务器。
1 选择集群中的某一台机器master作为时间服务器
2 保证这台服务器安装了ntp.x86_64。
3 保证ntpd 服务运行......
# sudo service ntpd start
开机自启动:
# chkconfig ntpd on
4 配置相应文件:# vi /etc/ntp.conf
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.81.0 mask 255.255.255.0 nomodify notrap
// 添加集群中的网络段位
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst 注释掉
#server 1.centos.pool.ntp.org iburst 注释掉
#server 2.centos.pool.ntp.org iburst 注释掉
#server 3.centos.pool.ntp.org iburst 注释掉
server 127.127.1.0 -master作为服务器
5 其他机器要保证安装ntpdate.x86_64 6
其他机器要使用root定义定时器
*/1 * * * * /usr/sbin/ntpdate -u master