Linux基础笔记

2023-10-27



一. Linux目录结构

  • /bin 存放经常使用的命令
  • /sbin 存放系统管理员使用的系统管理程序
  • /home 存放普通用户的主目录,一般目录名是自己账户名
  • /root 系统管理员的主目录
  • /lib 系统开机所需要的动态连接共享库,几乎所有应用程序都需要用到这些共享库
  • /lost+found 一般为空,非法关机后会存放一些文件 (默认被隐藏 ls 可以看到)
  • /etc 所有系统管理所需要的配置文件和子目录,如安装 mysqlmy.conf
  • /usr 用户的很多应用程序和文件都放在这,安装之后的文件
  • /boot 存放启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /proc 虚拟的目录,是系统内存的映射,访问这个目录可以获取系统信息
  • /srv 存放一些服务启动之后需要提取的数据
  • /syslinux2.6 内核的一个大的变化,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs
  • /temp 存放一些临时文件
  • /dev 类似于 windows 的设备管理器,把所有的硬件用文件的形式存储
  • /media linux 系统会自动识别一些输入设备并把这些设备挂载到这个目录下
  • /mnt 为了让用户临时挂载别的文件系统,可以将外部的存储挂载到 /mnt/ 上,然后就可以查看了
  • /opt 给主机额外安装软件(安装包)摆放的目录,约定放到这里
  • /usr/local 一般通过编译源码方式存放安装好的软件
  • /var 存放不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
  • /selinux 一种安全子系统,能控制程序只能访问特定文件,有三种工作模式,可以自行设置

二. vi 和 vim

1. 三种方式

  • 正常模式:(默认),只能上下左右,删除,复制粘贴
  • 插入模式:按下 i, I, o, O, a, A, r, R 等任何一个字母之后会进入编辑模式
  • 命令行模式:输入 :或者/ ,读取,存盘,替换,离开vim, 显示行号等操作
    • :wq 保存退出
    • :q 退出
    • :q! 强制退出,不保存

从其他模式切换到一般模式时点击 esc

2.基础操作

  • yy:拷贝当前行,拷贝当前行向下的5行:5yy
  • dd:删除当前行
  • /关键字:命令行下直接回车查找关键字,输入 n 就是查找下一个匹配项
  • :set nu:设置文件的行号,:set nonu设置取消文件的行号
  • 一般模式下,
    • G:定位到文档最末行
    • gg:定位到文档首行
    • u:撤销
    • 行号+G 或者 行号+gg:定位到行号的位置

三. Linux基础命令

1. 关机&重启

  • shutdown -h now:立刻关机
  • shutdown -h 1:1分钟后关机
  • shutdown -r now:立刻重启
  • halt:关机
  • reboot:重启
  • sync:把内存的数据同步到磁盘

! 注意在重启和关机之前首先运行 sync 命令

2. 登录&注销

  • su - 用户名:切换用户,从权限高用户切换到权限低用户不需要密码,反之需要密码,需要返回到原来用户时使用 exit/logout指令
  • logout:注销用户,在图形运行及比如无效

3. 用户管理

  • useradd 用户名:添加一个用户,默认该用户的家目录在 /home(以后用该用户登录时会自动切换到这个目录),
  • useradd -d 指定目录 新的用户名:添加一个用户在指定目录
  • passwd 用户名:不写用户名等于修改当前登录用户的密码,指定修改密码
  • userdel 用户名:删除用户,但保留家目录
  • userdel -r 用户名:删除用户,不保留家目录
  • id 用户名:查询用户信息
  • who am i:显示第一次登录的用户

用户组:系统可以对有共性/权限的多个用户进行统一的管理

  • groupadd 组名:新增组
  • groupdel 组名:删除组
  • useradd -g 用户组 用户名:增加用户时直接加上组,如果没指定用户组,会默认创建一个和用户名同名的组,并把该用户放到该组
  • usermod -g 用户组 用户名:修改用户的组

用户和组相关文件

  • /etc/passwd 文件:用户的配置信息,记录用户的各种信息
    • 每行的含义:用户名:口令:用户标识号:组标识号:注释行描述:主目录:登录Shell
  • /etc/shadow 文件:口令的配置文件
    • 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
  • /etc/group 文件:组的配置文件,记录 Linux 包含的组的信息
    • 每行的含义:组名:口令:组标识号:组内用户列表

使用 vim 文件名可以查看文件信息

