Linux基础命令行与进阶

来源:互联网 发布:mac 必应词典下载 编辑:程序博客网 时间:2024/06/17 02:20

基础shell

1.root下创建用户neusoft

useradd neusoft

2.修改账号密码

passwd neusoft

3.文件权限

ls - l第一列为类型(文件/目录/链接等),第二列到第四列为文件所有者的权限,第五列到第七列为用户组其他用户的权限,第八列到第十列为其他用户组用户权限。以当前用户权限作为说明,r(数字表示为4)代表可读,w(数字表示为2)代表可写,x(数字表示为1)代表可执行一个文件是否可以执行仅与x权限有关,与文件“扩展名”无关,借用一句话“linux中所有对象都是文件”并且这三组权限,每组都是按,读写执行即(rwx)顺序排布。#赋予运行权限(u为当前文件所属用户、g为所属用户的用户组内其他用户、o为其他用户组用户,a为所有用户。a=u+g+o)chmod a+x filenamechmod g+x filenamechmod o+x filenamechmod u+x filename#递归更改/home/neusoft权限为755(7代表所属用户具有:读写运行;第一个5代表所属用户的用户组内其他用户权限:读、运行;第二个5代表其他用户组用户权限:读、运行)chmod -R 744 /home/neusoft#3.更改文件所有者及所属用户组chown neusoft.neusoft filename#递归修改chown -R neusoft.neusoft /home/neusoft#4.命令执行与最小权限(a)修改A目录下的a文件:对A至少有x权限,对a至少有r与w权限。(b)读取A目录下的a文件:对A至少有x权限,对a至少有r的权限。(c)在A目录下创建新文件c:对A至少有w与x权限。(d)执行A目录下的a文件:对A与a均至少有x权限。

4.切换工作目录

#切换到某个目录cd /usr/local#进入当前目录下的src目录cd ./src#进入当前目录上一级目录下的src目录cd ../src#进入当前用户主目录cd ~#返回上一次执行cd命令的目录cd -

5.查看当前目录

pwd#或dir

6.追踪日志文件(内容随时间递增的文件)

#tail -200f /var/log/redis.logtail -200f 文件路径/文件名

7.将文件内容输出到控制台

cat 文件路径/文件名

8.切换用户

su - neusoft

9.切换到管理用户

su - root

10.创建目录

mkdir 目录名#递归创建目录mkdir -p /home/neusoft/neusoft/src/

11.创建文件

#Linux下一切皆为文件,扩展名唯一作用:文件类型(.sh为shell脚本,.conf一般为配置文件,.log一般为日志)#1.法一touch filename#2.法二echo >filename#3.法三vim filename

12.vim编辑器(英文输入法下)

#1.关闭保存wq!#2.强制退出q!#3.进入编辑模式,英文输入法下输入i 或者 o 或者 a 或者 insert#4.匹配关键字,英文输入法下/关键字#5.光标移动到行尾shift + 4#6.光标移动到第一段shift + h#7.光标移动到最后一段shift + g#8.将当前行找到的所有str1替换为str2:s/str2/str2/g      

13.查看进程信息

#ps -ef|grep 进程关键字ps -ef|grep redis

14.输出类型

linux下输出分为两种:1标准输出、2标准错误输出#执行install-all.sh文件 将标准输出重定向到当前目录下install.log文件中,如果该文件存在,则覆盖。不存在,则创建。将标准错误输出置空sh install-all.sh >./install.log 2>/dev/null

15.管道命令(过滤网)

只有标准输出可以通过管道,管道用‘|’表,左侧为输入#列出当前目录下所有文件,查找所有以.sh结尾文件打印到控制台ls -a |grep *.sh

16.覆盖与追加

>表示覆盖源文件内容 >>表示追加内容到源文件ls -a >test.logls -a >>test.log

17.将命令放入后台执行

nohup + 命令 + &#例子nohup sh install-all.sh &

18.执行shell脚本(类比bat)

#1.常用sh install.sh#2.推荐,如果install.sh有export等语句用这个source install.sh#3.文件必须有执行权限./install.sh

19.连接其他主机ssh

#ssh 用户名@IPssh root@192.168.161.11

20.拷贝文件cp

#cp 文件目录/文件名 目标目录cp install.sh /etc/redis#本地备份cp install.sh install.sh.bak#跨主机拷贝scp install.sh root@192.168.1.1:~/

21.移动文件与重命名mv

#移动文件:mv 文件目录/文件名 目标目录mv ./install.sh /root#文件重命名mv install.sh install-all.sh

22.删除文件rm

#-f表示强制(force)rm -f 文件目录/文件名  **慎用**#删除目录(递归删除)rm -rf /home/neusoft/src

