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
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)$ {
             proxy_pass http://tomcats ;  #tomcats 是后面的tomcate服务i去组的逻辑组号
        }
在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

猜你喜欢

转载自blog.csdn.net/qq_33101675/article/details/80391750