4. 运行级别

0:关机

1:单用户(找回丢失密码)

2:多用户状态没有网络服务

3:多用户状态有网络服务

4:系统未使用保留给用户

5:图形界面

6:系统重启

常用3, 5,也可以指定默认运行级别

  • init 运行级别:切换不同的运行级别
  • systemctl get-default:查询当前运行级别
  • systemctl set-default TARGET.target:设置运行级别,CentOS7之后,在 /etc/inittab文件中进行了简化,multi-user.target:analogous to runlevel 3,graphical.target:analogous torunlevel 5

5. 帮助指令

  • man [命令或配置文件]:获得帮助信息
  • help 命令:获得 shell 内置命令的帮助信息

linux 下,隐藏文件是以 . 开头的

6. 文件目录指令

  • pwd:显示当前工作目录的绝对路径

  • ls [选项] [目录或文件]:常用选项,-a:显示当前目录所有文件和目录包括隐藏,-l:以列表方式显示信息

  • cd [参数]:可以定位到绝对路径和相对路径,~ 表示回到自己家目录,root 会到 /root,tom 会到 /home/tom,… 表示回到当前目录的上一级目录

  • mkdir [选项] 要创建的目录:创建目录,选项 -p:创建多级目录

  • rmdir [选项] 要删除的目录:删除空目录,如果要删除非空目录,需要选项 -rf

  • touch 文件名称:创建一个空文件

  • cp [选项] source dest:把 source 拷贝到 dest,选项 -r 表示递归复制整个文件夹,\cp 表示强制覆盖不提示

  • rm [选项] 要删除的文件或目录:移除文件或目录,选项 -r:递归删除整个文件夹,-f:强制删除不提示

  • mv oldNameFile new NameFile:重命名文件,同级目录

  • mv /temp/movefile /targetFolder:移动文件

  • cat [选项] 要查看的文件:查看文件内容,选项 -n:显示行号,只能浏览文件不能修改,为了浏览方便一般加上管道命令 | more(把前面得到的结果交给下一个指令)

  • more 要查看的文件:按页显示文本文件的内容,操作:

    • 空格:下一页
    • Enter:向下一行
    • q:立刻离开 more,不再显示文件内容
    • Ctrl+F:向下滚动一屏
    • Ctrl+B:返回上一屏
    • =:输入当前行的行号
    • :f:输出文件名和当前行的行号
  • less 要查看的文件:和 more 类似,但支持各种显示终端,根据显示的需要加载内容,显示大型文件时效率高,操作:

    • 空格:向下翻动一页
    • [pagedown]:向下翻动一页
    • [pageup]:向上翻动一页
    • /字串:向下搜寻[字串],n:向下查找,N:向上查找
    • ?字串:向上搜寻[字串],n:向上查找,N:向下查找
    • q:离开 less
  • echo [选项] [输出内容]:输出内容到控制台

  • head 文件:查看文件头10行内容

  • head -n 5 文件:查看文件头5行内容

  • tail 文件:查看文件尾10行内容

  • tail -n 5 文件:查看文件尾5行内容

  • tail -f 文件:实时追踪该文档的所有更新,Ctrl+C退出

  • > 输出重定向和 >> 追加:后面如果文件不存在会自动创建

    • ls -l >文件:列表的内容写入文件(覆盖写)
    • ls -al >>文件:列表的内容追加到文件的末尾
    • cat 文件1 > 文件2:将文件1内容覆盖到文件2
    • echo “内容” >> 文件:将内容追加到文件尾

软链接也称为符号链接,类似于 windows 中的快捷方式,主要存放了链接其他文件的路径

  • ln -s[原文件或目录] [软链接名]:给原文件创建一个软链接
  • history [指令数]:查看[指令数]已经执行过的历史命令,也可以执行历史命令
  • !5:执行history中的编号为5的指令
  • date:显示当前时间
    • date +%Y:显示当前年份
    • date +%m:显示当前月份
    • date +%d:显示当前是哪一天
    • date “+%Y-%m-%d %H:%M:%S”:显示年月日时分秒
    • date -s:字符串时间,可以设置时间
  • cal [选项]:不加选项,显示本月日历
  • find [搜索范围] [选项]:从指定目录向下递归遍历各个子目录,将满足条件的文件或目录显示在终端
    • 选项:-name<查询方式>:按指定的文件名查找模式查找文件
    • -user<用户名>:查找属于指定用户名所有文件
    • -size<文件大小>:按照指定文件大小查找文件,+n大于,-n小于,n等于,单位 K, M, G
  • locate 搜索文件:快速定位文件路径,利用事先建立的所有文件和路径的数据库快速查找到文件,无需遍历整个文件系统,为了保证查询结果的准确度,必须定期更新locate时刻,第一次运行前,必须使用updatedb创建locate数据库
  • which 指令:查看某个指令在哪个目录下
  • grep [选项] 查找内容 源文件:过滤查找,一般和管道 | 一起用,
    • cat a.txt | grep “hello”:查找a.txt中有没有 “hello”,和 grep -n “hello” a.txt效果一样
    • 选项:-n:显示匹配行及行号,-i:忽略字母大小写

