Linux学习

一、Linux文件

1.1 Linux目录结构

  • /bin:存放二进制的执行命令,bin本质是一个链接,指向usr/bin
  • /sbin:存放超级管理员的执行命令,sbin本质是一个链接,指向usr/bin
  • /lib:库目录,存放系统和应用程序的库文件,链接到usr/lib
  • /lib64:64位库目录,存放系统和应用程序的库文件,链接到usr/lib64
  • dev:设备的文件映射
  • etc:系统管理所需要的配置文件
  • home:每一个用户对应一个子目录
  • opt:给第三方软件安装的目录
  • sys:存放硬件相关信息
  • tmp:临时目录,可以清空

二、VIM编辑器

2.1 vim模式

2.2 vim一般模式

一般模式主要操作包括:删除、复制、粘贴

复制

  • 复制单行:光标移到所在行,按yy,然后按p复制,n p可以重复复制,例如 5 p重复复制五行
  • 复制多行:n yy 复制n行,然后按p
  • 复制一行中的部分:移动光标到指定位置,复制一行后面部分按y$,复制一行前面部分按y^,复制一个单词yw

删除

  • 删除单行:dd
  • 删除多行:n dd 删除n行
  • 删除一行中的部分:dw,d$,d^

撤销:u

剪切单个字符:x向前剪切,X向后剪切

替换:单个字符替换r,多个字符替换R

移动:

  • 移动到行首:shift+^
  • 移动到行尾:shift+$
  • 移动到一页开头:gg
  • 移动到一页尾:G
  • 移动到某一行:n+G

显示行号:命令模式set nu

关闭行号:set nonu

2.3 vim编辑模式

2.4 vim命令模式

三、常用命令

3.1 帮助命令

查看命令帮助:man 命令 

man -f  命令 查看内置命令

例如查看cd命令 

man -f cd

man 3tcl cd

help仅可以查看内置命令

命令 --help可以查看外部命令

3.2 文件目录类功能

  • 打印工作目录的绝对路径:pwd
  • 列出目录或文件:
    • ls -a:列出包含隐藏文件
    • ls -l:长数据串列出,包含文件属性和权限等,等价于ll
    • ls:列出文件(不包含隐藏文件)
  • 创建文件夹
    • mkdir:创建单个目录
    • mkdir -p:创建嵌套目录 mkdir -p a/b/c
  • 移除目录
    • rmdir 文件名1 文件名1:移除目录,需要保证是空目录
    • rmdir -p 文件路径:一次移除多个 rmdir -p a/b/c

3.3 操作文件命令

创建文件:

  • touch file

复制文件或目录

  • cp source dest
  • \cp source dest 当存在相同文件,该复制没有提示
  • cp -r source dest:递归复制

