1.目录结构介绍:
1. / 根目录,linux下有且只有一个根目录。所有东西都是从根目录开始。
2. /bin 可执行二进制文件的目录,如常用的命令ls,tar,cat等
/sbin 放置系统管理员使用的可执行命令,一般用户只能查看不能执行
3. /boot 放置linux系统启动时用到的一些文件,linux内核文件/boot/vmlinuz
4. /lib 系统使用的函数库的目录
5. /opt 给主机额外安装软件所摆放的目录
6. /proc 此目录的数据都在内存中,不占用磁盘空间。如系统核心、外部设备、网络设备等数据
7. /tmp 一般用户或正在执行的程序临时存放文件的目录
8. /usr unix system resource:存放只读的用户数据和应用程序(与系统运行无关的非关键程序),/user/lib存放应用程序,/usr/share存放共享数据等,/usr/bin用户命令如ls ,gcc,python,
/usr/sbin系统管理员命令
9./var 放置系统执行过程中经常变化的文件。/var/log 日志文件 /var/run 程序或服务启动后,其pid存放在该目录下
2.命令类
1.用户相关
useradd xxx,创建密码 passwd xxx,切换用户su xxx
2.ctrl组合键
ctrl+c 结束正在运行的程序 crtl+l 清屏 ctrl+a 当前光标到行首 crtl+e 当前光标到行尾
3.chmod
字母法:chmod u/g/o/a +/-/= rwx 文件
数字法:r=4,w=2,x=1
3.文件内容查看
1.cat\tac
cat从第一行开始显示文件内容,tac从最后一行开始显示
2.less\more
more一页一页的显示文件内容,less和more类似,但可以往前翻页
3.head\tail
head只看头几行,tail只看尾巴几行
head -n number 文件
4.nl
显示的时候,顺道输出行号
4.文件管理
1.输出重定向>
可将本应显示在终端上的内容保存到指定文件中,例:ls>test.txt
>输出重定向覆盖原来的内容,>>追加到文件尾部
2.管道 |
一个命令的输出可以通过管道作为另一个命令的输入,从管道左边写入到管道右边
3.清屏clear
快捷键 ctrl+l
4.切换工作目录cd
cd和cd~:切换到当前用户的主目录
cd.:切换到当前目录,cd..:切换到上级目录,cd-:进入上次所在目录
5.显示当前路径pwd
6.创建目录mkdir
新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限
mkdir [-mp] 目录名称
-m:指定被创建目录的权限 mkdir -m 711 test
-p:递归创建所需要的目录 mkdir -p /test1/test2/test3/test4
7.删除文件rm
参数 | |
-i | 以进行交互式方式执行 |
-f | 强制删除,忽略不存在文件,无需提示 |
-r | 递归删除目录下文件,删除文件夹时必须加此参数 |
8.建立链接文件ln
软链接:ln -s 源文件 链接文件
硬链接:ln 源文件 链接文件
软链接类似windows快捷方式
硬链接只能链接普通文件不能链接目录,两个文件占用相同大小硬盘空间(允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止‘误删’)
9.文本搜索:grep
grep [-选项] ‘搜索内容串' 文件名
-r:以递归的方式查找
-v:反向查找。打印出不符合条件行的内容
10.查找文件find
find path -option [ -print ] [ -exec -ok command ] {} \
-pern xxxx:权限为xxx的文件或目录,例:find /test -perm 755
-name,-iname:文件名称符合name的文件,iname忽略大小写
-type:查找某一类型文件,b 块设备文件,d目录,c字符设备文件,p管道文件,l符号链接文件,f普通文件
-exec 命令名{} \ ;({}和\中间有空格)
find /test/* -name "test11" -type f -exec rm -rf {} \;
11.拷贝文件cp
将给出的文件或目录复制到另一个文件或目录中
选项 | 含义 |
-a | 复制目录,保持文件属性 |
-f | 已经存在的目标文件而不提示 |
-i | 交互式,在覆盖目标文件之前提示用户确认 |
-r | 源文件为目录文件,则递归复制 |
-v | 显示拷贝进度 |
-l | 创建硬链接 |
-s | 复制成为符号链接 |
12.移动文件mv
用来移动文件或目录,也可以给文件或目录重命令
选项 | 含义 |
-f | 禁止交互式操作,如覆盖也不提示 |
-i | 交互式 |
-v | 显示移动进度 |
13.归档管理tar
把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据
参数 | 含义 |
-c | 生成归档文件,创建打包文件 |
-v | 列出归档接档的详细过程。显示进度 |
-f | 指定档案文件名称,f后面一定是.tar文件,必须放选项最后 |
-t | 列出档案中包含的文件 |
-x | 解开档案文件 |
14.gzip、bzip2
实现文件打包压缩。tar只负责打包但不压缩,用gzip压缩tar包后文件扩展名为xxx.tar.gz
gzip [option] file
选项 | 含义 |
-d | 解压文件 |
-r | 压缩文件 |
15.查看当前用户whoami
查看当前系统当前帐号的用户名,可通过/etc/passwd查看系统用户信息
16.查看登录用户who
用于查看当前所有登录系统的用户信息
-q或-count:只显示用户的登陆账号和登陆用户的数量
17.退出登录账户exit
图形界面:退出当前终端
ssh:退出登录账户
如果是切换后的登录用户,退出则返回上一个登录账户
18.添加用户账号useradd
参数 | 含义 |
-d | 指定用户登陆系统时的主目录 |
-m | 自动建立目录 |
-g | 指定组名称 |
19.修改用户usermod
修改用户所在组:usermod -g 用户组 用户名 例:usermod -g test abc
3.Linux管道命令
1.统计wc
选项 | 含义 |
-l | 统计行数 |
-w | 统计英文单词 |
-m | 统计字符 |
默认情况下,wc将计算指定文件的行数、字数、以及字节数
2.选取命令cut
选项 | 含义 |
-d | 后面接分割字符,与-f一起使用 |
-f | 依据-d的分割字符将一段信息分割为数段,-f取出第几段 |
-c | 以字符的单位取出固定字符区间 |
3.grep 行选取命令
选项 | 含义 |
-v | 显示不包含匹配文本的所有行 |
-n | 显示匹配行及行号 |
-i | 忽略大小写 |
-c | 计算找到的行数 |
grep [-cinv] '查找的字符串' filename
4.排序sort
参数 | 含义 |
-f | 忽略大小写的差异 |
-b | 忽略最前面的空格符部分 |
-M | 以月份的名字来排序 |
-n | 使用纯数字进行排序(默认文字形态排) |
-r | 反向排序 |
-u | unique,相同数据中,仅出现一行代表 |
-t | 分隔符,默认用tab键分割 |
-k | 以哪个区间来进行排序 |
sort [-fbMnrutk] [file or stdin]
5.去重uniq
选项 | 参数 |
-i | 忽略大小写字符的不同 |
-c | 进行计数 |
-u | 只显示唯一的行 |
6.文件切割split
将大文件分割成较小的文件,在默认情况下按照每1000行切割成一个小文件
split [-bl] file prefix
-b:以大小切割
-l:以行数切割
切割后文件的前缀
4.系统管理
1.ps查看当前系统进程状态
ps aux|grep xxx :查看系统中所有进程
ps -ef|grep xxx :可以查看子父进程之间的关系
a:列出带有终端的所有用户的进程
x:列出当前用户的所有进程,包括没有终端的进程
u:面向用户友好的显示风格
-e/-A:列出所有进程
-u:列出某个用户关联的所有进程
-f:显示完整格式的进程列表
ps aux显示信息说明:
USER:该进程是由哪个用户产生的
PID:进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:该进程占用虚拟内存的大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的。对于CentOS来说,ttyl是图形化终端,tty2-tty6是本地的字符界面终端。pts/0-255代表虚拟终端,?代表没有任何终端,后台服务
STAT:进程状态。R:运行,S:睡眠,T:暂停,Z:僵尸,s:包含子进程,l:多线程,+:前台显示
,<:当前进程优先级较高,N:当前进程优先级较低
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMMAND:产生此进程的命令
PID:1 ,1号进程,/usr/lib/systemd/syst,最初执行的初始用户进程,centos36是init进程
2,2号进程[kthreadd]守护进程,负责所有线程的调度和管理,始终运行在内核空间
-------------
如果想 查看进程的CPU、内存占用率,使用ps aux
如果想查看进程的父进程ID可以使用ef
2.kill终止进程
kill [-signal] pid :根据进程号杀死进程
killall 进程名称 :通过进程名杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
-9:表示强迫进程立即停止
3.netstat显示网络状态和端口占用信息
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
netstat -anp|grep 进程号:查看该进程网络信息
netstat -nlp|grep 端口号:查看网络端口占用情况
-a:显示所有正在监听(listen)和未监听的套接字(socket)
-n:直接使用ip地址,而不通过域名服务器
-l:仅列出在监听的服务状态(显示监控中的服务器的socket)
-p:表示显示哪个进程在调用
-c/-continuous:持续列出网络状态
-C/-cache:显示路由器配置的快取信息
-t/-u:显示TCP/UDP传输协议的连线状况
常用:netstat -nltp
4.查看当前日历cal
cal用于查看当前日历,-y显示整年日历
5.显示或设置时间date
设置时间格式 :date [MMDDhhmm[[CC]YY][.ss] +format
MM:月,DD:天,hh:小时,mm:分,CC:年的前两位,YY:年的后两位,ss:秒
显示时间格式 :(date '+%y,%m,%d,%H,%M,%S')
6.动态显示进程top
在运行后,在指定的时间间隔更新显示信息。-d参数可以指定显示信息更新的时间间隔
在top命令执行后,可以按下按键得到对显示的结果进行排序
按键 | 含义 |
M | 根据内存使用量排序 |
P | 根据CPU占有率排序 |
T | 根据进程运行时间长短排序 |
U | 根据后面输入的用户名来筛选进程 |
K | 根据后面输入的PID杀死进程 |
q | 退出 |
h | 获得帮助 |
6.关机重启reboot,shutdown,init
reboot:重新启动操作系统
shutdown -r now:重启启动操作系统,shutdown会给别的用户提示
shutdown-h now/20:25/+10:立即关机/今天20:25关机/十分钟后关机
init 0:关机
init 6:重启
7.检测磁盘空间df
检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用
选项 | 含义 |
-a | 显示所有文件系统的磁盘使用情况 |
-m | 以1024字节为单位显示 |
-k | 以KBytes的容量显示各文件系统 |
-t | 显示各指定文件系统的磁盘空间使用情况 |
-T | 显示文件系统类型 |
-h | 以容易理解的格式输出文件系统大小 |
8.检测目录所占磁盘空间du
统计目录或文件所占磁盘空间的大小,该命令的执行结果与df类似,du更侧重于磁盘的使用状况
选项 | 含义 |
-a | 递归显示指定目录中各文件和子目录中文件占用的数据块 |
-s | 显示指定文件或目录占用的数据块 |
-b | 以字节为单位显示磁盘占用情况 |
-l | 计算所有文件大小,对硬链接文件计算多次 |
9.查看或配置网卡信息ifconfig
修改ip:sudo ipconfig ens33 192.168.40.10
5.定时任务执行crontab\at
1.crontab
允许用户在固定时间或间隔执行指定的命令或脚本
命令 | 说明 |
crontab -e | 编辑当前用户的定时任务 |
crontab -l | 列出当前用户的所有定时任务 |
crontab -r | 删除当前用户的所有定时任务 |
crontab -u <username> -e | 编辑指定用户的任务(需root权限) |
*分钟 *小时 *日 *月 *星期几 command_to_execute
示例:
* * * * * 每分钟执行一次
0 * * * * 每小时的0分执行
*/5 * * * * 每五分钟执行一次
0 1 1,15 * *每个月1,15号1:00执行一次
0 5 * * 1 /bin/rm -rf /tmp/* 每周一5:00删除tmp下文件
2.at
at [选项] <时间>
常用选项:
-f:<脚本文件> 指定要执行的脚本
-m:任务完成后发送邮件给客户(即使无输出)
-l:列出当前用户的待执行任务=atq
-d<任务ID>:删除指定任务=atrm
示例1:echo "shutdown -h now" |at 22:30 定时关机
示例2:at -f /path/to/backup.sh now + 30 minutes 30分钟之后运行脚本
6.Shell:
shell是一个命令行解释器,能接受应用程序/用户命令,然后调用操作系统内核
1.Shell脚本入门
1.linux提供的Shell解释器有:
2.bash和sh的关系
3.Centos默认的解析器
4.脚本格式
脚本以#!/bin/bash开头(指定解析器)
5.第一个shell脚本
touch helloworld.sh
vim helloworld.sh
#!/bin/bash
echo "Hello World"
脚本的常用执行方式:
1.采用bash或sh+脚本的绝对/相对路径(不用赋予脚本安先生兄弟色友+x权限)
sh ./helloworld.sh
bash home/chenzijie/test/helloworld.sh
2.采用输入脚本的绝对路径或相对路径脚本(必须具有可执行权限)
chmod +x helloworld.sh
./helloworld.sh或者home/chenzijie/test/helloworld.sh
3.脚本路径前加上“.”或source
source helloworld.sh . helloworld.sh
前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
第三种加“.”或者source方式使脚本内容在当前shell里执行,而无需打开子shell
开不开子shell的区别在于,环境变量的继承,如在子shell中设置的当前变量,父shell不可见。
6.变量
1.系统预定义变量
常用系统变量:$HOME $PWD $SHELL $USER等
查看系统变量的值 echo $HOME
显示当前shell中所有变量 set
2.自定义变量
定义变量:变量名=变量值
撤销变量:unset 变量名
声明静态变量:readonly变量,注意:不能unset
变量定义规则:1.可以由字母,数字和下划线组成,不能以数字开头,环境变量建议大写
2.等号两侧不能有空格
3.在bash中,变量默认类型为字符串类型,无法直接进行数值运算
4.变量的值如果有空格,需要使用双引号或单引号括起来
export 变量名,父shell里面定义的变量导出变成全局变量
3.特殊变量
$n(n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数用大括号包含${10})
$#(获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
$*(这个变量代表命令行中所有参数,$*把所有的参数看成一个整体)
$@(这个变量代表命令行中所有参数,$@把每个参数区分对待)
$?(最后一次执行的命令的返回状态。如果变量值为0,说明上一条命令正确执行)
7.运算符
基本语法:$((运算式))或$[运算式]
8.条件判断
test condition 或 [ condition ](condition前后要有空格)条件非空即为true
常用判断条件:
-------两个整数比较:-eq等于,-ne不等于,-lt小于,-gt大于,-le小于等于,-ge大于等于
如果是字符串之间的比较,用等号“=”判断相等,“!=”判断不等
-------按照文件权限进行判断
-r读,-w写,-x执行
-------按照文件类型进行判断
-e文件是否存在,-f文件存在且是常规文件(file),-d文件存在且是一个目录(directory)
(1)23是否大于2 [ 23 -ge 2 ]
(2)helloworld.sh是否有写权限 [ -w helloworld.sh ]
(3)/home/chenzijie/test/test.sh目录中文件是否存在 [ -e /home/chenzijie/test/test.sh ]
(4)多条件判断(&&前一条命令执行成功,才执行后一条,||上一条失败执行下一跳)
9.流程控制
9.1if判断
单分支:
10.read读取控制台输入
read (选项) (参数)
选项:-p:指定读取值时的提示符
-t:指定读取值时等待的时间(秒),不加表示一直等待
参数:变量:指定读取值时的变量名
11.函数
11.1系统函数
basename [string/pathname][suffix] basename命令会删除掉所有的前缀包括最后一个/字符,然后将字符串显示出来
basename可以理解为取路径里的文件名称
suffix为后缀,如果suffix被指定了,basenmae会将pathname或string中的suffix去掉
dirname 文件绝对路径,从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录的部分),可以理解为获取文件路径的绝对路径名称
11.2自定义函数
[function] funname[()] []代表可选
{
Action;
[return int;]
}
必须在调用函数前声明函数,shell是逐行运行,不像其它语言一样先编译
函数返回值,只能通过$?系统变量获得,可以显示加;return返回,如果不加,将以最后一条命令运行结果作为返回值,return后跟数值n(0-255)