7. 压缩&解压

  • gzip 文件:压缩文件,只能将文件压缩为 *.gz 文件
  • gunzip 文件.gz:解压缩文件
  • zip [选项] XXX.zip 将要压缩的内容:压缩文件,选项 -r:递归压缩(压缩目录)
    • zip -r myhome.zip /home/:压缩/home目录及其包含的文件和子文件夹压缩
  • unzip [选项] XXX.zip:解压缩文件,选项 -d<目录>:指定解压后文件的存放目录,默认解压到当前目录
  • tar [选项] XXX.tar.gz 打包的内容:打包指令,最后打包后的文件是 .tar.gz 的文件
    • 选项:-c:产生 .tar 打包文件
    • -v:显示详细信息
    • -f:指定压缩后的文件名
    • -z:打包同时压缩
    • -x:解包 .tar 文件
    • tar -zcvf pc.tar.gz /home/pig/txt /home/cat.txt:将pig.txtcat.txt压缩为 pc.tar.gz,以逗号隔开
    • tar -zxvf /home/myhome.tar.gz -C /opt/tmp2:将 myhome.tar.gz解压到 /opt/tmp2目录下

8. 组管理

  • ls ahl:查看文件的所有者以及文件所在的组(创建该文件的用户)
  • chown 用户名 文件名:修改文件所有者
  • chgrp 组名 文件名:修改文件所在的组

9. 权限管理

  • ls -l 这个命令显示 -rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
    • 第一列中:0-9位:
      • 0位是文件类型(d 目录, - 普通文件 , l 链接, c 字符设备文件,鼠标,键盘, b 块设备,如硬盘)
      • 1-3位确定所有者拥有该文件的权限 User
      • 4-6位确定所属组(同用户组)拥有该文件的权限 Group
      • 7-9位确定其他用户拥有该文件的权限 Other
      • 权限作用到文件 r:可读,w:可以修改,不代表可以删除,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除文件,x:可执行
      • 权限作用到目录 r:可以读取,ls查看目录结构,w:可以修改,对目录内创建+删除+重命名目录,x:可进入该目录
      • rwx可以用数字表示,r=4,w=2,x=1,rwx=7
    • 第二列:
      • 文件:硬连接数
      • 目录:子目录数
    • 第三列:文件所有者
    • 第四列:文件所属组
    • 第五列:文件大小(字节),如果是文件夹,显示 4096 字节
    • 第六列:最后修改日期
    • 第七列:文件名
  • chmod u=rwx,g=rx,o=x 文件/目录名:u:所有者,q:所有组,o:其他人,a:所有人(u,g,o的总和),第一种使用 +,-,= 变更权限,第二种使用数字变更权限,r=4,w=2,x=1
    • chmod 751:和上述相同
  • chown [选项] newowner 文件/目录:修改文件所有者,-R:如果是目录,则是其下所有文件或目录递归生效
  • chown [选项] newowner:newgroup 文件/目录:修改文件所有者和所在组,-R同上
  • chgrp [选项] newgroup 文件/目录:修改所在组,-R同上