删除文件

  • rm file:删除单个文件
  • rm -f file:强制删除单个文件
  • rm -r file:递归删除
  • rm -r ./*:删除当前目录的所有文件

移动文件

  • mv oldFile newFile:重命名
  • mv /tmp /target:移动文件

查看文件

  • cat [-n] file:查看文件内容,可选参数-n显示行号
  • more file:分页查看
    • 空格:向下翻页
    • q:退出
    • ctrl+F:向下滚动一屏
    • ctrl+B:返回上一屏
  • less:分屏显示
    • 空白键 | F | PgDn:向下翻页
    • B | PgUp:向上翻页
    • shift+G:翻到最后
    • g:翻到开头
    • ?字串:向上搜寻的功能:n:向上查找;N:向下查找
    • q退出

3.4 其他命令

  • echo:输出内容到控制台
    • echo [-e] 内容:可选参数支持转义字符
    • echo $name:输出环境变量,不知道环境变量名的情况下,echo $ ,然后输入tab
  • 输入输出重定向
    • cat > file :写入到file文件
    • echo >> file:追加到文件末尾
  • head [-n num ] file:查看文件前几行,可选参数-n指定查看前几行
  • tail [-n num ] file:查看文件后几行,可选参数-n指定查看后几行,tail -f file可以实时跟踪内容的变化
  • ln -s 链接目录/文件 软链接名:创建软链接(类似于快捷方式),ln -s /root/info myInfo,pwd -P 可以显示真正的路径
    • rm -rf 链接名:只删除一个链接,不会影响链接的内容
    • rm -rf 链接名/:会删除原文件
    • ln 文件名 链接名:创建一个硬链接
  • history [n]:查看历史命令,可选参数 n表示刚刚执行的前十条数据
    • 重复执行:!数字
    • 清空历史:history -c

3.5 时间日期类

  • date:获取当前时间
    • date+%Y
    • date+%m
    • date+%d
    • date+"%Y-%m-%d  %H:%M:%S"
    • date+%s:时间戳,以秒计数
    • date -d "1 days ago" 显示前一天
    • date -d "-1 days ago" 显示明天时间
    • date -s 字符串时间:设置系统当前时间
  • cal:查看日历
    • cal -n:查看n个月的日历

3.6 用户管理命令

增加用户,在home文件多一个目录

  • useradd 用户名
  • useradd -g 组名 用户名
  • passwd 用户名:设置密码
  • id 用户名:查看用户信息
  • cat /etc/passwd:查看创建哪些用户
  • 切换用户 su 用户名
  • 查看最原始登录的用户:who am i,whoami查看当前用户
  • usermod -g 组名 用户名:将用户添加到某个组

sudo设置普通用户root权限

  1. 添加用户 useradd tony 设置密码 passwd aaa
  2. 修改配置文件 vim /etc/sudoers ,添加内容 tony  ALL=(ALL)  ALL
  3. 修改完毕,可以使用sudo

删除用户 

  • userdel [-r] tony:可选参数r也会将/home目录下的文件删除

新增组

  • groupadd 组名
  • groupmod -n haircut meifa:修改组名

查看组:cat /etc/group

删除用户组:groupdel 组名

3.7 文件权限类

修改文件权限

  • chmod [{ugoa}{+-=}{rwx}] 文件或目录,u:所有者,g:所有组,o:其他人,a:所有人
  • chmod [mode=421] 文件或目录
  • chmod -R 777 目录:开放该目录下所有文件的权限

修改文件所有者

  • chown [-R] 用户名 文件名:可选参数R递归修改

修改所属组

  • chgrp 组名 文件名

3.8 搜索查找类

find查找文件或目录

  • find [搜索范围] [选项]
    • find -name info :当前目录查找info文件
    • find /root -name info:指定路径查找info文件
    • find /root -name "*.cfg":通配符查找
    • find /home -user tony:根据用户查找
    • find /root -size  +10M:查询root目录下大于等于10M的文件

locate快速定位文件路径

  • 查询之前先执行updatedb更新数据库
  • locate 文件名或目录名
  • which 命令:查询命令
  • whereis 命令:查询命令

grep查找

  • grep [-n] 查找内容  源文件:-n显示匹配行及行号
  • grep -n boot initial-setup-ks.cfg
  • 管道查询:ls | grep .cfg

3.9 压缩和解压类

gzip/gunzip

  • 压缩:gzip 文件,只能压缩文件
  • 解压:gunzip 文件.gz

zip/unzip

  • zip  [-r] 文件:-r压缩目录,zip -r myLogs.zip logs
  • unzip [-d] 文件:d指定压缩后存放的目录,unzip -d /tmp myLogs.zip

tar打包

  • tar [选项] XXX.tar.gz 将要打包进去的内容
    • -c :打包文件
    • -C:解压到指定目录
    • -v:显示详细信息
    • -f:指定压缩后的文件名
    • -z:打包同时压缩
    • -x:解包.tar文件
  • tar -zcvf temp.tar.gz initial-setup-ks.cfg  biz.0.log  test.txt 打包并压缩
  • tar -zxvf temp.tar.gz -C /tmp 解压并指定目录

3.10 磁盘管理类 

查看目录

  • 安装yum install tree
  • tree 目录名
  • du 查看文件和目录占用的磁盘空间
    • du [选项] 目录/文件
    • du -sh 查看当前目录占用的磁盘空间大小

df查询磁盘空间的使用情况:df -h

查询内存:free -h

查看设备挂载情况:lsblk -f

mount/umount 挂载/卸载

  • mount /dev/cdrom /mnt/cdrom/
  • umount /mnt/cdrom/
  • 设置开机自动挂载
    • vim /etc/fstab

磁盘分区

  • fdisk -l 查询分区详情
  • fdisk 硬盘设备名

3.11 进程管理类 

(1)查看进程

  • ps aux | grep xxx:查看系统中所有进程

VSZ:虚拟内存  RSS:物理内存 TTY:当前终端 STAT:状态 START:当前进程的启动时间

TIME:当前进程使用cpu的时间

  • ps -ef | grep xxx:查看子父进程之间的关系

PPID:父进程

(2)终止进程

  • kill -9 进程号:9表示强迫进程立即终止
  • killall 进程名称:通过进程名称杀死进程,也支持通配符,谨慎使用

(3)查看进程树:pstree -p

(4)top实时查看当前进程状态

  • top -d 秒数 :每个几秒刷新
  • top -i:过滤闲着的进程
  • top -p 进程id:查看某一个进程

PR:任务调度优先级,NI:用户指定的NI值优先级,VIRT:虚拟内存,RES:实际内存

SHR:共享内存 S:当前状态

top实时监控按k,可以杀死进程,按u可以栓选

(5)网络状态和端口监控

  • netstat -anp | grep 进程号 :看该进程网络信息
  • netstat -nlp | grep 端口号:看网络端口号占用情况

3.12 系统定时任务

crontab 

  • -e 编辑crontab定时任务
  • -l 查询crontab任务
  • -r删除当前用户所有的crontab任务

3.13 软件包管理 

查看安装的包:rpm -qa

  • rpm -qa | grep firefox
  • rpm -qi firefox 查询详细信息

卸载软件包

  • rpm -e RPM软件包 :rpm -e firefox
  • rpm -e --nodeps 软件包 :不检查依赖直接卸载

安装软件包

  • rpm -ivh RPM包全名

注意:rpm存在依赖关系,会安装失败的

yum的使用

  • yum  - y install 软件包 :-y表示所有的提问都是yes
  • yum update 软件包
  • yum remove 软件包
  • yum list 显示安装包

四、Shell编程

Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。

4.1 Shell脚本入门

1)脚本格式:脚本以#!/bin/bash 开头(指定解析器)

2)执行脚本

  • bash / sh + 脚本文件绝对位置或相对位置
  • 直接输入脚本文件绝对位置或相对位置(需要文件具有可执行权限)
  • . / source 脚本文件绝对位置或相对位置

4.2 变量

(1)系统变量

  • $HOME、$PWD、$SHELL

(2)自定义变量

  • 定义变量:变量名=变量值,=两边不能有空格,默认是局部变量
  • 提示变量为全局变量:export 变量名
    • 在父shell定义的全局变量,子shell可以访问到,但是子shell对其修改不会影响父shell变量的值
  • 定义只读变量:readonly 变量名=变量值,只读变量不能修改,不能unset
  • 撤销变量:unset 变量名​​​​​​​

(3)位置参数

  • $n:n为数字,$0代表脚本名称,十以上要用大括号包含,如${10}
  • ./helloworld.sh asda

(4)$# :获取所有输入参数个数,常用于循环

(5)获取输入的命令参数

  • $*:把获取到参数当成一个整体,当"$*" 会当成一个整体输出
  • $@:把获取到参数当成一个集合,当"$@"会一个一个输出
  • 不加引号,$*和$@类似

(6)$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体是哪个数,由命令自己决定),证明上一个命令执行不正确了。

4.3 运算符

 基本语法:$((运算式)) 或 $[运算式],双括号里面可以加数学符合,例如写> 、<

4.4 条件判断

基本语法

  • test condition:test $a = hello 中间要有空格
  • [ condition ]:前后一定要有空格,[ $a = Hello ]
  • 条件非空即为true,[ sda ]返回true ,[ ] 返回false

常用判断条件

[ -x add.sh ]

多条件判断 && 逻辑与 || 逻辑或

类似于三元运算符:[ $a -lt 20 ] && echo "$a < 20 " || echo " $a >= 20"

4.5 流程控制

(1)if判断

单分支

if [ 条件判断式 ] ;then

   程序

fi

或者

if [ 条件判断式 ]

then

   程序

fi

多分支

if [ 条件判断式 ]

then

   程序

elif [ 条件判断式 ]

then

        程序

else

        程序

fi

(2)case语句

case $变量名 in

"值1")

        程序1

;;

"值2")

        程序2

;;

*)

        默认程序3

;;

esac

(3)for循环

for ((初始值;循环控制条件;变量变化))

do

        程序

done

for 变量 in 值1 值2 值3 ...

do

        程序

done

例如:for os in linux windows macos;do echo $os;done

例如:for i in {1..100};do sum=$[$sum+$i];done;echo $sum

(4)while循环

while [ 条件判断式 ]

do

        程序

done

4.6 read读取控制台输入

4.7 函数

系统函数

  • basename [string / pathname] [suffix]:basename命令会删除所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。basename /root/scripts/parameter_for_test.sh .sh
  • dirname 文件绝对路径:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分),取文件路径的绝对路径名称
  • 脚本 $(命令) 系统函数调用

自定义函数

[ function ] funname[()]

{

    Action;

    [return int;]

}

注意:

  1. 必须在调用函数地方之前,先声明函数,shell是逐行运行。不会像其他语言一样先编译。
  2. 函数返回值,只能通过$?系统变量获得,可以显示加;return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

4.8 正则表达式

 特殊字符

  • ^匹配一行的开头:cat /etc/passwd | grep ^a
  • $匹配一行的结束:cat /etc/passwd | grep bash$
  • .匹配任意字符:cat daily_archive.sh | grep r..t
  • *匹配0次或多次:cat daily_archive.sh | grep ro*t
  • []字符区间:[0-9]匹配一个0-9的数字
  • \转义字符

4.9 文本处理工具 

cut [选项参数] filename

  • -f:列号,提取第几列
  • -d:指定分隔符,默认是“\t”
  • -c:按字符进行切割 后加n表示第几列

例子:cat /etc/passwd | grep bash$ | cut -d ":" -f 1,6,7

           cat /etc/passwd | grep bash$ | cut -d ":" -f 1-4

           cat /etc/passwd | grep bash$ | cut -d ":" -f 2-

awk

​​​​​​​

例子:cat /etc/passwd | awk -F ":" '/^root/ {print $7}'

           cat /etc/passwd | awk -F ":" '/^root/ {print $6","$7}'

           cat /etc/passwd | awk -F ":" 'BEGIN{print "user,shell"}{print $6","$7}END{print "end of file"}'

           cat /etc/passwd | awk -F ":" '{print $3+1}'

           awk -F ":" '{print "文件名:"FILENAME" 行号:"NR" 列数:"NF""}' /etc/passwd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值