简介
文件目录
目录结构
Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的
Boot:存放一些Linux启动时需要用到的核心文件
Dev:该目录主要存放的是外接设备,例如:U盘、光盘。其中的外接设备不能直接使用,需要先挂载。
Etc:该目录放一些配置文件
Home:存放除了root以外的其他用户的家目录
Lib:是library的缩写,主要存放一些动态库,供应用程序调用
Root:该目录是root用户的家目录
Sbin:全程super binary,该目录存储一些可执行的二进制文件,但是必须要有super权限的用户才能执行
Tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
Usr:存放用户自己安装的软件。类似于windows下的program file
Var:存放的程序/系统的日志文件的目录
Media:自动挂载一些Linux系统自动识别的设备,比如U盘、光驱
Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。
Usr:
主要存放一些用户的应用程序及文件,类似于Windows下的program file
bin 存放系统用户所使用的应用程序
sbin 存放超级用户所使用的高级程序及系统守护程序
src 内核源代码默认的放置目录
history:查看用过的历史命令
帮助文档
man 命令:查看命令文档
man [选项] 命令
-f: 显示给定关键字的简短描述信息
-k:根据关键词搜索帮助文档
-w:显示手册文件所在位置
info命令:
info 命令:查看命令的文档
whatis:查询一个命令执行什么功能,并把查询结果打印到终端上,相当于man -f
read:输入命令
read -p "input passwd" -s passwd
echo $passwd
read -p "input a word" -t 5 number
#延迟5秒,没有输入则自动退出
read -p "input a word" -n 5 word
#从输入中读取5个字符
账号管理
基本操作:
useradd [选项] 用户名 //创建用户
passwd [选项] 用户名 //用户口令
usermod 选项 用户名 //修改用户
userdel [选项] 用户名 //删除用户
用户组:
groupadd [选项] 用户组名
groupmod [选项] 用户组名
groups 用户名 //查询用户所属用户组名
groupdel 用户组名
gpasswd [选项] 组名//用于将一个用户添加或者从组中删除
选项:
-a:向组GROUP中添加用户USER
-d:从组GROUP中添加或删除用户
-h:显示此帮助信息并推出
-Q:要chroot进的目录
-r:remove the GROUP's password
-R:向其成员限制访问组GROUP
-M:向其成员限制访问组GROUP
-A:设置组的管理员列表
显示当前登录用户:
切换用户:
查看用户信息:
提高普通用户的操作权限:
进程管理
top //实时监控进程的信息
top -c //实时显示所有的进程信息(显示完整命令)
top -p PID//实时显示指定进程的信息
ps //显示当前正在运行的进程信息
ps -A//显示系统中所有的进程信息
ps -ef//显示系统中所有的进程信息(完整信息)
ps -u 用户名//有效用户的相关进程
-x :一般与a参数一起使用,可列出较完整的信息
ps aux # 查看系统所有的进程数据
ps ax # 查看不与terminal有关的所有进程
ps -lA # 查看系统所有的进程数据
ps axjf # 查看连同一部分进程树状态
kill [-s <信息名或编号>][程序] 中断执行中的程序
kill [-l <信息编号>]
-l <信息编号>:若不加信息编号选项,则-l参数会列出全部的信息名称
直接加程序的PID或者PGID,也可以是工作编号
-u 用户名:杀死这个用户中所有进程
kill 进程PID //杀死指定进程
kill -9 进程PID //彻底杀死指定进程,9是一个signal,系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
kill -9 $(ps-ef|grep 用户名) //杀死指定用户的所有进程
killall -u 用户名 //杀死指定用户所有进程
kill(不加 -* 默认kill -15)命令
系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,将会发生以下事情:
程序立刻停止
当程序释放相应资源后再停止
程序可能仍然继续运行
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应),也就是说,SIGTERM有可能是会被阻塞的。
关机
shutdown //不同的版本会有所差异
shutdown -h now //立马关机
shutdown +1 "警告信息" //一分钟之后关机
shutdown -r +1 "警告信息" //一分钟之后重启
shutdown -c //取消当前关机操作
文件权限
目录管理
ls:
ls[参数选项] 目录名称 //列出目录里的内容
选项参数:
-a:显示所有文件或目录
-d:仅列出目录本身,而不是列出目录内的文件数据(常用)
-l:长数据串列出,包含文件的属性与权限等等数据(常用)
-h:把文件大小以K、M、G的更容易观察的形式展示
-t:按时间序列出文件
-r:以相反的次序列出文件
-R:递归列出所有子目录
-S:根据文件大小排序
-F:在列出的文件名称后加一符号
例
ls -ls >a.txt
pwd:
pwd //显示当前所在的目录
pwd -P//查看当前所在目录
cd:
cd [相对路径或绝对路径] //切换目录
cd - #移动到上一次的目录
mkdir:
mkdir 文件夹名 //创建目录
mkdir -p 文件夹名/.../文件名 //创建多级目录
mkdir -m 权限数字 文件夹名 //创建文件夹并给一个初始权限
mkdir dir{5..7} #创建dir1……dir7
mkdir -p dir1/dir2/dir3
rmdir:
rmdir [-p] 文件夹名字 //删除空的文件夹,不是空白的不能删除
rmdir 文件夹名 //删除目录
rmdir -p 文件夹名/.../文件名 //删除文件,如果删除后目录为空也一块将目录删除
rm:
rm [选项] 文件/目录 //删除文件或者目录
选项参数:
-i 删除前逐一询问确认
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认
-r 将目录及以下之档案亦逐一删除
cp:
cp [选项] 数据源 目的地 //文件复制
选项参数:
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容
-b:如果目标有该文件,就先备份一下原文件再去覆盖
-d:复制时保留链接,这里所说的链接相当于Windows系统中的快捷方式
-f:覆盖已经存在的目标文件而不给出提示
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答“y”时目标文件将被覆盖
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r/R:若给出的源文件是一个目录文件,此时将复制该目录下的所有子目录和文件
-l:不复制文件,只是生成链接文件
例:
cp aaa/a.txt ccc //将aaa文件夹中的a.txt文件拷贝到ccc文件夹中
cp -r aaa/* ccc //将aaa文件夹中所有内容(包括文件和文件夹)拷贝到ccc文件夹中
mv:
mv [选项] 数据源 目的地
选项参数:
-i:若指定目录已有同名文件,则先询问是否覆盖旧文件
-f:若指定目录已有同名文件,则覆盖不显示
-b:当文件存在时,覆盖前为其创建一个备份
-u:当源文件比目标文件新,或者目标文件不存在时,才执行移动操作
chgrp:
chgrp -v root aaa //将aaa的属组改为root
chown:
chown 属主名 文件名 //更改属主
chown [参数选项]属主名:属组名 文件名 //更改属主和属组
选项参数:
-R 处理指定目录以及其子目录下的所有文件
例:
chown root aaa //将aaa的所有者改成root
chown root:root bbb//把bbb的所有者和用户组改为都改为root
chown -R root:root aaa //将aaa文件夹和里面所有的属主和属组改为root
chmod:修改属主、属组、其他用户的权限
chmod [参数选项] 数字权限|符号权限 文件或目录
参数选项:
-c:若该档案权限确实已经更改,才显示其更改动作
-f:若该档案权限无法被更改也不要显示错误讯息
-v:显示权限更改的详细资料
-R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help:显示辅助说明
--version:显示版本
例:
chmod -R 770 aaa
chmod -R u=rwx,g=rwx aaa
chmod ugo+rwx aaa
文件操作练习
useradd java
useradd erlang
useradd golang
groupadd dev-group
gpasswd -a java dev-group
gpasswd -a erlang dev-group
gpasswd -a golang dev-group
grep 'dev-group' /etc/group
mkdir -p work
chgrp -R dev-group work
chmod -R 770 work
文件管理
touch:
touch [参数选项] 文件名 //如果文件不存在就创建文件,如果存在就修改时间属性
参数选项:
-a:改变文件的读取时间记录
-m:改变文件的修改时间记录
-r:使用参考文件的时间记录
-c:不创建新文件
-d:使用指定字符串表示时间式
-t:设定文件的时间记录,格式与date命令相同
--no-create:不创建新文件
例:
touch a.txt //创建a.txt
touch a{1..10}.txt //批量创建,创建a1~a10.txt
stat a.txt //查看文件的详细属性
touch file.txt -r ref_file.txt
stat file.txt //file.txt跟ref_file.txt的属性一模一样
vi/vim编辑器:
1.只能是编辑文本内容,不能对字体、段落进行排版
2.不支持鼠标操作
3.没有菜单
4.只有命令
vim:是从vi发展出来的一个文本编辑器。
代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用
简单的来说:
vi是老式的文字处理器,不过功能已经很齐全了。但是还是有可以进步的地方。
vim则可以说是程序开发者的一项很好用的工具。
vim 文件名
如果文件已经存在,会直接打开该文件
如果文件不存在,打开一个临时文件,在保存且退出后,就会新建一个文件
vim 文件名+行数 //查看文件并定位到具体行数
rename:更改文件名
rename 's/old-name/new-name/' files
原字符串:将文件名需要替换的字符串
目标字符串:将文件名中含有的原字符串替换成目标字符串
文件:指定要改变文件名的文件列表
文件查看:
cat:
cat a.txt //查看a.txt的内容
cat -n a.txt //查看a.txt的内容(加入行号)
文件合并:
cat 文件1 文件2 …… >保存的文件
head:从头开始查找文件的若干行
tail:从后开始查找文件的若干行
head file
head -n 2 file
#查看file的前2行
head -n -2 file
#从头展示到倒数第2行
tail file
tail -n 2 file
#查看file的后2行
tail -n +2 file
#从第二行开始展示到最后一行
cat file | head -n -2 | tail -n +2
#展示文件从第二行开始到倒数第二行
提取文件名:
basename /etc/passwd
basename -a path1 path2
#提取后删除后缀
basename /etc/sysctl.conf .conf
提取目录路径名:
dirname /usr/bin/cat
less:
less [参数选项]文件
例:
less a.txt //查看a.txt的内容
less -N a.txt //查看a.txt的内容(加入行号)
对查询结果的操作:
1.全屏导航
ctrl+F - 向前移动一屏
ctrl+B - 向后移动一屏
ctrl+D - 向前移动半屏
ctrl+U - 向后移动半屏
2.单行导航
j - 向前移动一行
k - 向后移动一行
3.其他导航
G - 移动到最后一行
g - 移动到第一行
q/ZZ - 退出less命令
tail:
tail [参数选项]文件 //查看文件的最后部分
参数选项:
-数字:显示文件的最后几行
-f:循环读取文档最后10行
-n<行数>:显示文件的内容,从指定行至文件末尾
-c:显示最后指定的字节数
例:
tail -3 test.txt //显示文件最后3行
tail -f test.txt //动态显示最后10行
tail -4f test.txt //动态显示最后4行
tail -n +2 test.txt //显示文件test.txt的内容,从第2行至文件末尾
tail -c 45 test.txt //显示最后一些字符
wc:
wc [参数选项] 需要统计的文件路径
参数选项:
-l:表示lines,行数
-w:表示words,单词数 依照空格来判断单词数量
-c:表示bytes,字节数
chattr:对文件进行保护
chattr [-RVf] +-= files
-R:递归处理目录下的所有文件
-v:设置文件或目录版本
-V:显示指令执行过程
+:开启文件或目录的该项属性
-:关闭文件或目录的该项属性
=:指定文件或目录的该项属性
chattr +i file #防止某个关键文件被修改
chattr -i file #解锁
chattr +a file #只允许文件追加内容
chattr -R +i dir #对一个目录中的所有文件添加限制
lsattr file #查看文件属性
grep:
*代表多个字符,?代表一个字符,[0-9]代表0-9区间,^word以word开头
grep [参数选项] 关键字 文件 //根据关键字,搜索文本文件内容
参数选项:
-n:把包含关键字的行展示出来
-i:把包含关键字的行展示出来,搜索时,忽略大小写
-v:把不包含关键字的行展示出来
与ps一块使用:
ps -ef|grep 关键字 //查找指定的进程信息,包含grep进程
ps -ef|grep 关键字|grep -v "grep" //查找指定的进程信息,不包含grep进程
ps -ef|grep -c sshd //查找进程个数
echo:
echo 字符串 //展示文本
echo 字符串>文件名 //将字符串写到文件中(覆盖文件中内容)
echo 字符串>>文件名 //将字符串写到文件中(不覆盖文件中内容)
cat 不存在的目录 &>> error.log //将命令的失败结果追加error.log文件的后面
awk:
awk是一种处理文本文件的语言,是一种强大的文本分析工具
例:
cat a.txt|awk '/zhang|li/' //查询a.txt中包含zhang和li字符串的行
cat a.txt|awk -F ' ' '{print $1,$2,$3,$4}' //将文件按照空格符分割后,打印1、2、3、4列
cat a.txt|awk -F ' ' '{OFS="==="}{print $1,$2,$3,$4}'//用===来间隔1、2、3、4列
cat a.txt|awk -F ' ' '{print toupper($1)}' //将第一段进行大写
cat a.txt|awk -F ' ' '{print tolower($1)}' //将第一段进行小写
cat a.txt|awk -F ' ' '{print len($1)}' //输出字符数
cat a.txt|awk -F ' ' 'BEGIN{}{total=total+$4}END{print total,NR}' //将每一行的第四列加起来打印,并打印总人数
sed:文档的快速增删改查
sed [选项] [sed内置命令字符] [输入文件]
选项:
内置命令字符:
匹配范围:
sed 's/stringa1/stringa2/g' example.txt #将example.txt文件中的 "string1" 替换成 "string2"
sed '/^$/d' example.txt #从example.txt文件中删除所有空白行
sed -i '1i\a new line' file #从第一行前面插入a new line
sed -in '2,5s/^/#/p' file #从第二行到第5行加注释
sed -in '/^$/d' file #删除空行
sed -in '1,3d' file #删除1到3行
sed -i '/#/d' hello.txt #删除带#的行
ln:软连接:
ln -s 目标文件路径 快捷方式路径
例:
ln -s aaa/bbb/ccc/ddd/eee/a.txt a.txt //创建快捷方式到当前文件夹
find:
find [参数选项]<指定目录><指定条件><指定内容> //在指定目录下查找文件
参数选项:
-name filename 查找名为filename的文件
-ctime -n或+n 按时间来查找文件,-n指n天以内,+n指n天以前
例:
find . -name "*.txt" //查找当前目录下的txt文件
find . -ctime -1//最近1天之内操作过的文件
find / -name "*.txt" //查找全盘中的txt文件
find / -user user1 #搜索user1的文件和目录
sort:排序文件内容
sort file1 file2 排序两个文件的内容
sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
sort file1 file2 | uniq -u 删除交集,留下其他的行
sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)
comm:删除公共部分内容
comm -1 file1 file2 比较两个文件的内容只删除 ‘file1’ 所包含的内容
comm -2 file1 file2 比较两个文件的内容只删除 ‘file2’ 所包含的内容
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分
gzip:压缩文件
gzip[参数选项][文件] //压缩文件,压缩完源文件消失
例:
gzip a.txt //压缩文件
gzip * //压缩当前目录下所有文件
gzip -dv * //解压当前文件并列出详细信息
gunzip:解压文件
gunzip[参数][文件] //解压文件
tar:
本身不具有压缩功能,他是调用压缩功能实现的
tar [必要参数][选择参数][文件] //打包、压缩和解压(文件/文件夹)
tar -cvf 打包文件名 文件名 //打开文件并指定打包之后的文件名
tar -zcvf 压缩文件名 文件名/文件夹名 //压缩文件或者文件夹并指定压缩文件名
tar -ztvf 压缩文件名 //查看压缩文件中有哪些文件
tar -zxvf 压缩文件名 //解压
参数选项:
-c 建立新的压缩文件
-v 显示指令执行过程
-f<备份文件> 指定压缩文件
-z 通过gzip指定处理压缩文件
-t 列出压缩文件的内容
-x 解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
例:
tar -cvf a.tar a.txt //将a.txt打包为a.tar
tar -zcvf b.gz b.txt //将b.txt压缩打包成b.gz
tar -zxvf b.gz //将b.gz解压
zip:
zip是一个广泛的压缩程序,文件将它压缩后会产生具有“.zip”扩展名的压缩文件
zip [必要参数][选择参数][文件] //压缩
参数选项:
-q 不显示指令执行过程
-r 递归处理,将指定目录下的所有文件和子目录一并处理
例:
zip -q -r aaa.zip aaa //将aaa.zip压缩成aaa
unzip:
unzip [必要参数][选择参数][文件] //解压
参数选项:
-l显示压缩文件内所包含的文件
-d<目录>指定文件解压缩后所要存储的目录
例:
unzip -l aaa.zip //显示aaa.zip中的文件
unzip -d bbb aaa.zip //将aaa.zip解压到bbb文件夹
bzip2/bunzip2:
使用新的压缩算法,压缩后的文件比原来的要小,但是花费时间变长。
若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始文件。
。
bzip2 [参数选项] 文件 //压缩
bunzip2[参数选项] 文件 //解压
dd:文件拷贝
dd if=输入文件名 of=输出文件名
if=文件名:输入文件名,缺省为标准输入。即指定源文件。
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数
sed:根据正则表达式对文件进行操作
a 在当前行后添加一行或多行
c 用新文本修改(替换)当前行中的文本
d 删除行
i 在当前行之前插入文本
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令处理
q 结束或退出sed
! 取反
s 用一个字符串替换另一个字符串
s 替换标识
g 全局替换
i 忽略大小写
r 从文件中读
w 将行写入文件
y 将字符转换成另一字符(不支持正则表达式)
h 把模式空间里的内容复制到暂存缓冲区
-e 允许多项编辑
-f 指定sed脚本文件名
-n 取消默认的输出
-i inplace 直接修改
-r 支持扩展元字符
示例:
# sed '' passwd (这里将passwd中的内容放到模式空间处理,因为没有执行任何命令,所以原封不动的返回值)
# sed 'd' passwd (读到每一行都执行删除的操作,所以不返回任何值)
# sed '1,9d' passwd (读1-9行的内容,然后删除,最后输出的就只剩第十行)
# sed -r 'p' passwd (内容会重复两次,因为到模式空间处来会打印一次。然后print会再打印一次)
# sed -rn 'p' passwd (以静默的方式显示,进入模式空间被命令处理过的可以输出,原先内容就不输出)
# sed -rn '/root/p' passwd (打印带root的行)
# sed -rn '/^[rot]/p' passwd (打印包含r,o,t开头的行)
# sed -rn '/^[^root}/p' passwd (打印不包含以r,o,t开头的行)
# sed -r 's/root/alice/' passwd (替换root为alice,只替换了每行第一个)
# sed -r ’s/root/alice/g‘ passwd (全局替换,都改)
# sed -r 's#/sbin/nologin#/bin/ok#' passwd (使用#号或者@也可以,一般是带有/的 替换目录之类的操作,看起来更清晰)
网络管理:
ifconfig:
ifconfig [参数选项] //显示或配置网络设备的命令
例:
ifconfig //显示激活网卡信息
ifconfig ens37 down //关闭网卡
ifconfig ens37 up //启动网卡
ifconfig ens37 192.168.23.199 //配置ip地址
ifconfig ens37 192.168.23.133 netmask 255.255.255.0 //配置ip地址和子网掩码
ping:
ping [参数选项] //检测是否与主机连通
参数选项:
-c<完成次数>设置完成要求回应的次数
netstat:显示网络状态
netstat [参数选项] //显示网络状态
参数选项:
-a 显示所有连线中的Socket
-n 禁止使用域名解析功能。链接以数字形式展示,而不是通过主机名或域名形式展示
-o 显示计时器
-i 显示网卡列表
磁盘管理
lsblk:
lsblk //列出磁盘的使用情况
lsblk -f //显示系统情况
df:
df[参数选项] //显示目前在linux系统上,硬盘的使用情况
参数选项:
--total 显示所有信息
-h 换算成KB,MB,GB等形式进行展示(方便阅读)
mount/unmount:
“挂载点”的目录需要以下几个要求:
目录事先存在,可以用mkdir命令新建目录;
挂载点目录不可被其他进程使用到;
挂载点下原有文件将被隐藏。
例:
mkdir 文件夹 //创建文件夹
mount -t auto /dev/cdrom 文件夹 //开始挂载
unmount 文件夹 //卸载
losetup:可以将文件或者block device与loop device关联、分离以及查询loop device的当前状态。循环设备可把文件虚拟成块设备(block device),借以模拟整个文件系统,让用户能使其为硬盘光驱或软盘等设备、并挂载(mount)来使用。losetup可用于文件块或者loop device的连接或者设置。
losetup [ -e encryption ] [ -o offset ] loop_device file
losetup [ -d ] loop_device
-a 显示所有循环设备的状态。
-d 卸除设备。
-e <加密选项> 启动加密编码 。
-f 寻找第一个未使用的循环设备。
-o <偏移量>设置数据偏移量,单位是字节。
mkfs:磁盘格式化
mkfs [tab] [tab]:按下两下tab键查看系统支持哪些文件系统的格式化功能
mkfs -t [文件系统格式名] 等同于mkfs.文件系统格式名
mkfs -t xfs 与 mkfs.xfs相同
mkfs.xfs:创建xfs文件系统
参考地址
du:计算出单个文件或者文件夹的磁盘空间占用
查看占用磁盘空间最大的前10个文件或者文件夹
du -a /var | sort -n -r | head -n 10
下载软件
yum:
yum -y install tree
yum remove tree
yum list tom*//查找名字以tom开头所有的软件
yum源:
面试题
linux命令,一个日志文件中,有很多行http请求日志,每一行数据是这样的[姓名 状态码 账号],问如何获取状态码为404的用户账号。
grep " 404 " logfile.log | awk '{print $3}'
首先使用grep来过滤出包含“404”的行,然后使用awk来提取每行的第三列(即账号),并打印输出。