10. 定时任务调度

  • crontab [选项]:定时执行特定命令,选项:
    • -e:编辑 crontab 定时任务
      • crontab -e 进入编辑定时任务,再编辑
      • 例如 */1 * * * * ls -l /etc/ > /tmp/to.txt:意思是每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt
      • 五个占位符*,第一个:一小时中的第几分钟 0-59
      • 第二个:一天中第几小时 0-23
      • 第三个:一个月中第几天 1-31
      • 第四个:一年中第几个月 1-12
      • 第五个:一周中星期几 0-7(0,7都是星期日)
      • 特殊符号: *:代表任何时间,第一个 * 就代表一小时中每一分钟都执行一次
      • ,:代表不连续的时间,如 0 8,12,16 * * *,代表在每天的 8:00,12:00,16:00执行一次
      • -:代表连续的时间范围,如 0 5 * * 1-6 ,代表周一到周六的5:00执行命令
      • */n:代表每隔多久执行一次,如 */10 * * * *,代表每隔10分钟执行一次命令
    • -l:查询 crontab 任务
    • -r:删除当前用户所有的 crontab 任务
  • vim XXX.sh:编辑shell脚本,执行时要先拥有执行的权限,再 ./XXX.sh进行执行
    • /1 * * * * /home/XXX.sh:每隔一分钟执行一次shell*脚本
  • at [选项] [时间]:一次性定时计划任务,执行一次就不执行了,使用 at 命令时,一定要保证 atd 进程的启动, ps -ef | grep atd检测atd进程,atd每隔60秒检查有没有作业,命令输入完毕后再输入 Ctrl + D 表示命令结束,选项:
    • -m:指定任务被完成后,会给用户发送邮件,即使没有标准输出
    • -i(大写):atq 的别名
    • -d:atrm的别名
    • -v:显示任务将被执行的时间
    • -c:打印任务的内容到标准输出
    • -V:显示版本信息
    • -q<队列>:使用指定队列
    • -f<文件>:从指定文件读入任务而不是从标准输入读入
    • -t<时间参数>:以时间参数形式提交要运行的任务
    • 时间:hh:mm的形式,如果时间过去就第二天执行,如 04:00
    • midnight(深夜),noon(中午),teatime(饮茶时间,一般下午4点)等
    • 12小时制,时间后加 AM(上午),PM(下午)
    • month day (月 日) 或 mm/dd/yy (年 月 日) 或 dd.mm.yy,如 04:00 2021-03-1
    • now + count time-units,time-units为时间单位,minutes,hours,days,weeks
    • today,tomorrow
  • atq:查看系统中没有执行的工作任务
  • atrm 任务号:删除任务号的任务

11. 磁盘分区&挂载

分区可以挂载到目录下,进入该目录就等于进入该分区

  • lsblk 或 lsblk -f:查看所有设备挂载情况

linux硬盘分为 IDE 硬盘和 SCSI 硬盘,目前基本 SCSI硬盘

IDE硬盘驱动器标识 hdx~hd 表示分区所在设备类型,x 为盘号(a基本盘,b基本从属盘,c辅助主盘,d辅助从属盘),~ 代表分区,前四个分区用1-4表示,是主分区或扩展分区,从5开始是逻辑分区,如 hda3表示第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示第二个IDE硬盘上的第二个主分区或扩展分区

SCSI硬盘标识 sdx~,sd 表示分区所在设备类型,其他用法和上面一样

  • fdisk /dev/硬盘标识:分区命令
    • m:显示命令列表,p:显示磁盘分区 同 fdisk -l,n:新增分区,d:删除分区,w:写入并退出,q:不保存退出

格式化分区之后该分区会被分配一个唯一的40位的UUID

  • mkfs -f ext4 /dev/分区标识:格式化磁盘,ext4是分区类型
  • mount 分区 目录:将分区挂载到目录上,用命令行挂载重启后会失效
  • unmount 目录或分区:取消挂载,卸载时先cd到其他目录

永久挂载,通过修改 /etc/fstab实现,添加完成后执行 mount -a 立刻生效

  • df -h:查询系统整体磁盘使用情况
  • du -h:查询指定目录的磁盘使用情况,默认当前目录
    • -s:指定目录占用大小汇总
    • -h:带计量单位
    • -a:含文件
    • –max-depth=1:子目录深度
    • -c:列出明细同时增加汇总值
  • tree 目录:以树状显示目录结构,如果没有tree指令用 yum install tree安装

12. 网络配置

修改配置文件来指定ip

  • vim /etc/sysconfig/network-scripts/ifcfg-ens33:进入配置文件

更改之后service network restart 或 reboot 刷新

  • hostname:查看主机名

/etc/hostname 文件配置修改主机名

设置 hosts 映射

  • windows:C:\Windows\System32\drivers\etc 指定
  • linux:/etc/hosts 指定

