学习大数据之前的linux知识(笔记)
LINUX:
LINUX:
1、修改主机名
vi /etcsysconfig/network
NETWORKING=yes
HOSTNAME=server1.itcast.cn
2、修改IP地址
(1)、运行setup,带提示,按照提示修改
(2)、vi /etc/sysconfig/network-scripts/ifcfg-eth0
service network restart
3、修改ip地址和主机名的映射关系
vi /etc/hosts
172.0.0.1 localhost.maple.com
4、常用命令
pwd
date
who whoami
last
mkdir -p aaa/bbb/ccc
rm -r aaa; rm是删文件的,-r是递归删文件,就可以删除目录了
mv ;mv aaa maple,移动 和 改名字
(1)创建文件:> 是重定向的功能
touch file;创建一个空文件
echo "i miss you " > file;创建file,并把内容写到文件中;如果file已存在,则覆盖掉
ls > somefile;把ls的内容放在file中
echo "aaaaa" >>somefile;把 aaa 追加到 somefile里;somefile不存在,则创建并添加
vi file;进入一般模式,此模式只接受各种快捷键,不能编辑;按 i,就能从一般模式进入到编辑模式;再按Esc回到一般模式;再按:进入到底层命令模式,wq保存;
都是一般模式下:
i:当前位置插入
a:当前位置后一个位置插入
o:当前位置下一行插入
A:当前位置的最后插入
I:大写 i,当前位置最前面插入
gg;直接跳到文件的首行
G:直接跳到文件的末行
dd:删除一行
5dd:一次删除光标后的5行
yy:复制 当前行
3yy:复制多行;复制当前光标下3行
p:粘贴
v:进入(字符选择模式)可视化视图,按上下左右键,按y复制,p粘贴
ctrl+v:可视 块模式,可以选择一块
shift+v:选择行模式,选择一行
查找并替换:(底行命令模式)
%s/aaaaa/12345:查找文件中所有的aaaaa,并替换为 123456
查找:/12345 :查找文件中第一个12345,按 n 换下一个,N 上一个。
shift+z+z 也是保存。
cp file.1 /home/hadoop/file2
cat file:一次性将文件内容输出到控制台
more file:下翻一页(空格),上翻一页(b),退出 q
less file:下翻一页(空格),上翻一页(b),上翻一行(↑),下翻一行(↓),可以搜索关键字(/keyword)
(2)文件权限
drwxr-xr-x:(也可以用二进制表示 111 101 101 --> 7 5 5)
d:表示节点类型(d:文件夹 -:文件 l:链接)
r:可读 w:可写 x:可执行
有三组:
第一组rwx:表示这个文件的拥有者对他的权限:可读可写可执行
第二组r-x:表示这个文件的所属组对他的权限:可读不可写可执行
第二组r-x:表示这个文件的其他用户对他的权限:可读不可写可执行
chmod g-rw file: 将file文件对所属组的rw权限取消
chmod o-rw file: 将file文件对其他人的rw权限取消
chmod u+x file: 将file文件对所属用户的权限增加x
chmod 644 file:
chmod 755 file:
chmod 777 file;
chmod -r 770 file :如果将一个文件夹里所有文件的权限统一修改,加 -r 递归
(3)基本的用户管理
useradd angela:添加用户password angela
password angela:修改密码
一个文件本来属于A用户组,现在把他改为B用户组
在root用户下,执行
chown B:B file (只有root能执行)
为用户配置sudo权限:
用root编辑 vi /etc/suduers
hostname:查看主机名
hostname aaa:改主机名为aaa(root下),但是重启之后就无效了。想要一直有效,修改
vi /etc/sysconfig/network
uname -a 查看系统信息
uname -r 查看系统信息
(4)挂载
挂在外部存储设备到文件系统中
mkdir /mnt/cdrom
mount -t iso9660 -o ro /devcdrom /mnt/cdrom :将设备/dev/cdrom 挂载到挂载点 : /mnt/cdrom中
umount /mnt/cdrom 取消挂载
du -sh file查看文件大小 -h 人类可读
du -ah
df -h 查看分区 磁盘空间
关机:
halt
重启:
reboot
shutdown -h now /init 0
shutdown -r now /reboot
(5)后台服务管理
service network status:查看指定服务的状态
service network stop:停止指定服务
service network start:启动指定服务
service network restart:重启指定服务
service --status-all:查看系统中所有的后台服务
(6)系统启动级别管理
vi /etc/inittab
chkconfig:查看所有服务器自启配置
chkconfig iptables off:让iptables关闭
chkconfig iptables on:让iptables打开
chkconfig iptables --list 查看
从linux里面登陆到另外一台:SSH
ssh host
scp install.log root@host:/home/
要输入密码的
远程登陆的安全外壳协议
有两种身份验证机制:
1、用户名+密码验证
2、密钥验证
如何不输入密码呢?
命令:
ssh-keygen (提示时,直接回车即可)
ssh-copy-id B
原理:服务器A要ssh到服务器B,A通过 ssh-keygen生成密钥对公钥私钥,把公钥给B,B把A的身份放在自己的 authorized_keys中,当A ssh root@B 的时候,A把自己的身份带过去了,B获取到身份去自己的 authorized_keys去找,找到了之后会生成一个随机字符串,并用公钥进行加密把密文给A,A用自己的私钥进行解密,把结果再给B,B获取到结果并与自己生成的随机字符串做比较,相等的话,同意A免密登陆过来。
(7)如何上传安装包到服务器,下载安装包到本地
上传:
1、用图形化界面,比如filezilla
2、可以使用sftp alt+p调出,用put命令上传, put E:\DevelopSoftware\jdk-8u171-linux-x64.tar.gz,默认是上传到root目录里,如果想指定上传目录,则cd /home,然后put,就上传到了 home下
下载:
get /home/jdk-8u171-linux-x64.tar.gz,默认是下载到windowns下的文档里。
如果想改变下载目录的话,用 lcd 指定,
lcd f:/logs/
get /home/jdk-8u171-linux-x64.tar.gz
这样的话,就下载到了我们的 f盘的logs下了
(8)压缩解压
压缩:
1、gzip 1.txt :用来压缩的
2、gzip -d 1.txt.gz :用来解压缩
解压:
3、tar -cvf A.tar B :打包,就是把 B 文件夹里所有文件都打包到 A.tar 里
4、tar -xvf A.tar:解包
一般项目中我们是先打包,再压缩;tar -cvf A.tar B;gzip A.tar --> A.tar.gz
我们可以一部搞定 tar -zcvf my.tar.gz /somefile
tar -zcvf my.tar.gz aaa/:是把文件夹aaa下的所有 打包并压缩成 my.tar.gz
tar -zxvf my.tar.gz :是把my.tar.gz解压缩并解包
tar -zxvf jdk-8u171-linux-x64.tar.gz -C apps/ : 把jdk解压并解包到apps目录下;-C 指定目标路径的
(9)安装jdk过程
tar -zxvf jdk-8u171-linux-x64.tar.gz -C apps/ : 把jdk解压并解包到apps目录下;-C 指定目标路径的
vi /etc/profile :修改i环境变量
在文件最后添加
export JAVA_HOME=/root/apps/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin
保存退出
source /etc/profile :重新加载环境变量
输入java测试
(10)在线安装mysql
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum install mysql-server
find / -name mysql
service mysql status
service mysqld status
(11)修改yum源
cd /etc/yum.repos.d/
yum clean all:清楚yum缓冲
yum repolist:列出可用的yum苍仓库
yum install gcc
yum install -y httpd:安装相应的软件
Centos7系统minimal方式安装是没有ifconfig命令的,可以通过安装net-tools解决。
ifconfig command not found的问题:
yum install net-tools可以解决
ifconfig发现不是 eth0而是ens32或者其他,我们为了看起来和以前保持一致改为 eth0
1、vi /etc/sysconfig/network-scripts/ifcfg-ens32
把 NAME 和 DEVICE 改为 eth0
2、mv ifcfg-ens32 ifcfg-eth0
3、vi /etc/default/grub
在 GRUBCMDLINELINUX里面加上“net.ifnames=0 biosdevname=0 ”的内核参数
4、运行 grub2-mkconfig -o /boot/grub2/grub.cfg 重新生成GRUB配置并更新内核参数。
5、重启 reboot,测试 ifconfig
(12)关于rpm
rpm -qa | grep mysql :查看系统安装的rpm包
rpm -ivh perl*:安装perl依赖
可能会提示有包冲突,解决: rpm -e 冲突包名 --nodeps
(13)关于防火墙(centos 7是firewall)7以下的都是iptables
firewall-cmd --list-all :规则
systemctl list-unit-files|grep enabled
/bin/systemctl restart firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
改为iptables的话:
iptables -L -n:规则
service firewalld stop
systemctl disable firewalld.service #禁止firewall开机启动
yum install iptables-services #安装
vi /etc/sysconfig/iptables #编辑防火墙配置文件
/bin/systemctl start iptables.service #开启
/bin/systemctl stop iptables.service #关闭
/bin/systemctl status iptables.service 看状态
systemctl enable iptables.service #设置防火墙开机启动
防火墙的一些设置:
禁止ssh登陆
iptables -A INPUT -p tcp --dport 22 -j DROP
比如说在防火墙打开8080端口
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
-A:--append chain 追加到规则的最后一条
-D:--delete chain 删除
-I --insert chain 添加到规则的第一条
-P:--proto 协议,常用的协议有 tcp、udp、icmp(ping)、all
-j:--jump targe 常见的行为有 ACCEPT、DROP、REJECT,但一般不用REJECT,会带来安全隐患。
INPUT 和 DROP 必须要大写
(
14)SHELL 脚本
1、pstree:进程树
2、系统变量:$HOME,$PWD,更多请输入set查看,set显示当前shell中所有变量
注意:
3、两侧不能有空格
4、双引号:把特殊字符脱意掉 x="aaa" ; y="$x bbb"; echo $y = aaa bbb;
5、单引号:一致当作字符串 x='aaa' ; y='$x bbb'; echo $y = $x bbb;
6、A = 9
unset A : 撤销变量
readonly B=2 生命静态的变量B=2,不能unset
7、export 变量名;可把变量i省委全局环境变量,可供其他shell程序使用
8、A=`ls -la` 等价于 A=$(ls -la) :把A1-A2的结果返回给变量A,再echo $A
9、$? :表示上一个命令的返回值,输入lss,输入$? 观察结果
10、$$:表示当前进程编号
11、$0:表示当前脚本名称
12、$n:表示n位置的输入参数(n代表数字,n>=1)
举例:#!/bin/bash
aa="hello"
echo "第一个参数:="$1
echo "第2个参数:="$2
执行: ./test.sh whb zcc
结果:
第一个参数:=whb
第2个参数:=zcc
13、$#:表示参数的个数,常用于循环
$*和$@:都表示参数列表
举例:
#!/bin/bash
aa="hello"
echo "参数列表:"$*
执行:./test.sh a b c d
结果:参数列表:a b c d
14、运算符
例如:计算 (2 + 3)* 4
1、分步计算
S=`expr 2 + 3`
expr $S \* 4
2、一步计算
expr `expr 2 + 3 ` \* 4
或
echo `expr \ `expr 2 + 3\`\* 4`
或
echo $(((2+3)*4))
15、for循环
#!/bin/bash
aa="hello"
A=$*
(不要带双引号,带双引号的话建议用 $@)
echo "所有参数" $A
for N in $A
do
echo $N
done
执行:
./test.sh whb zxx mn zl
结果:
所有参数 whb zxx mn zl
whb
zxx
mn
zl
或
for N in 1 2 3;do echo $N;done
或
for N in {1..3};do echo $N;done
或
for((i=0;i<=5;i++))
do
echo "welcome $i times"
done
或
for((i=0;i<=5;i++));do echo "welcome $i times";
done
16、while循环
while expression
do
command
...
done
或
i=1
while((i<=3))
do
echo $i
let i++ //自增
done
17、case语句
case $l in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)
echo "Usage:{start:stop}"
esac
18、read
read -p(提示语句)-n(字符个数) -t(等待时间)
read -p "please enter a number:" numb
echo $numb
19、if判断
if [ condition ]
then
statements
[elif condition
then statements...
]
[else
statements]
fi
例子:
#! /bin/bash
read -p "please enter your name:" NAME
if [ $NAME = whb ] #一定要有空格,返回0,成功 >1,错误
then
echo "hello ${NAME},welcome !"
elif [ $NAME = zcc ]
then
echo "hello ${NAME},welcome !"
else
echo "SB,get out here !"
fi
[ condition ] && echo OK ;条件满足,执行后面的
[ ] && echo OK || echo Not OK ;条件满足,执行OK,不满足,执行Not OK
18、常用判断条件
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
-f 文件存在并且是一个常规的文件
-s 文件存在且不为空
-d 文件存在并是一个目录
-b 文件存在并且是一个块设备
-L 文件存在并且是一个链接
19、shell自定义函数
[ function ] funname [()]
{
action;
[return intl]
}
function start()/function start / start()
举例:
#!/bin/bash
fSum 3 2;
function fSum()
{
echo $1,$2;
return $(($1+$2));
}
total=$?;
echo "第一次调用后的返回结果:"$total
fSum 5 7;
total=$?;
echo $total,$?;
注意:
1、必须在调用函数地方之前,先声明函数,shell脚本是逐行运行,不会像其他语言一样先预编译
2、函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
脚本调试:
sh -vx helloword.sh
或者在脚本中增加 set -x
练习:
cut:
1、取 echo $PATH 按:号分第5个
echo $PATH | cut -d ':' -f 5
cut:split
-d:按分隔符
-f:第几个
2、取 echo $PATH 按:号分第3个和第5个
echo $PATH | cut -d ':' -f 3,5
3、取 echo $PATH 按:号分第3个到最后一个
echo $PATH | cut -d ':' -f 3-
4、取 echo $PATH 按:号分第1-3个和第5个
echo $PATH | cut -d ':' -f 1-3,5
sort:
1、cat /etc/passwd | sort
按字母顺序排序
2、cat /etc/passwd | sort -t ':' -k 3
以 :号分割之后,按第三列 排序 (如果是数字的话,是按字典顺序 0 1000 11 1 12 50)
cat /etc/pasws | sort -t ':' -k 3n (按数字大小 0 1 11 12 50 ...)
3、倒序,加个r
cat /etc/pasws | sort -t ':' -k 3nr
4、uniq:去重(前提是要排好序)
测试:
vi sortfile
输入:
hello
world
hello
world
hello
保存
执行:cat sortfile | sort | uniq
结果:
hello
world
如果想统计重复几次,可以再加个 -c
cat sortfile | sort | uniq -c
结果:
3 hello
2 world
5、wc:
wc -l /etc/passwd 统计行数,在对记录数时,很常用
结果:22 /etc/passwd 表示系统有22个账户
wc -w /etc/passwd 统计单词出现次数
结果:31 /etc/passwd 按空格来区分的
wc -m /etc/passwd
结果:1000 /etc/passwd 统计文件的字节数
6、sed:(不加 -i ,就是显示结果,没有真正执行)
删除:
sed '2d' file --删除file文件第二行 ,只显示结果
sed -i '2d' file --删除file文件第二行 ,真的删除了
sed '2,$d' file --删除file文件的第二行到末尾所有行
sed '$d' file --删除file的最后一行
sed '/hello/'d file -- 删除file文件所有包含hello的行
sed '/hel/'d file -- 删除file文件所有包含hel的行
替换:
sed 's/hello/whb/g' file --把file文件中每一个包含hello的行,都替换为 whb,如果不加g,则如果一行上有两个hello,只会替换第一个,g为global。
sed -n 's/^hello/whb/p' file ---n 和p一起使用表示只打印那些发生替换的行。匹配以hello开头
的,这里是正则
sed 's/^hel/&whb/' file -- 在hel后面追加whb 得:helwhblo
sed -n 's/\(hel\)lo/\1whb/p' file --所有的hello 被替换为 helwhb
sed -e '1,3d' -e 's/hello/whb/' file - -e允许在同一行里执行多条命令
7、awk:
last -n 5 | awk '{print $1}' --取当前登陆者 前五行,默认按空格分隔,打印第一列
cat /etc/passwd | awk -F ':' '{print $1}' -- -F 指定分隔符
cat /etc/passwd | awk -F ':' '{print $1"\t"$7}' -- 把结果再拼接一个 第7列
cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
----给结果一个表头 和结尾
20、linux下安装nginx
1、下载tar.gz包:http://nginx.org/en/download.html
2、上传到linux服务器里并解压
alt+p进入到SFTP:put E:\DevelopSoftware\linux\nginx-1.8.1.tar.gz
默认会把nginx的包上传到/root下
tar -zxvf nginx-1.8.1.tar.gz -C /usr/local/src/ 解压并解包到
/usr/local/src/ 目录下(约定俗成)
3、编译nginx
cd /usr/local/src/nginx-1.8.1
#检查安装环境,看是否缺包,并指定将来要安装的路径
./configure --prefix=/usr/local/nginx
发现报错 ./configure: error: C compiler cc is not found
#使用yum安装缺少的包
yum -y install gcc pcre-devel openssl openssl-devel
#编译安装
make && make install 编译 && 安装
#测试安装是否成功
/usr/local/nginx/sbin
./nginx
netstat -nltp | grep 80
常用命令:
/usr/local/nginx/sbin/
nginx
# 启动Nginx
/usr/local/nginx/sbin/nginx -
t
# 测试配置文件是否有错误
/usr/local/nginx/sbin/nginx -
v
# 查看Nginx版本
/usr/local/nginx/sbin/nginx -
V
# 查看Nginx版本和编译安装时的编译参数
/usr/local/nginx/sbin/nginx -
s stop
# 强制停止Nginx服务
/usr/local/nginx/sbin/nginx -
s quit
# 优雅地停止Nginx服务(即处理完所有请求后再停止服务)
/usr/local/nginx/sbin/nginx -s reload
# 重新加载Nginx配置文件,然后以优雅的方式重启Nginx
-
~” 匹配时区分大小写
-
“~*” 匹配时不区分大小写
-
“=” 精确匹配字符和字符串
-
“^~” 例如: ^~ /images/ 匹配到任何以images开头的,便停止搜索。
4、配置反向代理
server {
listen 80;
server_name shizhan; #主机名
#charset koi8-r;
#access_log logs/host.access.log main;
location / { #拦截所有请求
root html;
index index.html index.htm;
proxy_pass http://192.168.116.128:8080; #tomcate启动 因为我的服务器里 vi /etc
}
5、配置动静分离
把上面的 location /注释掉,改为
location ~.*\.(jsp|do|action)$ {
proxy_pass http://192.168.116.128:8080;
}
location ~.*\.(html|js|css|gif|jpg|ipeg|png)$ {
root html;
index index.html index.htm;
expires 3d;
}
改完之后
/usr/local/nginx/sbin/nginx -s reload 重新加载配置
浏览器访问:
(1)、http://192.168.116.128:8080/ 这个就是不经过nginx,直接访问tomcate服务器(nginx默认监听80端口,这里是8080)
(2)、http://192.168.116.128/index.jsp 这个就经过nginx了,监听到.jsp,转发到 http://192.168.116.128:8080,由于这里配置的 样式后缀js啊,css啊是去
nginx里html路径下找的,所以我们要把tomcate里的样式cp到nginx的html里才能找到。
cd /root/apps/apache-tomcat-7.0.88/webapps/ROOT
cp ./* /usr/local/nginx/html
(3)、http://192.168.116.128/index.html 这里监听到html,静态资源,在nginx里面去找,其实就是nginx的欢迎页面
6、负载均衡
把上面的
location ~.*\.(jsp|do|action)$ {
proxy_pass http://192.168.116.128:8080;
}
改为
location ~.*\.(jsp|do|action)$ {
}
在http{} 模块里配置
upstream tomcats {
server 192.168.116.128:8080 weight=1; //权重
#server 192.168.116.128:8080 weight=1;
#server 192.168.116.128:8080 weight=1;
}
21、linux下安装keepalived
1、下载包:http://keepalived.org
2、SFTP ,put到服务器
3、进到/root下,执行
tar -zxvf keepalived-1.2.19.tar.gz -C /usr/local/src
4、进入到 /usr/local/src/keepalived-1.2.19 ,执行
./configure --prefix=/usr/local/keepalived
5、安装和编译
make && make install
6、将keepalived添加到系统服务中
拷贝执行文件(启动脚本)
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
将init.d 文件拷贝到etc下,加入开机启动项(初始化脚本)
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
将 keepalived 文件拷贝到etc下(配置文件)
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
创建 keepalived 文件夹
mkdir -p /etc/keepalived
将 keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
添加可执行权限
chmod +x /etc/init.d/keepalived
添加keepalived到开机自启动
chkconfig --add keepalived
chkconfig keepalived on
整理如下,直接拷贝执行
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
chmod +x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on