23.通配符*

#删除当前目录下所有以.log结尾的文件rm -f ./*.log

24.列出文件ls

ls /home/neusoft

25.杀死进程kill

#暴力杀kill -9 PID#PID由 ps -ef|grep 进程关键字   获取

26.别名alias

#1.即时生效alias ll='ls -l'#2.永久生效echo alias ll='ls -l' >> ~/.bash_profilesource ~/.bash_profile

27.判断当前主机是否与B主机能进行http通信

ping 192.168.174.1

28.压缩与解压缩

#解.tar.gz文件压缩tar zxvf 压缩文件路径/文件名 -C 解压目录#压缩#tar zvcf 压缩后文件名 压缩的目录或文件tar zcvf redis.tar.gz /root/redis

29.清除打印台输出

clear

30.产看当前主机ip

ip a

运维进阶

1.系统相关

1.查看CPU核数

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep "cpu cores"| uniq# 查看逻辑CPU的个数cat /proc/cpuinfo| grep "processor"| wc -l

2.开放端口

#root下iptables -I INPUT -p tcp --dport 7001 -j ACCEPT

3.关闭安全模式与防火墙

##root下关闭防火墙###centos7systemctl stop firewalld.servicesystemctl disable firewalld.service#centos6service iptables stopchkconfig iptables off##root下关闭安全模式###1. 永久有效修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。#2. 即时生效setenforce 0

4.查看端口占用

netstat -apn |grep 8080

5.查看端口是否可以访问

#需要安装telnettelnet 192.168.1.1 8080

6.查看内存

#单位为gfree -h#单位为mfree -m

7.查看系统版本

uname -r

8.查看当前进程数

ps aux | wc -l

9.清除僵尸进程

ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9

10.清理缓存

echo 1 >/proc/sys/vm/drop_caches

11.控制台光标移动

#移动到命令的末尾ctrl + e#移动到命令的开头ctrl + a

2.文本处理

1.截取字符

#截取第一个字符(判断系统版本执行相应命令:例如关闭防火墙)uname -r |cut -b 1

2.正则替换

#1.不含变量替换(将/etc/redis.conf中的6379全局替换为6380,不加g只会替换第一个)sed -i 's#6379#6380#g' /etc/redis.conf#2.替换变量LOCAL_IP=192.168.1.1sed -i "s#127.0.0.1#$LOCAL_IP#g" /etc/redis.conf

3.清空文本内容

echo "" >/root/auth.log> /root/autg.logtrue > /root/auth.log

4.向文本内添加多行数据

#截取脚本中部分内容cat >>/root/test.txt <<EOFIP=192.168.174.44hostnme=masterEOF#第二个EOF顶格

5.cut、sed与awk混合使用

java -version 2>&1|sed -n '1p'|awk '{gsub(/"/,"");print $3}'|cut -c 1-3

6.vim进阶

#1.打开文件定位到关键字第一次出现的位置   vim ~/.bash_profile + /export#2.x!=wq!#3.翻页Ctrl+f: 向下翻一屏Ctrl+b: 向上翻一屏Ctrl+d: 向下翻半屏Ctrl+u: 向上翻半屏#4.文字替换R进入替换模式

7.当前编辑文件放入后台

ctrl + z#返回编辑fg

8.删除文件内的空白行

sed -i '/^$/d' filename

9.删除所有以#开头的行

sed -i '/^#/d' filename

10.输出文件1到3行

sed -n '1,3p' file1head -3 file1

11.批量删除空白文件

find /data -type f -size 0c|xargs rm –f

3.shell编写

1.快速遍历

#1.配合通配符批量启动服务for var in `ls *.sh | grep start |grep -v`;dosh $vardone#2.配合sshpass连接主机做批量操作for var in 192.168.174.{41..49};dosshpass -p passwd scp -r /root/redis root@$var:~/done

2.switch-case

function main{    case $1 in    "a" | "all" )    echo "none"    ;;    "d" | "docker" )    docker_instal    ;;    esac}main

3.设置环境变量,弹性安装

#redis安装脚本install-all.sh中部分代码export REDIS_HOME=`pwd`...cp $REDIS_HOME/conf/* /etc/redis/

4../install.sh、sh install.sh 与 source install.sh区别

#1.前两者在文件拥有可执行权限的时候效果等同#2.sh install.sh 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。#3.source install.sh 在当前进程执行install.sh里的命令,脚本里面所有新建、改变变量的语句都会保存在当前shell里面。#4.sh install.sh中使用export var=value,仅仅将变量导入子进程的环境变量中。#5.source install.sh中使用export var=value,会将变量导入当前shell中。