windows中使用 ipconfig /displaydns 查看本地DNS域名解析的缓存,ipconfig /flushdns 清理本地DNS域名解析缓存,浏览器访问一个域名时,先检查游览器缓存中有没有该域名解析的ip,没有就检查本地DNS域名解析的缓存,如果没有就检查本地hosts文件中有没有对应映射,如果没有就到域名服务DNS找

13. 进程管理

  • ps [选项]:查看目前系统中正在执行以及执行状况的进程

    • -a:显示当前终端的所有进程信息
    • -u:以用户的格式显示进程信息
    • -x:显示后台进程运行的参数
    • 显示的信息选项:PID:进程识别号
    • TTY:终端机号
    • TIME:此进程所消CPU时间
    • CMD:正在执行的命令或进程名
    • COMMAND:启动进程的命令和参数,太长会截断
    • -ef:以全格式显示当前所有进程
    • PPID:父进程ID
  • kill [选项] 进程号:通过进程号杀死进程

    • -9:强迫进程立即停止
  • killall 进程名称:通过进程名称杀死进程,也支持通配符,在系统因为负载过大而变慢时很有用

  • /bin/systemctl start 服务名称:重启服务

  • pstree [选项]:更直观查看进程信息

    • -p:显示进程 PID
    • -u:显示进程的所属用户

服务本质就是进程,运行在后台,通常监听某个端口,等待其他程序的请求,又称为守护进程

  • service 服务名 [start | stop |restart | reload | status]

CentOS 7.0 之后,很多服务不再使用service,而是systemctlservice管理的服务在 /etc/init.d中,也可以使用 setup

开机流程:开机 -> BIOS -> /boot -> systemd进程1 -> 运行级别 -> 运行级别对应的服务

chkconfig可以给服务的各个运行级别设置自启动/关闭,指令管理服务在 /etc/init.d 查看。设置后需要 reboot

  • chkconfig --list [| grep xxx]
  • chkconfig 服务名 --list
  • chkconfig --level 级别名 服务名 on/off
  • systemctl [start | stop |restart |status] 服务名
    • systemctl设置服务自启动:指令管理的服务在 /usr/lib/systemd/system 中查看
    • systemctl list-unit-files [| grep 服务名]:查看服务开机启动状态
    • systemctl enable 服务名:设置服务开机启动
    • systemctl disable 服务名:关闭服务开机启动
    • systemctl is-enabled 服务名:查看服务是否自启动
    • 关闭或启动防火墙后立即生效(telent 测试 某个端口即可)
    • 只是临时生效,重启系统后会回归
    • 如果希望自启动或关闭永久生效,使用 systemclt [enable|disable] 服务名

打开防火墙同时需要打开端口

  • firewall-cmd -permanent --add-port=端口号/协议:打开端口
  • firewall-cmd -permanent -remove-port=端口号/协议:关闭端口
  • firewall-cmd --reload:重新载入才能生效
  • firewall-cmd --query-port=端口/协议:查询端口是否开放

  • top [选项]:top和ps很相似,都用来显示正在执行的进程,但top在执行一段时间会更新正在运行的进程
    • -d 秒数:指定每隔几秒刷新,默认3秒
    • -i:不显示任何闲置或僵死进程
    • -p:指定监控进程id监控某个进程的状态
    • 交互操作说明:P:以cpu使用率排序,默认就是这个
    • M:以内存的使用率排序
    • N:以PID排序
    • q:退出top
    • 监控特定用户:
      • 输入 u 回车,再输入用户名
    • 终止指定的进程:
      • 输入 k 回车,再输入进程号
  • netstat [选项]:查看系统网络情况
    • -an:按一定顺序排列输出
    • -p:显示哪个进程在调用

14. RPM和YUM

rpm 用于互联网下载包的打包及安装工具,包含在某些Linux分发版中,生成具有 .RPM 扩展名的文件,是 RedHat Package Manager(RedHat软件包管理工具),类似windowssetup.exe

  • rpm -qa:查询已安装的rpm列表
    • firefox-60.2.2-1.el7.centos.x8w6_64
    • 版本号:60.2.2-1
    • 适用操作系统:el7.centos.x8w6_64,表示 centos7.x的64位系统
    • rpm -q 软件包名:查询软件是否安装
    • rpm -qi 软件包名:查询软件包信息
    • rpm -ql 软件包名:查询软件包中的文件
    • rpm -qf 文件全路径名:查询文件所属的软件包
    • rpm -e RPM包的名称:卸载rpm包
    • rpm -e --nodeps RPM包的名称:强制删除rpm包
    • rpm -ivh RPM包全路径名称:安装RPM包
      • i=install 安装,v=verbose 提示,h=hash 进度条

