Linux基础命令行与进阶

基础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 filename
chmod g+x filename
chmod o+x filename
chmod 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.log
tail -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.log
ls -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 用户名@IP
ssh [email protected]

20.拷贝文件cp

#cp 文件目录/文件名 目标目录
cp install.sh /etc/redis
#本地备份
cp install.sh install.sh.bak

#跨主机拷贝
scp install.sh [email protected]:~/

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_profile
source ~/.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下关闭防火墙##
#centos7
systemctl stop firewalld.service
systemctl disable firewalld.service
#centos6
service iptables stop
chkconfig iptables off

##root下关闭安全模式##
#1. 永久有效
修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。
#2. 即时生效
setenforce 0

4.查看端口占用

netstat -apn |grep 8080

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

#需要安装telnet
telnet 192.168.1.1 8080

6.查看内存

#单位为g
free -h
#单位为m
free -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.1
sed -i "s#127.0.0.1#$LOCAL_IP#g" /etc/redis.conf

3.清空文本内容

echo "" >/root/auth.log

> /root/autg.log

true > /root/auth.log

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

#截取脚本中部分内容
cat >>/root/test.txt <

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' file1
head -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`;do
sh $var
done

#2.配合sshpass连接主机做批量操作
for var in 192.168.174.{41..49};do
sshpass -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基础命令行与进阶_第1张图片

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

Linux基础命令行与进阶_第2张图片

#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.txt
echo "b" >> test.txt
echo "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 [email protected] 'cat >>~/test.txt' < /usr/local/print.txt

2.远程执行多个命令

ssh [email protected] <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

你可能感兴趣的:(Linux系统)