• 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

    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

    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" role="presentation" style="position: relative;">hello/\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

  • 相关阅读:
    记录一次接入xxl-job的踩坑记录
    go 切片长度与容量的区别
    解锁机器人技术的钥匙—《应用机器人学:运动学、动力学与控制技术》
    C++之异常
    rebase 和 merge合并代码
    Destoon采集翻译伪原创发布工具
    计算机视觉之Vision Transformer图像分类
    全国流通经济杂志全国流通经济杂志社全国流通经济编辑部2022年第25期目录
    JavaScript教程-函数绑定,包装器,bind,偏函数,在没有上下文情况下的partial,
    ts查缺补漏
  • 原文地址:https://blog.csdn.net/m0_62089210/article/details/127400050