Yum 是一个Shell前端软件包管理器,基于RPM包管理,能从指定的服务器自动下载RPM包并安装,可以自动处理依赖关系,并一次性安装所有依赖

  • yum list:查询yum服务器是否有需要安装的软件
  • yum install xxx:安装指定的yum包

四. JAVA

1. JDK

  • vim /etc/profile:编辑环境变量
  • source /etc/profile:刷新环境变量

2. tomcat

  • ./startup.sh:进入解压目录的bin目录,启动tomcat
  • firewall-cmd --permanent --add-port=8080/tcp:开放8080端口

3. mysql

CentOS7.6自带Mysql数据库是mariadb,会和mysql冲突,要先删除

  • grep “password” /var/log/mysqld.log:查看mysql给用户设置的临时密码

五. Shell编程

Shell是一个命令行解释器,为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序

1. Shell执行

要求

  1. 脚本以 #!/bin/bash 开头
  2. 脚本需要有可执行权限

执行方式

  1. 方式一,输入脚本绝对路径或相对路径,需要执行权限
  2. 方式二,sh+脚本,不需要执行权限

2. Shell变量

Linux Shell变量分为系统变量(如$HOME)和用户自定义变量

  • **set **:显示所有Shell变量

基本语法

  1. 定义:变量名=值
  2. 撤销:unset 变量
  3. 声明静态变量:readonly 变量,不能unset
  4. 规则:
    1. 不能以数字开头
    2. 等号两侧不能有空格
    3. 变量名一般大写
  5. 将命令返回值赋给变量
    1. A=`date`反引号,运行里面的命令返回结果给A
    2. A=$(date)

3. 设置环境变量

  • export 变量名=变量值:将shell变量输出为环境变量
  • source 配置文件:让修改后的配置信息立即生效
  • echo $变量名:查询环境变量值

配置文件在 /etc/profiles

多行注释 ;<<! 内容 !

4. 位置参数变量

如果希望获取命令行的参数信息,就可以使用位置参数变量,如 ./mysql.sh 100 200,这个命令行可以在myshell脚本中获取到参数信息

基本语法

  • $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要大括号包含如 ${10}
  • $*:代表命令行中所有参数
  • $@:和上一个一样,但把每个参数区分对待
  • $#:代表命令行中所有参数的个数

5. 预定义变量

shell设计者预先定义好的变量,可以直接使用

  • $$:当前进程号(PID)
  • $!:后台运行的最后一个进程的进程号
  • $?:最后一次执行命令的返回状态,如果是0,表示上一个命令正确执行,非0表示上一个命令执行不正确

6. 运算符

  1. $((运算式)) 或 $[运算式] 或 expr m + n
  2. expr m - n
  3. expr *,/,%:乘除取余

7. 流程控制

  • [condition]:非空为true,可以使用 $?验证(0为true,大于1为false)

判断语句

  1. =:字符串比较
  2. 整数比较
    1. -lt 小于,-le 小于等于,-eq 等于,-gt 大于,-ge 大于等于,-ne 不等于
  3. 按照文件权限判断
    1. -r 读,-w 写,-x 执行
  4. 按照文件类型判断
    1. -f 文件存在且是一个常规文件
    2. -e 文件存在
    3. -d 文件存在是一个目录
if [ "ok" = "ok" ]
then 
	echo "equal"
fi
if [ 条件 ]
then
	
elif [ 条件 ]
then
fi
case $变量名 in
"值1")

;;
"值2")

;;
*)
echo "other..."
;;
esac
for语法1:
for 变量 in 值1 值2...
do
程序
done


例1:因为$*会把输入的参数当作一个整体,所以只会输出一句
输入 100 200 300 ,输出 num is 100 200 300
换成$@时会分别对待
for i in "$*"
do
	echo "num is $1"
done

for语法2:
for((初始值;循环控制条件;变量变化))
fo
程序
done
while语法
while [ 条件 ]
do
程序
done

8. read读取控制台输入

  • read(选项)(参数)
    • 选项:-p:指定读取值的提示符,-t:指定读取值时等待的时间(秒)
    • 参数:变量:指定读取值的变量名
read -p "请输入一个NUM1=" NUM1

9. 函数