5.变量与环境变量

#系统级:所有用户均可以使用/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用/etc/bashrc文件。/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量#用户级(1)~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方(2)~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。#配置读取过程

Linux系统默认使用的shell为bash,在shell启动的时候会读取根据情况读取.bash_profile和.bashrc文件。

#1.非Login准确的说,当shell是交互式登录shell时,读取.bash_profile文件,如在系统启动、远程登录或使用su -切换用户时;当shell是交互式登录和非交互式登录shell时都会读取.bashrc文件,如:在图形界面中打开新终端或使用su切换用户时,均属于非登录shell的情况。简单的说,.bash_profile只在会话开始时被读取一次,而.bashrc则每次打开新的终端时,都会被读取。#2.Login下执行顺序:/etc/profile->( profile.d/*.sh 等) -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc ->/etc/bashrc -> ~/.bash_logout其中只会读取~/.bash_profile 、 ~/.bash_login 、 ~/.profile的一个,优先级为从左到右#配置文件简述(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。(5)~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc /profile中的变量,他们是"父子"关系。(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

4.目录规划(编译安装redis为例)

advantages:规范化、合理化、便于反安装、不”污染”系统环境

1.配置文件目录

/etc/redis

2.安装包等

/tpm

3.日志文件

/var/log/redis

4.工作目录

/var/data/redis

5.操作脚本目录(redis-cli、redis-server)

/root/bin

6.安装目录

/usr/local或/opt

5.其他

1.文件默认权限

#查看创建新的文件或目录的默认权限:umask  -S  显示文件、目录的默认权限#输出为u=rwx,g=rwx,o=rx (文件权限:664,文件默认无x属性;目录权限为:775)#亦可用umask直接查看输出为0002   只跟后三位即002有关。777-002=775即为目录权限,775-111=644即为文件属性touch test.txt;mkdir test touch test.txt;mkdir test

2.umask简介

如下图所示,umask为内置shell位置为/usr/bin/umask

3.设置umask

(a)临时有效(重新登录无效):umask 0226  (目录权限:777-226=551 文件权限:551-111=440)umask 查看umsk是否修改成功touch year.txt;mkdir year 创建文件、目录ll 查看权限exit    退出当前用户su - make -c "umask"  查看make umask输出结果为 0002(b)永久有效对全用户:/etc/profile.d/下新建644权限文件 umask.sh 将 umask  0226写入并source处理对当前用户:~/.bash_profile内 添加 umask  0226  并source处理

4.文件隐藏属性(Etx2/Etx3文件系统下)

a属性root下cd ~touch test.txt   chattr +a test.txt  添加a属性,设置后只能增加数据,不可删除数据,不可修改数据。lsattr 显示隐藏属性echo "a" >> test.txtecho "b" >> test.txtecho "c" >> test.txt  添加三行内容sed -i '2d' test.txt 尝试删除第二行内容sed: cannot rename ./sedZXXs09: Operation not permitted   屏幕输出,删除失败cat test.txt     确认是否删除,屏幕输出三行内容,删除确实未执行chattr -a test.txt  去除a属性sed -i '2d' test.txt 再次尝试删除第二行内容cat test.txt   输出两行内容’a,c’,删除成功i属性设置后,文件无法被删除、改名、写入或修改数据、设置链接等。

5.非交互式创建公钥

#Linux下ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa

6.查看文件内容

#空格下一页less filename

6.主机间通信相关

1.ssh远程主机本地文件作为标准输入

ssh root@192.168.1.1 'cat >>~/test.txt' < /usr/local/print.txt

2.远程执行多个命令

ssh oot@192.168.1.1 <<EOF>java -version>mkdir -p /usr/local/nginx>echo ''>EOF

6.第一次使用ssh免确认

ssh -o StrictHostKeyChecking=no user@IP

7.网络相关

1.将本地80端口的请求转发到8080端口,当前主机外网IP为202.96.85.46

-A PREROUTING -d 202.96.85.46 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.9.10:8080

可能用到的

1.echo

使用场景:调试 && 脚本显示进度

