Linux命令与shell脚本编程

  • 七种基本文件:

    数据文件:要用指定命令才能打开,用某种格式编码的;例如系统日志

    1)- :regular file 普通文件

    2)d : directory 目录

    3)l : link 链接

    4)b : block 块设备 存储数据以供系统存取的接口设备,即硬盘

    5)c : character 字符设备 串口设备,键盘,鼠标等

    6)s : socket 套接字

    7)p : pipe管道


  • 文件权限

1)r - 可读 w - 可写 x - 可执行 s - 二进制文件暂时root权限 g - 组 t - 当前目录的创建者或root有权限。ls -l查看权限时,第一个是用户,第二个是组,第三个是other

2)命令: chmod - 更改文件权限。chown - 更改文件所属用户。chgrp - 更改文件所属组


  • zsh : shell解释器

    1) ping : 显示网络状态, 例如只ping两次 ping -c 2 www.google.com

    2)file : 确定文件类型

    3)touch : 修改文件时间 与 新建文件

  • 任务管理

    1)&:加在命令后面表示后台执行

    2); : 加在命令中间表示顺序执行

    3)&& :链接两个命令即与

    4)|| :连接两个命令即或

    5)`` : 命令中如果包含另一个命令,用此符号包括的命令将优先执行

    6)ctrl/command+z : 命令挂起

    7)bg : 将挂起的命令后台执行

    8)fg : 将挂起的命令或后台执行的命令,变为前台运行

    9)jobs : 查看后台执行和挂起的任务及任务编号


  • 重定向

    1)> : 重定向符号,从命令到文件的重定向

    2)>> : 追加符号,从命令到文件的追加

    3)< : 重定向符号,从文件到命令的重定向

    4)<< : 从控制台读,遇到后边指定的字符串结束

  • 管道

    1)| :将管道符号左边命令的标准输出,作为管道符号右边命令的标准输入

    2)词频统计,统计一篇出现频率最高的十个单词

    cat 1.log | tr -c -s "a-zA-Z" "\n" | start | uniq -c | sort -n -r | head -n 10
    
  • 转义符

    1)\ : 去除其后元字符或通配符特殊意义

    2)’’ : shell里面的硬转义,硬引用,其不允许出现 ‘’ 。关掉shell所有的元字符、通配符

    3)"" : shell里面的软转义,软引用,只允许出现特定的shell元字符。

    $ 用于变量值替换、` 用于命令替换、\ 用于转义单个字符


  • VIM使用

1)%s\str1\str2\g : 命令模式下将str1替换成str2,其中的g表示全局替换,即全部替换

2)set paste :命令模式下 格式粘贴模式,忽略之前的空格,粘贴成当前的格式

3)set num : 命令模式下 显示行号

4)set nonu : 命令模式下 取消显示行号

5)split : 命令模式下 实现上下分屏 ctrl/commad + w 进行切换

6)vsplit : 命令模式下 实现左右分屏

7)ctrl/command + v : 实现可视化块操作,即可以操作多行

8)ctrl/command + ] : 命令模式下 查看选中函数的定义,按ctrl/command + o 即可返回

9)K : 命令模式下 按大写的K即可跳转到此选中函数的手册, 3+ K 即可进入其手册第三章说明

10)/*** : 命令模式下 查看/后面的字符串,n继续查找下一个,N继续查找上一个

11)vimtutor : 终端命令行下 教你怎么使用VIM(纯英文)。vimtutor zh 中文模式


  • Linux系统信息

    1)uptime : 打印系统运行时长和平均负载

    2)who : 显示当前登陆系统的用户信息

    3)last : 显示用户最近登陆信息,打开/var/log/wtmp文件;还有wtmp.1(备份文件),btmp(没有登陆成功的),btmp.1等

    4)date 显示或设置系统时间与日期

    5)w : 当前用户列表及正在执行的任务

    6)whoami : 打印当前有效的用户名称,还有 who am i 命令,,即who 后面随便两个参数不管是啥都和 who am i 一样的效果

    7)uname : 打印当前系统信息

    8)cal : 显示日历

    9)lastlog : 打印每个账号的最近登陆时间,在 /var/log/lastlog

    10)write : 发送信息给另一个用户

    11)wall : 给其它登陆用户广播信息 即给当前主机的所有用户发送信息


  • 目录

    1)cd : 切换当前工作目录 cdcd ~切换回到当前用户家目录;cd -切换到上次工作目录

    2)pwd : 打印当前工作目录

    3)mkdir : 创建目录

    4)rmdir : 删除目录

    5)cp : 拷贝

    6)rm : 删除

    7)mv : 移动

    8)dirname : 输出路径,不包括最后一个路径

    9)basename : 删掉所有的前缀包括最后一个slash(‘/’)字符,然后将字符串显示出来


  • 文件内容查阅

    1)cat : 正向连续读

    2)tac : 反向连续读

    3)nl : 输出行号显示文件

    4)more : 一页一页显示文件内容

    5)less : 与more相似,比more厉害

    6)head : 显示文件前几行,例如前3行 head -n 3 ***.txt

    7)tail : 只看末尾几行

    8)od : 以二进制方式查看文件内容

    9 )seq : 利用脚本来处理文本文件 例如显示a文本101~120行sed -n '101,120p' ahead -n 120 a | tail -n 20


  • 文件的三个时间ACM access status/change modify

    1) atime : 内容被取用时,更新这个读取时间

    2) ctime : 权限、属性、所有者改动时,更新这个时间

    3) mtime : 内容数据改动时,更新这个时间

    可用touch命令修改文件时间

    查看a.txt的ACM的时间:stat a.txt

  • 文件隐藏属性

    1)lsattr: 查看文件隐藏属性

    2)chattr : 修改文件的隐藏属性

  • 文件特殊权限

    1)SUID: set_uid s=4 普通用户执行程序获取root权限,仅限于非脚本的二进制文件,大写的S表示没有此权限

    2) SGID: set_gid s=2 用户在该目录里,有效组变为目录所属组

    3) SBIT: sticky bit t=1 在该目录下,普通用户只能删除自己创建的文件

  • 命令与文件的查询

    1)which : 寻找可执行文件即PATH路径(echo ${PATH})的文件路径

    2)whereis : 寻找特定文件

    3)locate : 搜索文件(可部分查找)

    4)find : 多样化高级查找

    5)/dev/null/ : 数据黑洞 空设备文件,等价于一个仅仅写文件,全部写入它的内容都会永远丢失。而尝试从它那儿读取内容则什么也读不到 0:表示键盘输入(stdin)。 1:表示标准输出(stdout),系统默认是1。 2:表示错误输出(stderr)。


  • 用户管理

    1)重要的配置文件 :

    配置文件内容
    /etc/passwd用户名 密码位 用户编号 归属组编号姓名 $HOME $SHELL
    /etc/shadow用户名 已加密密码 密码改动信息 密码策略
    /etc/group群组名 密码位 群组编号 组内用户
    /etc/gshadow群组密码相关文件
    • /etc/shadow : 账户名称 : 密码 : 修改密码的日期 : 密码不可改动日期 : 密码需要重修修改的日期 : 密码变更期限前警告日期 : 密码过期的宽限时间 : 账号失效日期 : 保留
    • /etc/group : 组名 : 密码 : 群组管理员 : 加入该群组的所属账号

    2)su : 切换用户 su - 用户 【-】或【-l】表示重新登陆初始化,最好不要省略

    3)sudo : 临时切换为root用户

    4)passwd : 设定用户密码

    5)gpasswd : 设定群组密码

    6)chsh : 更改用户shell

    7)usermod : 修改用户账号

    8)useradd : 新建用户

    9)userdel : 删除用户

    10) id : 显示用户信息


  • 进程管理

    1)free : 打印系统情况和内存情况

    2)top : 显示当前系统进程情况,内存,CPU等信息,升级版htop

    3)dstat : 实时监控磁盘,CPU等

    4)ps : 报告当前进程状态 ps -efps -aux查看进程

    5)pstree : 以树状显示进程派生关系

    6)pgrep : 查找进程ID

    7)kill : 删除执行中的程序和工作

    8)pkill : 批量按照进程名杀死进程


  • 数据提取操作 管道 |或 %提取

    1)cut : 切分

    2)grep : 检索 去掉空行grep -v "^$"

    3)sort : 排序

    4)wc : 统计字符、字数、行数

    5)uniq : 去重

    6)tee : 双向重定向

    7)split : 文件切分

    8)xargs : 参数代换

    9)tr : 替换、压缩和删除

    10)bc : 计算算数表达式


shell脚本编程

  • #!/bin/bash : 放在shell脚本的第一行,告诉系统要用什么解释器去解释后面的内容

  • # : 注释

  • echo “Hello World!” : 打印Hello World!输出到屏幕

  • bash .sh : 命令行下 运行shell脚本,当shell脚本有+x权限时,也可在其目录*./*.sh**运行

  • *bash -x .sh : 命令行下 调试脚本

  • *bash +x .sh : 命令行下 取消调试脚本

  • set -xset +x : 前者在shell脚本里下一行的内容开始调试,后者结束调试

  • 变量与局部变量

    1)shell的变量默认都为全局变量

    a=1     #整数1或字符串1
    a=hello #字符串
    a='pwd' #使用命令替换符,即执行命令的结果赋给a
    b=&a:a  #拼接 即a的值加上a这个字符串
    

    2)局部变量 local a=1

    3)声明变量 declare a 可不写,照顾C语言用户

  • 特殊变量

    • 位置变量

    ​ 1)$0 : 获取当前执行shell脚本的文件名,包括路径

    ​ 2)$n : 获取当前执行脚本的第n个参数,n为正整数,若n大于9则要使用大括号括起来

    ​ 3)$* : 获取当前shell脚本所有参数,即所有命令行参数为单个字符串 “$1$2…”

    ​ 4)$# : 得到执行当前脚本的参数个数

    ​ 5)$@ : 获取此程序所有参数,保留参数之间的任何空白,即 “$1" “$2” …

    • 状态变量

    ​ 1)$? : 判断上一条指令是否执行成功 0-成功 非零-不成功

    ​ 2)$$ : 取当前进程PID

    ​ 3)$! : 上一个指令PID

  • 输入输出

    1)read : 输入

    2)echo : 输出 -e参数为加上转义字符

    3)printf : 输出 例如printf "I am %s years old." "18"

  • 函数

    1)使用的3种方法

    function _printf_() {
    	return
    }
    function _printf_ {
    	return
    }
    _printf_() {
    	return
    }
    
  • if 条件分支

if [[ condition ]]; then
	#statements
elif [[ condition ]]; then
	#statements
else
	#statements
fi
  • test表达式 : [[ ]] 可以用 man test 查看手册说明

  • case 条件分支

case word in
	pattern1 )
		;;
	pattern1 )
		;;
esac
  • for 循环 2 种表示
for i in words; do
	#statemens
done

for (( i = 0; i < 10; i++ )); do
	#statemens
done
  • while 循环
while [[ condition ]]; do
	#statemens
	let num-- #使num的值减1
done
  • until 循环
until [[ condition ]]; do
	#statemens
done
  • 数组

    #声明一个数组 -a是固定的关键字
    declare -a a   #索引型 下标为非负整数
    declare -A arr #关联型 下标为字符串
    
    #对数组进行赋值
    a[0]=0
    a=(0 1 2)
    
    #输出数组内容
    ${a[*]}
    ${a[@]}
    
    #确定数组元素个数
    ${#a[@]}
    
    #找到数组下标
    ${!a[@]}
    
    #数组追加
    a+=(3 4)
    
    #数组排序
    sort
    
    #删除数组与元素
    unset
    
  • RegExp正则表达式 1)-E选项表示扩展的正则,否则要用转义符\转义 2)-P选项表示Perl正则

    POSIX字符集:[:upper:] 等 可移植操作系统接口

  • sed 流编辑器

    1)-n : 安静模式,只输出处理的

    2)-e : 默认,不编辑源文件

    3)-f : 输出一个文件

    4)-r : 支持正则

    5)-i : 直接修改文件

    6)a 表示追加,c替换行,d删除,i 插入,p 打印,s 替换字符,都需要拿引号括起来,例如sed "1a hello"

    • ~ 表示步长 例如 sed -n '0~2p' 偶数行
    • + 表示连续几行 例如 sed -n '1,+3p' 打印1~4行
  • awk 处理字符串语言

    • eval 命令重新运算求出参数的内容

  • 16进制对比查看文本内容
od -tx1 -tc 1.txt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值