系统函数:

  • basename [pathname] [suffix]
  • basename [string] [suffix]:删除所有前缀包括最后的一个/字符,然后将字符串显示出来,suffix为后缀,如果指定了suffix,basename会将pathname或string中的suffix去掉,功能:返回完整路径最后/的部分,常用于获取文件名
    • basename /home/aaa/test.txt:返回 test.txt
    • basename /home/aaa/test.txt .txt:返回 test
    • dirname /home/aaa/test.txt:返回/home/aaa

自定义函数:

  • function 函数名(){
    	代码
    	[return int;]
    }
    调用时
    函数名 形参1 形参2 ...
    

六. 日志

日志文件保存在 /var/log/目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88uCSlpi-1661054026549)(C:\Users\shang\Desktop\linux\image-20220818191452678.png)]在这里插入图片描述

1. 日志管理服务 rsyslogd

CentOS7.6的日志服务是 rsyslogdCentOS6.x的日志服务是 syslogd

  • ps aux | grep “rsyslog” | grep -v “grep”:查询linuxrsyslogd服务是否启动
  • systemctl list-unit-files | grep rsyslog:查询rsyslogd服务的自启动状态

配置文件 /etc/rsyslog.conf

编辑文件格式为 *.* 存放日志文件

第一个*代表日志类型,第二个*代表日志级别
在这里插入图片描述
在这里插入图片描述

由rsyslogd记录的日志文件,格式包含

  1. 事件产生时间
  2. 产生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息

2. 日志轮替

日志轮替是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围之后,就会进行删除

日志轮替文件命名

  1. centos7使用 logrotate进行日志轮替管理,要想改变日志轮替文件的名字,通过 /etc/logrotate.conf 配置 dateext参数
  2. 如果配置文件有 dateext 参数,那么日志会用日期作为日志文件的后缀,这种不会重复,就不用改名,只需要指定保存日志个数,删除多余日志文件
  3. 如果配置文件没有 dateext 参数,日志文件就需要改名,第一次进行日志轮替时,当前的 secure 日志会自动改名为 secure.1,然后新建 secure 日志,用来保存新的日志,第二次进行日志轮替时,secure.1会自动改名 secure.2,当前 secure 日志会自动改名 secure.1,然后新建 secure 日志用改保存新的日志

在这里插入图片描述

参数说明

在这里插入图片描述

3. 查看内存日志

在这里插入图片描述

4. 备份$恢复

Linux备份和恢复有两种方式

  1. 把需要的文件(分区)用 tar 打包,下次恢复时解压
  2. 使用 dump 和 restore

没有指令时安装 yum - y install 指令名

在这里插入图片描述
在这里插入图片描述

七. Linux面试题

在这里插入图片描述

cut不能分割 " "(空格)的,要用 awk
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux基础笔记 的相关文章

  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im

