Linux学习(第一篇)
Linux的具体目录结构
root |
该目录为系统管理员目录,root是具有超级权限的用户; |
Bin->usr/bin |
存放系统预装的可执行程序,这里存放的可执行文件可以在系统的任何目录下执行 |
usr |
是linux的系统资源目录,里边存放都是一些系统可执行文件或者系统以来的一些文件库 |
usr/local/bin |
存放用户自己的可执行文件,同样这里存放的可执行文件可以在系统的任何目录下执行 |
lib->usr/lib |
这个目录存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库 |
boot |
这个目录存放启动linux时使用的一些核心文件,包括一些链接文件以及镜像文件 |
dev |
该目录存放的是linux的外部设备,linux中的设备也是文件的形式存在 |
etc |
这个目录存放所有系统管理所需要的配置文件。通常通过source profile 进行重新加载,生效。 |
Home |
用户的主目录,在linux中,每个用户都有一个自己的目录,一般该目录名以用户的账号命名,叫做用户的根目录;用户登录以后,默认打开自己的根目录; |
opt |
这是给linux额外安装软件所存放的目录,比如你安装一个Oracle数据库则就可以放到这个目录下,默认为空 |
run |
下面有个media,里面是存放光驱 |
Linux常用命令
查询IP:ifconfig |
mkdir 创建目录 |
vim test.txt 创建并打开这个文件 ESC键退出编辑模式,返回到一般模式。 命令模式:在一般模式下,按 冒号shift + : ,进入命令模式。输入q! -----不保存编辑内容; 复制当前行:在 一般模式下,按 yy 把光标所在行复制到剪切板;按p,把剪切板中的内容粘贴到光标所在的位置。
复制当前行往下5行:在一般模式下,按5yy 把光标所在的行往下5行复制到剪贴板;然后粘贴光标(p)所在的下一行。
一般模式下,使用快捷键到大文档的最首行[gg] 和最末行[G]
|
添加用户:useradd 用户名 (一般是超级管理员才有权限;)在linux中任何一个用户都至少属于一个组,新建用户如果不指定组,则会新建一个组,组名跟用户名相同,并且把该用户添加到该组中。 切换用户:su 用户名 eg: su zhangsan 备注 |
添加组:groupadd 组名 eg: groupadd dev 把用户从组中移除: gpasswd –d 用户名 组名 eg: gpasswd –d zhangsan dev 添加用户时,指定所属的组(主组): useradd –g 组名 用户名 eg: useradd –g dev lisi 用来查看linux系统手册上的帮助信息:man 命令 eg: man ls 分屏显示、按回车翻一行,按空格翻一页,按q退出查看; 查看当前所在的目录:pwd 查看指定目录下所有的子目录:ls [指定目录] eg: ls /home 以列表显示 ls –l [指定目录] 显示指定目录下所有子目录和文件(包括虚拟的目录) ls –a /home 以列表形式显示指定目录下所有的子目录和文件 ls –al /home |
切换目录: cd 目录名 绝对目录: cd /opt/testDir 以盘符开始的目录 相对目录: cd testDir 在任何目录下进入根目录直接:cd ~ .. : 当前目录的上一级目录,从当前目录开始查找它的上一级目录; . : 当前目录 eg: ./xxx.sh |
创建一个或者多个空文件: touch 文件名列表(文件名之间用空格隔开) touch test1.txt test2.txt 复制文件: cp source(源) dest(目标) eg: cp t1.txt test2 把t1.txt文件复制到test2目录中 eg: cp test2 test5 把test2目录复制到test5目录中 注意:只能复制空目录 递归复制文件 cp –r source(源) dest(目标) 删除文件或者目录: rm 文件名 或者目录名 Eg: rm t1.txt 提示删除 rm –f t2.txt 强制删除 rm –r test2 递归提示删除 rm –rf test3 递归强制删除 |
移动目录或者文件 mv source(源) dest(目标) mv test.txt test1 mv test1 test2 mv t1.txt t2.txt 文件重命名,若文件存在,则会提示是否需要覆盖 |
echo: 输出系统变量或者常量的值到命令行终端; echo $JAVA_HOME echo hello world! |
把前一个查看命令的结果输出到指定的文件中:查看命令 > 文件名 Ls > test.txt 如果目标文件不存在则会新建一个文件,并且将ls命令的结果输出到文本中 Cat test1.txt > test2.txt 将文本拷贝一份 |
查看或者设置系统的日期或者时间 date date +%Y 系统当前的年份 date +%m 系统当前的月份 date +%d系统当前的日期 date ‘+%Y-%m-%d %H:%M:%S’ 按yyyy-MM-ddd HH:mm:ss 格式显示 查看系统日历:cal cal: 查看当前月份的日历 eg: cal 2020
|
搜索文件或者目录的命令:find 关键字 [-name 默认按名称] [-siize] 按文件大小搜索 [-user]按文件的所有者搜索 Eg: find *.txt 搜索当前目录下,所有的.txt文件 find *e* 搜索当前目录下所有包含e的 find /etc *.txt 搜索指定目录下的txt文件 find /etc -size +5M 搜索大于5M的文件 find /etc –user zhangsan 搜索/etc目录下素有者是zhangsan的文件和目录
|
locate:在整棵目录树种搜索文件或者目录,都是根据名称搜索,效率高。 updated 先同步数据库 然后locate 关键字 |
搜索过滤命令,在前一个搜索命令的结果中进行按名称进一步过滤, 搜索命令 |grep [选项]过滤条件 查看命令 |grep [选项]过滤条件 –i 忽略大小写 -n 显示行号
|
压缩或者解压单个文件 gunzip .gz压缩包名----解压.gz压缩包,并且会把原来的.gz压缩包删除 压缩或者解压多个文件和目录: zip目录压缩包名称(通常使用.zip压缩包) 文件或者目录列表 eg: zip test.zip ret.txt test1.txt uzip 压缩包名(.zip) -d 解压目录名(绝对或者相对): 将指定的.zip压缩包解压到当前目录 压缩或者解压多个文件和目录 tar 选项 目标压缩包名称(xxx.tar.gz) 文件或者目录列表 tar –c [产生.tar.gz打包文件] -C[指定解压到哪个目录] tar -x[解压tar.gz文件] -v[显示详细信息] -f[指定压缩后的文件名] -z[打包同时压缩] 打包操作 tar –zcvf xxxxx.tar.gz 文件/目录列表 解压操作 tar –zxvf xxxx.tar.gz -C 解压目录名 |
文件或者目录与组基本介绍 在linux中,每一个用户都至少属于一个组,用户不能独立于组存在,一个用户可以属于多个组。 在文件或者目录看,linux系统中所有的用户分为三类: 所有者:默认情况下,文件或者目录的所有者都是创建者,可以修改; 在linux中,任何文件或者目录都有三种权限,读,写,执行 |
修改文件所有者---chown 新的所有者 文件名 或者 chown 新的所有者:新的组 文件名 Eg: chown zhangsan test.txt 修改文件或者目录的所在组: chgrp 新的组名 文件名 eg: chgrp dev test.txt |
对于文件而言, 读:可以读取、查看文件的内容,比如: cat、more、less、head、tail等 写:可以修改文件的内容,比如:vi 或者vim等 执行:如果文件是可执行文件,(.sh),可以直接运行。 对于目录而言: 读:可以读取、查看目录下边的内容,比如: ls等; 写:可以修改目录中的内容,创建子目录、创建文件、删除文件,重名文件或者目录 执行:可以进入该目录,比如cd |
任何一个文件或者目录都有三部分权限:所有者权限,同组用户权限,其他组用户权限。 第一部分权限:所有者权限,文件或者目录的所有者对该文件所有的权限,使用rwx分别表示读、写、执行的权限。比如:rwx,拥有读写执行的权限,r-x拥有读写的权限, 第二部分权限:同组用户权限,文件或者目录的同组用户对该文件所拥有的权限。 第三部分权限:其他组用户权限,文件或者目录的其他组用户堆顶该文件所拥有的权限。 查看文件或者目录的权限:ls -aul |
修改文件或者目录的权限: 用r、w、x分辨表示读写执行的权限; 用u、g、o、a分别表示所有者、同组用户、其他组用、所有用户修改权限 用+、-、= 分别表示给指定用户增加、减少、设置对应的权限。 Eg: chmod g-w,o+w t5.txt chmod g=rwx t5.txt Chmod 777 t5.txt chmod 655 t5.txt |
网络管理: 在linux的配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33 |
查看进程:ps ps 只会显示应用进程 ps –e 显示所有进程 ps -ef 以全格式的形式显示所有进程 关闭进程: 使用ps 命令查看进程的PID,使用命令kill -9 PID |
服务介绍,服务是支持linux运行的一些必要程序,本质上也是进程,叫守护进程。 操作服务: systemctl [start | stop | restart | reload | status | enable] 服务名称 开启、关闭、重启、重新加载、状态、开机启动 |
RPM软件安装包 RPM: 一种linux的软件包的打包和安装工具,它的操作的软件都是.rpm结尾。 Rpm 命令 查看当前系统中已经安装的rpm包:rpm –qa 卸载rpm软件包:rpm –e firefox 安装rpm软件包:rpm –ivh firefox.rpm YUM包管理:是一种 基于RPM的软件包管理工具,它能够从指定服务器上自动下载 RPM包并且自动安装,可以自动处理软件包之间的依赖关系。 查看当前系统中已经安装的rpm软件包,yum list installed | grep firefox 卸载rpm包:yum move firefox.x86_64 安装rpm包:yum install firefox 关闭防火墙:systemctl stop firewalld
|
cat /etc/shells 有多少个解释器 head -1 /etc/passwd 查看某文档倒数第一行,解释器是/bin/bash pstree 查看进程树 ctrl + L 清屏 ctrl + A 将光标移到行首 ctrl + E 将光标移动行尾 ctrl + C 终止操作 ctrl + D 一般为结束输入 ctrl + M 回车 ctrl + U 删除光标至行首的所有内容 ctrl + W 删除光标前面的一个单词(空格分隔) ctrl + S 挂起,冻结终端 ctrl + Q 解除冻结终端 |
标准的脚本构成 1、声明解释器 #!/bin/bash 2、注释脚本功能,变量含义,每个步骤要解决的问题 3、具体功能; bash test.sh 无需加权限可以直接执行脚本。 source test.sh 或者. test.sh 使用source命令执行脚本,用当前默认的bash进行执行 echo “123” > xx.repo 将引号内容输入到文件中(因为文件要给yum用,所以文件必须是repo结尾) yum –y install vsftpd &> /dev/null 将vsftpd脚本部署到/dev/null 路径下 &> 重定向 systemctl start vsftpd 启动脚本 |
Shell脚本
cat /etc/shells 存放的脚本的类型 echo $USER 查看当前用户 expr 3 \* 3 输出结果9 echo –n “Date is: ”;date +%F -n是不换行,然后输出结果日期 echo “Date is: `date +%F`” 和上面等价 fdisk –l 列出所有分区表 echo $? 返回0表示上一条命令执行成功,否则不成功 expr 7 + 1 &>/dev/null ; echo $? 将表示结果输出回收站,并判断是否执行成功 let sum=1+1 -> echo $sum 输出结果 free –m 内存的使用情况 used/total 使用率 yum -y install bc 安装计算器 echo "`echo "scale=2; 7/6"|bc`%" 复合命令 exit 10 以指定的状态退出。默认是最后一条命令执行成功与否的返回值退出 echo –e “\a\a” 解释: -e是转义字符,\a发出警告声 \t插入tab \n换行且光标移. 动行首 \f换行但光标仍旧停留在原来位置 \v与\f相同 \c最后不加上换行符 \b 删除前一个字符 echo –e “\033[背景色; 字体颜色 字符串 \033[属性效果” eg: echo -e "\033[40;37m 大 爷好 \033[0m" echo "1.5*10"|bc|cut –d '.' –f1 输出结果15 以小数点为分隔符,输出前1个字符 mkdir –v /tmp/abc 显示并创建 sh -x test_ping.sh 执行脚本打印输出代码以及结果 num=$((num+1)) 数值加1 grep –e 等价于 egrep eg: egrap “^ac$” file 精确匹配以a开头以c结尾的字符串 |
|||
两种执行方式:一种chmod 700 **.sh | ./**.sh 另一种 bash **.sh |
|||
特殊符号: ~ 根目录 - 上次目录 eg: cd ~ | cd - ! 历史执行命令记录 eg: !! !p 执行历史命令记录最后一条命令 history 查看所有的历史命令记录 !1082 执行1082行命令 $ 取变量中内容符 + - * / % 加减乘除取余 &后台执行 *shell中的通配符,匹配所有 ? 问号是shell中的通配符,匹配除回车以外的一个字符 ; 分号是shell中一行执行多个命令,命令之间用分号分割 | 管道符 上一个命令的输出作为下一个命令输入 cat filename | grep “abc” \ 转义字符 -n 无需换行 `` 反引号无需换行 ‘’ 单引号,脚本中字符串要用单引号引起来,但是不同于双引号的是,单引号不解释变量 “” 双引号,脚本中出现的字符串可以用双引号引起来 |
|||
>重定向 eg: cat haha > ./text.txt >>追加重定向内容输入 eg: cat haha >> ./text.txt < 统计 eg: wc < text.txt 输出结果4 4 20 4行4个单词20字节 << 追加输出 然后后面要用EOF或者END 两个包括 |
|||
新建分区 fdisk /dev/db 创建分区 然后n(新建分区);(p)显示分区信息;w(保存修改) |
|||
取消变量名 unset 变量名 定义全局变量 export eg: export name=’baidu’ |
|||
数组 ARRAY1=(‘A’ ‘B’ ‘C’ ‘D’) echo ${ARRAY1[2]} 查看数组 declare –a 访问数组中第一个元素 echo ${array1[0]} 访问数组中所有元素等同于echo ${array1[@]} 或者 echo $array1[*] 统计数组元素的个数 echo ${array1[@]} 获取数组元素的索引 echo ${!array1[@]} 从数组下标1开始 echo ${array1[@]:1} 从数组下标1开始,访问两个元素 echo ${array1[@]:1:2} 声明一个关联数组 declare –A ass_array1 eg:ass_array1=([name]=’baidu’ [age]=20) |
|||
运算符 -eq 等于 -gt 大于 -lt 小于 -ge大于或等于 -le小于或等于 -ne不等于 字符串比较运算符 ==等于 != 不等于 -n 检查字符串的长度是否大于0 -z 字符串的长度为0则为真 |
|||
文件与检查 -d 检查文件是否 存在且为目录 -e 检查文件是否存在 -f 检查文件是否存在且为文件 -r 检查文件是否存在且为可读 -s 检查文件是否存在且不为空 -w检查文件是否存在且可写 -x 检查文件是否存在且可执行 -o 检查文件是否存在且被当前用户拥有 -G 检查文件是否存在并且默认组为当前用户组 file1 –nt file2 检查file1是否file2新 file1 –ot file2 检查file1是否比file2旧 eg: test –d /tmp/dev; echo $? 判断当前目录是否存在 |
|||
If [ 条件 ] then 命令 fi |
If [ 条件 ] then 命令1 else 命令2 fi |
If [ 条件 ] then 命令1 elif then 命令2 else 命令3 fi |
|
If (( 数学表达式 ));then 命令行 else 命令行 fi 注(()) 可以存放数学表达式 |
if [[ 字符串匹配 ]];then 命令1 else 命令2 fi |
|
|
seq 是一个数数的命令 eg: seq 1 9 从1~9 输出; seq 9 -1 1 是从9~1输出,每次-1 |
|||
1、for直接赋值 for var in 1 2 3 4 5 6 2、使用命令赋值 for var in `seq 1 9` 3、赋值是一个字符串 for var in baism\'s is cool\, baism\'s is nice |
|||
for var in value1 value2 …. do Commands done eg: for var in `seq 1 9` do echo $var sleep 1 done |
for ((变量; 条件; 自增自减运算)) do 代码块 done Eg: for (( i=1;i<10;i++ )) do echo $i done |
||
for((;;)) do ping -c1 $1 &>/dev/null #ping的次数,-w是指执行的最后期限,&>/dev/null 是指标准输出和错误输出都输出到/dev/null上 if [ $? -eq 0 ] then echo -e "`date +"%F %H:%M:%S"`: $1 is \033[32m UP \033[0m" else echo -e "`date +"%F %H:%M:%S"`: $1 is \033[31m DOWN \033[0m" fi sleep 5 done |
|||
while [ condition ] do commands done
|
|||
until [ condition ] 条件为假开始执行,条件为真停止执行 do commands done |
|||
case 变量 in 条件1) commands1 ;; 条件2) commands2 ;; *) #其他 esac 注:每个代码块执行完毕要以;;结尾代表结束,case结尾要以倒过来写的esac来结束 |
case $n in |
||
特殊变量 $* :代表所有参数,其间隔为IFS内定餐数的第一个字元 $@: 与*星号类同,不同之处在于不参照IFS $#:代表参数变量 $: 执行上一个指令的返回值 $-: 最近执行的foreground pipeline的选项参数 $$: 本身的process ID $: 执行上一个背景执行的PID $_: 显示出最后一个执行的命令 $N: shell的第几个外传参数 |
|||
case 变量 in 条件1) commands1 ;; 条件2) commands2 ;; *) #其他 esac 注:每个代码块执行完毕要以;;结尾代表结束,case结尾要以倒过来写的esac来结束 |
case $n in |
函数名 () { |
function 函数名 { |
^ 瞄定开头^a以a开头默认瞄定一个字符 $ 瞄定结尾a$ 以a结尾 默认瞄定一个字符(^$同时使用精确匹配) ^$表示空行 . 匹配除回车以外的任意字符 () 字符串分组 [] 定义字符类,匹配括号中的一个字符 [^] 表示否定括号中出现字符类中的字符,取反 \ 转义字符 | 或 Eg:
限定符 * 某个字符之后加型号表示该字符不出现或出现多次 ? 与星号相似,表示该字符出现一次或者不出现 + 与星号相似,表示其前面字符出现一次或多次,但必须出现一次 {n,m} 某个字符之后出现,表示该字符最少n次,最多m次 {m} 正好出现m次
POSIX特殊字符 [[:alnum:]] 任何字母和数字
分解:25[0-5] -> 200-255 2[0-4][[:digit:]]->200-249 [0-1]{1}[0-9]{2}->0-99 等价于[01]?[[:digit:]][[:digiti:]]?
((25[0-5]|2[0-4][[:digit:]] | [01]?[[:digit:]][[:digit:]]?).){3} 类似 (x.){3} 第四段
|
|
Sed命令 是linux的一个外部命令,它是一个行(流)编辑器,非交互式的对文件内容进行增删改查的操作,使用者只能在命令行输入编辑命令,指定文件名,然后在屏幕上查看输出,它和文本编辑器有本质的区别 区别是:文本编辑器:编辑对象是文件 行编辑器:编辑对象是文件中的行 命令:set [options] ‘{command}[flags]’ [filename] 选项 -e<script>或--expression=<script>
以选项中指定的script来处理输入的文本文件。 -r 使用正则表达式 ! 取反(跟在模式条件后与shell有所区别) 命令: a :在匹配后面添加 c :更改 s :查找替换 eg: sed ‘a\hello world’ data 在data每行后面都添加hello world sed ‘3a\hello world’ data 在data第3行后面都添加hello world sed ‘2,4a\hello world’ data 在data第2-4行后面都添加hello world sed ‘/3 the/a\hello world’ data //开启匹配模式 a在后面添加 helloworld sed ‘i\hello world’ data 在data每行前面面都添加hello world sed ‘3d’ data 删除第三行 sed ‘s/dog/cat’ data 将data中的dog全部换成cat sed ‘3s/dog/cat’ data 将data中的第三行dog全部换成cat sed ‘c\hello world’ data 将data中的所有语句hello world sed ‘2,4c\hello world’ data 将data中的2-4行删除,添加一句hello world sed ‘y/abc/ABC’ data 将data中的abc中全部替换对应的字母ABC sed ‘p’ data 将data中语句打印两遍 |
|
|
|
Linux从入门到精通全套完整版(适合Linux入门、初学Linux小白)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili