Linux学习

    技术2022-07-10  147

    1. vi和vim编辑器

    快捷键: (1)复制当前行yy,当前向下5行 5yy, 粘贴 p ,撤回 u (2)删除当前行dd,删除当前向下的5行 5dd (3)在文件中查找某个单词[命令行下 /关键字,回车 查找,输入n 查找下一个 (4)设置文件行号 [命令行下 :set nu 和 :set nonu] (5)最末行G 最首行gg,将光标移动到20行 [20 shift+g]

    2. 关机和重启

    shutdown -h now 立即关机 shutdown -h 1 1分钟后关机 shutdown -r now 立即重启 halt 关机 reboot 重启 sync 把内存数据写到磁盘中 (关机重启前重要的一步) logout 退出登陆,注销用户远程登陆有效

    3. 用户管理

    3.1 用户

    useradd [选项] 用户名 添加用户 useradd -d 指定目录 用户名 添加用户,给新创建的用户指定家目录 passwd 用户名 设置用户密码 userdel 用户名 仅删除用户 userdel -r 用户名 删除用户及其主目录 id 用户名 查询用户信息 su – 用户名 切换用户 exit 退出当前用户 whoami / who am i 查看当前用户

    3.2 组管理

    groupadd 组名 新增组 groupdel 组名 删除组 useradd -g 用户组 用户名 增加用户时添加组 usermod -g 用户组 用户名 修改用户的组 cat /etc/group 查看所有组 id 用户名 查看用户所在组

    3.3 用户文件

    用户配置文件 /etc/passwd 组配置文件 /etc/group 口令文件 /etc/shadow

    4. 实用指令

    运行级别 配置文件/etc/inittab 0:关机 1:单用户(找回丢失密码) 2:多用户无网络服务 3:多用户有网络服务 4:未使用 5:图形界面 6:系统重启 init 数字 切换运行级别

    5. 帮助指令 man、help获得帮助信息

    man [命令或配置文件] (功能描述,获得帮助信息) help 命令 (功能描述,获得shell内置命令的帮助信息)

    6. 文件目录类

    pwd 显示当前工作目录的绝对路径 ls [选项] [目录或是文件] -a 显示当前目录所有问价和目录,包括隐藏的 -l 以列表的方式显示信息 cd ~或cd : 回到家目录 cd… 返回上一级 绝对路径:/home 相对路径: …/ mkdir [选项] 要创建的目录 创建目录 -p 创建多级目录 rmdir [选项] 要删除的空目录 rm -rf 要删除的非空目录 touch 文件名 创建空文件(可同时多个文件) cp [选项] 被拷贝对象 目标目录 复制文件 -r 递归复制整个文件夹 \cp 强制覆盖 rm [选项] 要删除的文件或目录 -r 删除整个文件夹 -f 强制删除不提示 mv 旧文件名 新文件名 重命名 mv 当前文件 目标文件夹 移动文件 cat [选项] 要查看的文件(只读) 查看文件内容 -n 显示行号 | more 分页 more 文件名 基于VI编辑器的文本过滤器,以全屏方式按页显示文本 空格键 向下一页;enter键 向下一行;q 退出;Ctrl F 向下一屏; Ctrl B返回上一屏;= 显示当前行号;:f 输出文件名和当前行的行号 less 文件名 空白键 向下翻一页 ;[page down] ;[page up] ; /字串 向下搜索(n向下N向上) ?字串 与/字串相反 q退出 指令和>>指令 // >输出重定向和>>追加 基本语法 (1)ls -l > 文件 (将列表的内容写到文件中,覆盖) (2)ls -l >> 文件 (将列表的内容追加到文件的末尾) (3)cat 文件1 > 文件2 (将文件1的内容覆盖到文件2) (4)echo “内容” >> 文件 (将内容追加到文件末尾) echo [选项] [输出内容] 输出内容到控制台输出环境变量 echo $PATH head [选项] 文件 查看文件前10行 -n数字 查看前n行 tail [选项] 文件 与head相反 -f 实时追踪文件更新 (重要) tail -f log.txt ln -s [原文件或目录] [软连接名] 给原文件创建一个软链接 history 查看历史命令 !数字 执行第n个历史命令

    7.时间日期类

    date指令 (1) date 显示当前日期 (2) date +%Y 显示当前年份 (3) date +%m 显示当前月份 (4) date +%d 显示当前天 (5) date “+%Y-%m-%d %H:%M:%S” 显示日期 (6) date -s “2018-10-10 11:11:11” 设置系统时间 cal [选项] 查看日历 (1) cal 显示当前日历 (2) cal 2020 显示2020年日历

    8.搜索查询类指令

    find指令 从指定目录向下递归遍历其各个子目录,将满足条件的文件或目录显示在终端 find [搜索范围] [选项-name -user -size] (1)find /home -name hello.txt 文件名搜索 (*.txt通配符查找 \转义) (2)find /root -user root 文件拥有者搜索 (3)find /root -size +20M 文件大小搜索(+n 大于n , –n 小于n) locate指令 (1)安装locate模块 yum -y install mlocate (2)使用 updatedb 创建locate数据库 (3)locate bad.txt 搜索文件 grep指令和管道符号| cat bad.txt | grep -n good 管道符号| 表示将前一个命令的输出结果输出传递给后面的命令处理 grep [选项] 查找内容 源文件 选项-n 显示匹配行及行号 -i 忽略字母大小写

    9.压缩和解压缩

    gzip压缩和gunzip解压缩 gzip 文件 压缩文件为.gz格式,不保留源文件 gunzip 文件.gz 解压缩 zip压缩和unzip解压 zip [选项] XXX.zip 要压缩的文件 压缩 unzip [选项] XXX.zip 解压 选项: -r 递归压缩,压缩目录 zip -r mypackage.zip /root/* -d 解压到指定目录 unzip -d /root/mupack/ mypackage.zip tar解压缩 tar打包指令,压缩文件为.tar.gz的文件 tar [选项] XXX.tar.gz XXX文件 将XXX文件打包为XXX.tar.gz 选项 :-c产生tar打包文件 -v 显示详细信息 -f 指定压缩后的文件名 -z 打包同时压缩 -x 解包.tar文件 tar -zcvf a.tar.gz bad.txt good.txt 同时打包两个文件 tar -zcvf rooqt.tar.gz /root/gf/ 打包整个目录 tar -zxvf a.tar.gz 解压文件 tar -zxvf a.tar.gz -C /root/gf/ 解压到制定文件夹

    10.组管理和权限管理

    ls -ahl 查看文件的所有者 实例: (1)创建一个组police groupadd police (2)创建一个用户tom,属于police useradd -g police tom passwd tom (3)使用tom创建文件ok.txt touch ok.txt chown 用户名 文件名 修改文件所有者 chown tom apple.txt 文件所有者改变,文件所在组不一定改变 chgrp 组名 文件名 修改文件所在组 usermod -g 组名 用户名 改变用户所在组 usermod -d 目录名 用户名 改变该用户登录的初始目录 文件权限 -rw-r–r-- 1 root root 291 Jan 10 18:33 bad.txt 0位为文件类型,-为普通文件,d为目录文件,l为软链接,c为字符设备,b为块文件 1至3位为所有者的权限,4至6位为所在组用户的权限,7至8位为其他组权限 r读权限,w写权限(删除需要对该目录有写权限),x执行权限(可进入目录),可用数字表示,r=4,w=2,x=1,rwx=7 文件数目 1为硬链接,是一般文件;其他数字为该目录文件的子目录数目 文件大小(字节) 291 最后修改日期 修改文件权限 chmod 方式一: + - = 变更权限 (u所有者,g所有组,o其他人 ,a所有人) (1) chmod u=rwx,g=rx,o=x 文件目录名 (2) chmod o+w 文件目录名 (3) chmod a-x 文件目录名 方式二:通过数字变更 r=4 w=2 x=1 rwx=7 chmod u=rwx,g=rx,o=x 文件名 相当于chmod 751 文件名 修改文件所有者 chown newowner file 修改文件所有者 chown newowner:newgroup file 修改文件所有者和所有组 -R 如果是目录,使其所有子文件或目录递归生效

    11. crond任务调度

    系统在某个时间执行的特定的命令或程序 crontab [选项] -e 编辑定时任务,-l 查询定时任务, -r 删除当前用户所有的crontab任务 任务的要求:设置任务调度文件:/etc/crontab ; 设置个人任务调度; 执行crontab -e 命令; (对于简单的任务,直接在crontab中加入任务,复杂任务需要写脚本)。 占位符 第一个* 一小时当中的第几分钟 0-59 第二个* 一天当中的第几小时 0-23 第三个* 一个月当中的第几天1-31 第四个* 一年当中的第几个月 1-12 第五个* 一周当中的星期几 0-7 符号说明: * 表示任何时间 ,表示不连续的时间 -代表连续的时间范围 /n表示每隔多久 service crond restart 重启任务调度 每隔一分钟,将当前的日期信息,追加到/tmp/mydata 文件中 (1)编写文件 /home/mytask1.sh date>>/tmp/mydate (2)给mytask1.sh一个可执行权限 (3)crontab -e (4)/1 * * * * /home/mytask1.sh

    12.磁盘分区和挂载

    (1)mbr分区:最多支持四个主分区,系统只能安装在主分区,扩展分区要占一个主分区,mbr最大只支持2TB,但拥有最好的兼容性。 (2)gtp分区:支持无限主分区,最大支持18EB Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘 对于 IDE 硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了。“x”为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。 对于 SCSI 硬盘则标识为“sdx~”,SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样。 lsblk [选项] 查看当前系统的分区情况 -f 增加一块硬盘 1)虚拟机添加硬盘 2)分区 fdisk /dev/sdb 3)格式化 mkfs -t ext4 /dev/sdb1 4)挂载 先创建一个 /home/newdisk , 挂 载 mount /dev/sdb1 /home/newdisk 5)设置可以自动挂载(永久挂载,当你重启系统,仍然可以挂载到 /home/newdisk) 。 vim /etc/fstab /dev/sdb1 /home/newdisk ext4 defaults 0 0 磁盘情况查询指令 df [选项] -h -lh 查询指定目录的磁盘占用情况 du [选项] /目录 -s 指定目录占用大小汇总 -h 带计量单位 -a 含文件 –max-depth=1 子目录深度 -c 列出明细的同时,增加汇总值 统计文件数 ls -l /root | grep “^-” | wc -l 列举、过滤、汇总 统计目录数 ls -l /root | grep “^d” | wc -l 列举、过滤、汇总 包括子文件夹 -R 树状显示目录 tree (yum install tree安装tree)

    13.网络环境配置

    1. 自动获取IP

    2. 设置固定IP

    (1)修改配置文件指定IP,并连接到外网 ,编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33 (2)修改 ONBOOT=yes BOOTPROTO=static 添加 IPADDR=192.168.44.145 NETMASK=255.255.255.0 GATEWAY=192.168.44.2 DNS1=192.168.44.2 (3)重启网络服务 service network restart

    3. 随机生成uuid

    14.进程管理

    基本:(1)每个执行的程序都称为进程,且分配一个ID号;(2)每个进程对应一个父进程,父进程可以复制多个子进程;(3)进程的存在前台或后台(守护进程) ps [选项] 查看正在执行的进程(PID进程识别号,TTY终端机号,TIME此进程所需要CPU时间,CMD正在执行的命令或进程名) -a 显示当前终端的所有进程信息 -u 以用户格式显示进程信息 -x 显示后台进程运行的参数 -ef 父进程 -e显示所有进程,-f全格式 ps -aux|more ps -aux | grep xxx USER(用户名)PID(进程号) %CPU(CPU) MEM(内存)VSZ(虚拟内存) RSS(物理内存)TTY(使用的终端) STAT(进程状态,S休眠,R运行,Z僵尸进程,D短期等待,T被跟踪) START(启动时间)TIME(占用CPU的总时间) COMMAND(进程执行时的命令行) PPID父进程 C计算执行优先级的因子 kill [选项] 进程号 通过进程号终止进程 -9 强迫进程立即停止 killall 进程名称 通过进程名称杀死进程 pstree [选项] 直观的查看进程 -p 显示进程的PID -u 显示进程的所属用户

    服务管理service 运行在后台,监听某个端口,等待其他程序的请求,即守护进程

    service 服务名 [选项 start stop restart reload status] systemctl [选项 start restart reload status] 服务名 systemctl status firewalld.service Windows的dos下 Telnet ip 端口 查看服务名 (方式1,使用setup系统服务;方式2,/etc/init.d/服务名称) 服务的运行级别,查看或修改默认级别: vi/etc/inittab chkconfig 对每个服务的各个运行级别设置自启动/关闭 chkconfig --list|grep xxx 查看服务 chkconfig 服务名 --list chkcconfig --level 5 服务名 on/off

    进程监控指令 top [选项] 动态监控指令 -d 秒数 指定top命令每隔几秒更新 -i 使top不显示任何闲置或者僵尸进程 -p 通过指定监控进程id来仅仅监控某个进程的状态 交互指令 p 以CPU使用率排序 M以内存使用率排序 N 以PID排序 q 退出top u 回车 用户名 监视特定用户 k 回车 进程ID 终止指定进程

    监控网络状态 netstat [选项] -an 按一定顺序排列输出 -p 显示哪个进程在调用

    15. RPM与YUM

    rpm包,Redhat package manager 红帽软件包管理工具

    rpm -qa | grep xx 查询已安装的rpm列表,noarch通用版本 rpm -q 软件包名 查询软件包是否安装 rpm -qi 软件包名 查询软件包信息 rpm -ql 软件包名 查询软件包中的文件 rpm -qf 文件全路径名 查询文件所属的 软件包

    rpm -e RPM包的名称 卸载rpm包 --nodeps 强制删除 rpm -ivh rpm包全路径名称 安装rpm包 -i安装 -v提示 -h进度条 yum list | grep xx软件列表 yum install xx 下载安装 ubuntu sudo apt-get update 更新源 sudo apt-get install package 安装包 sudo apt-get remove package 删除包 sudo apt-cache show package 获取包的信息 sudo apt-get source package 下载该包的源代码

    16.shell脚本编程

    格式要求:以 #!/bin/bash 开头,并有执行权限 执行方式:

    (1)输入脚本的路径,赋予其执行权限,执行

    (2)执行脚本,sh 脚本路径。

    shell变量 shell变量分为系统变量和用户自定义变量 系统变量 $HOME $PWD $PATH $USER等等 显示当前shell中所有变量 set shell 变量的定义 定义变量 变量=值 撤销变量 unset 变量 声明静态变量 readonly 变量 (不能unset)

    echo " path=$PATH,pwd=$PWD" A=5 echo "A=$A " echo "A=$A"

    定义变量的规则 (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头 (2)等号两侧不能有空格 (3)变量名称一般为大写 将命令的返回值赋给变量 (1)a=’la -la’ 反引号,运行引号中的命令,并把结果返回给A (2)A=$(ls -la) 等价于反引号

    B=`ls -la` echo "B=$B" C=$(date) echo $C

    设置环境变量 在/etc/profile文件中 export 变量名=变量值 (将shell变量输出为环境变量) BIN=2468 export BIN source 配置文件 (将修改后的配置信息立即生效) source /etc/profile echo $变量名 (查询环境变量的值) echo B I N ( 在 / e t c / p r o f i l e 文 件 中 配 置 环 境 变 量 BIN (在/etc/profile文件中配置环境变量 BIN/etc/profileABC,则$ABC可以在shell文件中引用)

    多行注释 :<<! 注释内容 !

    位置参数变量 shell脚本内部获得外部命令行的参数 $n(n为数字,0代表命令行本身,1-9代表第一到第九个参数,第十以上的参数${n}) $* (代表命令行中的所有参数,把所有参数看成一个整体) $@ (代表命令行中的所有参数,把每个参数区别对待) $# 代表命令行中所有参数的个数

    预定义变量 shell设计者事先定义好的变量 $$ 当前进程的进程号 $! 后台运行的最后一个进程的进程号 $? 最后一次执行的命令的返回状态 运算符 $((运算式))或$[运算式] 'expr m + n' (运算符间要有空格) *乘 /除 %取余 条件判断 [ 条件 ] 条件左右有空格,非空返回true,可使用$?验证(0为true,>1为FALSE ) -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge大于等于 -ne不等于 [ 23 -gt 22 ] = 字符串相同 -r 有读权限 -w 写权限 -x执行权限 -f 文件存在并且是一个常规文件 -e文件存在 -d文件存在并是一个目录 [ -e 文件路径 ]

    if [ "ok" = "ok" ] then echo "equal" fi if [ 23 -gt 22 ] then echo "大于" fi

    case $变量名 in “值1”) 如果变量的值等于值1,则执行程序1 ;; “值2”) 如果变量的值等于2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上 程序,则执行此程序 ;; esac

    case $2 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other" ;; esac

    for循环

    for 变量 in 值1 值2 值3 do 程序 done

    for j in "$@" do echo "the numm is $@" done

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

    for i in "$*" do echo "the num is $i" done echo "================" SUM=0 for ((i=1;i<=100;i++)) do SUM=$[$SUM+$i] done echo "sum=$SUM"

    while循环 while [ 条件判断式 ] do 程序 done

    SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] i=$[$i+1] done echo "sum=$SUM"

    read读取控制台输入 read [选项] [参数] -p指定读取值时的提示符 -t 指定读取值时等待的时间(秒) 参数:指定读取值的变量名

    read -p “请输入一个数” NMU1 echo “输入的值为 $NMU1”

    系统函数 basename 返回完整路径最后/的部分,常用于获取文件名 basename [pathname] [suffix] basename [string] [suffix] basename命令会删除所有的后缀包括最后一个“/”字符,然后将字符串显示出来 选项suffix为后缀,如果suffix被指定basename会将pathname或string中的suffix去掉

    dirname 文件绝对路径 从给定的包含绝对路径的文件名中除去文件名部分剩下路径部分

    自定义函数

    [ function ] funname[()] { action; [return int;] }

    调用直接写函数名 funname [值]

    计算两个参数的和

    function getSum(){ SUM=$[$n1+$n2] echo "和是 $SUM" } read -p "请输入第一个数n1" n1 read -p "请输入第二个数n2" n2

    调用getSum

    getSum $n1 $n2
    Processed: 0.009, SQL: 9