随机推荐

  • 迟来的函数传参补充——传引用【引用调用】【c++】

    文章目录 1 传引用 1 1 特点 1 2 使用 1 2 1 一般引用 1 2 2 常量引用 1 3 案例 1 3 1 常见变量引用做函数参数 1 3 2 结构体引用做函数参数 1 传引用 函数传参 几乎一直在用简单的值传递 或者传指针 前
  • Selenium浏览器自动化测试框架简单介绍

    目录 selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器
  • Python--类及其方法

    Python 类及其方法 文章目录 Python 类及其方法 前言 一 类的定义 二 继承类定义 二 类的专业方法 前言 在 Python 中 面向对象编程主要有两个主题 就是类和类实例 类与实例 类与实例相互关联着 类是对象的定义 而实例
  • React怎样在非组件环境下拿到路由信息实现路由跳转

    最近写项目的时候遇到一个问题 如图所示 用户token失效后 页面需要跳转回登录页面 用location href直接赋值会导致页面刷新 对SPA来说是可耻的 而且location href跳转的时候 页面并没有提示信息出现就直接跳转了 然
  • 微信小程序——flex布局

    flex布局的基本知识 flex布局作用于父容器之上 用于控制其子盒子的位置和排列的方式 flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为Flex布局 box display
  • 应用层概述、基本原理

    网络应用体系结构 客户机 服务器结构 Client Server C S 点对点结构 peer to peer P2P 混合结构 Hybrid 1 客户机 服务器结构 服务器 7 24小时提供服务 永久性访问地址 域名 利用大量服务器实现可
  • aix安装bff_在AIX中安装与维护软件

    学习内容 在 AIX 中安装与维护软件 学习目标 1 了解安装软件包的含义及命名规则 2 了解 AIX 如何发布补丁 知道自己的 AIX 及已安装软件的版本情况 3 知道如何安装与管理软件及升级 4 会修复损坏的软件 5 知道如何通过 Fi
  • Linux/Windows中根据端口号关闭进程及关闭Java进程

    目录 Linux 根据端口号关闭进程 关闭Java服务进程 Windows 根据端口号关闭进程 Linux 根据端口号关闭进程 第一步 根据端口号查询进程PID 可使用如下命令 netstat anp grep 8088 以8088端口号为
  • java判空方式

    java判空方式 1 数据结构判空 map list set CollectionUtils isEmpty 为空 CollectionUtils isNotEmpty 不为空 2 对象判空 Objects isNull 为空 Object
  • IPv6你知道多少?

    IPv6是什么 互联网协议 IP 地址是分配给连接到互联网的每个设备的数字标识符 从广义上讲 IP地址允许设备相互通信并交换信息 Internet协议版本4 IPv4 于1983年发布 至今仍用于大多数Internet通信 IPv4地址使用
  • MongoDB.WebIDE:升级版的Mongodb管理工具

    很早以前收藏了一片文章 强大的MongoDB数据库管理工具 最近刚好要做一些MongoDB方面的工作 于是翻出来温习了一下 用起来也确实挺方便 不过在使用过程中出现了一些个问题 加上更喜欢MongoUVE的操作习惯 于是决定 自己动手 丰衣
  • Java之object和string的理解

    Java之object和string的理解 文章链接http blog csdn net qq 16628781 article details 65036244 知识点 栈区 堆区和方法区 object类clone 和qeuales 方法
  • dubbo之mock模拟

    1 写在前面 考虑这样的场景 当服务提供者还没有开发完毕或者是因为某些原因无法启动时 会导致服务消费者方的停滞 此时为了能够正常的开发测试 可以使用mock功能 在服务消费者端提供一个服务接口的mock实现类 来模拟调用服务提供者正常获取结
  • RCE高危漏洞预警:CVE-2021-40444简要分析

    漏洞影响及其危害 未经身份验证的攻击者可以利用该漏洞在目标系统上执行代码 Microsoft发布了一份关于此漏洞的官方公告 这篇博客文章讨论了该漏洞如何发挥作用 我们已获得多个利用此漏洞的文档样本 文档包中的document xml rel
  • JSONP 教程

    本章节我们将向大家介绍 JSONP 的知识 Jsonp JSON with Padding 是 json 的一种 使用模式 可以让网页从别的域名 网站 那获取资料 即跨域读取数据 为什么我们从不同的域 网站 访问数据需要一个特殊的技术 JS
  • CTFHUBWeb技能树——信息泄露writeup

    web之信息泄露 一 目录遍历 二 PHPINFO 三 备份文件下载 1 网站源码 2 bak文件 3 Vim缓存 4 DS Store 四 Git泄露 1 Log 2 Stash 3 Index 五 SVN泄露 六 HG泄露 一 目录遍历
  • 一口气用Python写了13个小游戏(附源码)

    今天给大家分享13个游戏源码 可以自己复现玩玩 研究下里面的编程逻辑 对学习编程 特别是初学者 应该会有很大帮助 1 吃金币 源码分享 import os import cfg import sys import pygame import
  • 做自媒体创作,这些坑你都踩过吗?快来避雷

    做自媒体以来 我经历过不少误区 走了很多弯路才觉悟出来 这里分享给大家 看看你有没有踩坑 1 不要把涨粉放在第一位 粉丝多少不是关键 20万粉丝的创作者我也有接触 几乎无变现能力 2 标题和封面的重要性 我以前愿意花几个小时写一篇文章 或者
  • nginx脚本

    将wget下载nginx 1 22 0 tar gz包 直接复制到文本中 添加执行权限 chmod 744 脚本名称 脚本名称或sh 脚本名称 执行脚本 bin bash shijian 20220717 xingming zs echo
  • Linux基础笔记

    文章目录 一 Linux目录结构 二 vi 和 vim 1 三种方式 2 基础操作 三 Linux基础命令 1 关机 重启 2 登录 注销 3 用户管理 4 运行级别 5 帮助指令 6 文件目录指令 7 压缩 解压 8 组管理 9 权限管理