\e[1;31m 将颜色设为 ** \e[0m还原为默认颜色

1.打印彩色字

    #1.打印红色字    echo -e "\e[1;31m  测试 \e[0m"    #2.打印绿色字    echo -e "\e[1;32m  测试 \e[0m"    #3.打印黄色字    echo -e "\e[1;33m  测试 \e[0m"        #4.打印蓝色字    echo -e "\e[1;34m  测试 \e[0m"    #5.打印洋红色字    echo -e "\e[1;35m  测试 \e[0m"    #6.打印青色字    echo -e "\e[1;36m  测试 \e[0m"    #7.打印白色字    echo -e "\e[1;37m  测试 \e[0m"

2.打印带背景颜色字

    #1.打印红色背景字    echo -e "\e[1;41m  测试 \e[0m"    #2.打印绿色背景字    echo -e "\e[1;42m  测试 \e[0m"    #3.打印黄色背景字    echo -e "\e[1;43m  测试 \e[0m"        #4.打印蓝色背景字    echo -e "\e[1;44m  测试 \e[0m"    #5.打印洋红色背景字    echo -e "\e[1;45m  测试 \e[0m"    #6.打印青色背景字    echo -e "\e[1;46m  测试 \e[0m"    #7.打印白色背景字    echo -e "\e[1;47m  测试 \e[0m"

3.echo -n 不输出新行

    echo -n  Count;    tput sc    count=0    while true;    do    if [ $count -lt 40 ];    then let count++;    sleep 1;    tput rc    tput ed    echo -n  $count    else exit 0;    fi    done

2.获取进程所用环境变量

    #PID 为进程号(以回车而不是"null"分割变量)    cat /proc/PID/environ | tr '\0' '\n'

3.获取变量长度

    var=12122143235325    echo ${#var}

4.查看是否为超级用户

    #输出为0则为超级用户否则不是    echo $UID    #for example    if [ $UID -ne 0 ]; then    echo Non root user.    else    echo Root user    fi

5.算数运算

1.let运算

    #1.let运算 变量不用加$    num1=3    num2=4    let sum=num1 + num2    echo $sum    #2.自增    let num1++    #3.自减    let num1--

2.expr

    sum=`expr 3 + 4`

3.浮点运算

    #精确到小数点后3位    echo "scale=3; 3/7" | bc

4.二进制与十进制转换

    #1.十进制转换为二进制    echo "obase=2;100"|bc    #2.二进制转换为十进制    echo "obase=10;ibase=2;0100100"|bc

5.计算平方及平方根

    #1.计算幂次方    echo "10^10" | bc    #2.计算平方根    echo "sqrt(100)" | bc

6.tee利用管道重定向到文件1 2中

    #command命令的标准输出通过管道写入到file1中 备份到file2中    command | tee file1 file2

7.数组

1.声明数组

    #1.方式一    array=(1 2 3 4 5 6)    #2.方式二    array[0]="test1"    array[1]="test2"    .    .    .

2.输出数组长度

    #1.方法一    echo ${#array[*]}    #2.方法二    echo ${#array[@]}

3.索引数组元素

    echo ${array[2]}

4.打印所有元素

    #1.方法一    echo ${array[*]}    #2.方法二    echo ${array[@]}

8.脚本调试功能命令

    #屏幕输出set -x   与 set +x 之间的命令及命令输出情况    for i in {1..6};do    set -x    echo $i    set +x    done    echo finish

9.函数

    #将父进程的函数  export到环境变量中  子进程可以直接调用    #1.father proccess    echo father proccess    f()    {            echo 56    }    f    export -f f    sh son.sh    #2.子进程    echo son proccess    f

10.cat命令

    #输出文件内容并显示每行内容行数    cat 文件名 | cat -n

11.括号建立子进程执行

    #1.()内的命令 不影响父进程    pwd    (cd /home/;ls)    pwd    #2.将1中的命令 放入脚本中,观察shell执行命令的方式为:开辟子进程执行    #当前目录为 /root/test.sh    sh test.sh    #sh test.sh  会开辟一个线程a执行,执行到()中的内容 会开辟一个新的子线程b执行,执行完毕返回父线程a,脚本全部执行完毕会返回到a的父进程当中。

12.read获取键盘输入

    #1.限制输入内容为2个字符,并不以回车符的方式读取输入内容    read -n 2 var    echo $var    #2.限定时间内输入    read -t 2 var    echo $var    #3.提示输入信息    read -p "输入密码:" var    echo $var    #4.用 界定符号结束输入(仅取第一个符号)    read -d ":" var    echo $var    #5.隐式输入    read -s var    echo $var

13.find查询命令

    1.不区分大小写    find /home/test -iname '**ds.txt'    2.按类型检索    find /home/test -type d    find /home/test -type f    find /home/test -type l

14.校验文件md5

    md5sum filename

15.创建指定大小文件

    #文件总大小为bs * count    dd if=/dev/zero of=testfile bs=1G count=3 

16.目录切换

    #推入栈中    pushd /home/jz/neusoft/bin    #查看栈中的目录编号    dirs -v    #进入指定目录    pushd +n

17.统计文件行数、单词数

    #统计行数    wc -l filename    #统计单词数    wc -w filename
原创粉丝点击