作者刚参加工作,处于学习笔记阶段,如有错误欢迎指点,共同进步,谢谢
🐯前言一:
Linux文件目录结构
cd /
进入根目录
- /bin:Binary的缩写,存放命令的目录
- /sbin:存放系统管理员使用的系统管理程序
- /boot:存放的启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件
- /proc:虚拟目录,是系统内存的映
- /dev:磁盘等硬件用文件的形式存储的目录
- /mnt:需要挂载的目录,习惯在此创建
- /lib:系统开机所需要的动态链接共享库,类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库
- /etc:系统管理所需要的配置文件和子目录
- /srv:service 的缩写,该目录是存放一些服务启动之后需要提取的数据
- /usr:用户应用程序和文件放在这个目录下
- /var:存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,例如:日志文件
- /root:系统管理员目录,超级权限者的用户目录
- /home:普通用户的主目录,普通用户的根目录都在里面存放
- /opt:额外安装的软件可以安装在此目录,考虑磁盘存储,最好先创建目录并挂载磁盘后安装软件
- /tmp:临时目录
- /lost+found:当系统非法关机后,这里就存放了一些文件
- 其它
🐯前言二:
Linux命令可以通过help 命令
或者 man 命令
的方式查看其用法
一、基础命令
1. 查看当前目录文件夹/文件:ls
#查看当前目录,按行按类别显示
ls -l
ll #简写
#查看隐藏文件
ll -a
#按文件日期时间先后顺序显示
ll -rt
2. 显示当前目录全路径:pwd
#查看当前目录
pwd
3. 切换目录:cd
#切换目录
cd /tmp
#返回上一次的目录
cd -
4. 创建目录:mkdir
#创建目录
mkdir test
#递归多级创建
mkdir -p /tmp/test1/test2
5. 创建文件:touch
#创建文件
touch test.csv
touch /tmp/test.csv
6. 复制文件:cp
#复制文件
cp test1.csv test2.csv
#递归复制一个目录所有文件夹和文件到另一个目录
cp -r /tmp/test1/* /opt/test2/
7. 移动/重命名文件:mv
#移动文件到另一个目录
mv /tmp/test1.csv /opt/
#文件目录同样适用且默认目录树素有目录都被移动
mv /tmp/test1/ /opt/
#重命名文件:在原来的目录下覆盖原文件
mv test1.csv test2.csv
8. 删除文件/文件夹:rm (慎用!!)
#删除文件: 需要再次确认是否删除
rm test.csv
#删除文件夹:需要递归再次确认每一个 文件夹/文件 是否删除
rm -r test1/
#强制删除文件
rm -f test.csv
#强制删除文件夹(不推荐删除可以使用mv命令更换名称,以保留一份副本,以防万一)
rm -rf /tmp/test/
rm -rf ./test/
9. 查看文件内容:cat/head/tail/less/more
## cat
# 查看文件内容,打印在当前窗口
cat test.csv
cat /tmp/test.csv
#配置管道 | 和 grep 命令过滤出所需关键字的行
cat test.csv | grep "篮球"
### head
#查看前11行数据
head -11 test.csv
haed test.csv #默认前10行
### tail
#查看后11行数据
tail -11 test.csv
tail test.csv #默认后10行
#实时查看后面插入文件的数据,并打印在前台
tail -f test.csv
### less和more
less test.csv
more test.csv
##区别:
#less在新的窗口打开文件并只会打开一页的内容,通过翻页可继续打开其它页,速度快
#more在前台打开文件全部内容,也可翻页
10. 查找文件:find
#查看/tmp目录下所有test.csv文件
find /tmp -name test.csv
#不区分大小写(-iname),查看/tmp目录下所有test.csv文件
find /tmp -iname test.csv
#包含test
find /tmp -name *test*
#开头test,且后有两个字符
find /tmp -iname test??
#大于100M
find /tmp -size +100M
#大于100M,小于200M (-a相当于and,-o相当于or)
find /tmp -size +100M -a -size -200M
#所有者为twy的用户
find /tmp -user twy
#所有组为twy的用户
find /tmp -group twy
#5分钟内被修改过内容(访问时间:-amin)(文件属性:-cmin)(文件内容:-mmin)
find /tmp -mmin -5
#指定深度
find /tmp -maxdepth 1 -name "*.ok"
#将结果按ls -l方式显示
find /tmp -name *test* -exec ls -l {} \;
#查找大于100M的文件
find /tmp -size +100M
11. 建立链接:ln
#相当于windows里的快捷方式
ln 源文件 目标文件
#生成一个名为test02.csv,引用test2.csv的链接文件
ln test02.csv test2.csv
12. 用户相关:useradd/passwd/who/w/su
#添加twy用户
useradd twy
#修改密码
passwd twy #输入密码加回车,两次
#查看登录用户:指连接工具或者ssh连接的用户,su不算
who
w #查看详情
#root切换用户到twy用户
su twy
13. 权限相关:chmod/chown/chgrp
###chmod###
#权限解释 -rwxr-xr-x:
###
#第1位表示类型 (-文件)(d文件夹)(其它)
#第2-4位:所属用户权限
#第5-7位:所属用户组权限
#第8-10位:所属其它用户权限
#r:读权限
#w:写权限
#x:执行权限
###
#命令解读
chmod [{ugoa}{+-=}{rwx}] [文件或目录]
# u:用户,g用户组,o其它,a全部,+添加权限,-去除,=替代权限
# 可以用数字表示:
# r:4 w:2 x:1
#修改test.csv文件用户读写执行,用户组读执行,其它用户执行权限
chmod 751 test.csv
#递归修改/tmp/tt/目录下所有文件/文件夹权限为:用户读写执行,用户组读执行,其它用户执行权限
chmod -R 751 /tmp/tt/
####chown###
#修改文件test.csv用户为test,用户组为twy
chown test:twy test.csv
###chgrp###
#修改文件test2.csv的用户组为twy
chgrp twy test2.csv
14. 打印前台:echo
#打印文字到控制台
echo "hello"
###追加和覆盖符号
#将字符串test覆盖插入test.csv文件
echo "test" > test.csv
#将字符串test追加插入test.csv文件
echo "test" >> test.csv
15. CentOS安装命令:yum/rpm
在线安装
##查看软件
#查看软件包列表
yum list
#查看已安装
yum list installed
#查看未安装/可安装
yum list available
#查看可更新
yum list updates
#查找某个软件
yum search 关键字
#安装软件
yum -y install 软件名称
#卸载
yum -y remove 软件名称
#更新
yum -y update 软件名称
离线安装
#查看已安装,过滤出mysql关键字
rpm -qa |grep mysql
#安装(有些软件需要依赖,要按照正确顺序进行安装)
rpm –ivh 全包名
#更新
rpm -Uvh 全包名
#卸载
rpm -e 包名
16. 压缩解压缩:gzip/gunzip/tar/zip/unzip
###gzip只能压缩文件###
#压缩test.csv文件,打包后原文件会消失
gzip test.csv
#压缩test.csv.gz文件
gunzip test.csv.gz
###tar,联合了gzip,bzip拥有打包和压缩的功能
#c:打包,x:解包,v:显示详细信息,f:指定文件名,z:打包同时压缩
#打包目录/tmp/tt,指定名称为tt-tmp.tar.gz
tar -zcvf tt-tmp.tag.gz tt/
#解包和解压缩,并指定解压后的位置为/opt,用到参数-C
tar -zxvf tt-tmp.tag.gz -C /opt
###zip###
#压缩test.csv
zip test.zip test.csv
#递归压缩目录/tmp/tt
zip -r tt.zip /tmp/tt/
#压缩test.csv,添加密码:33445
zip -p33445 test.zip test.csv
17. 查看磁盘空间:df
#查看磁盘大小
df -h
#查看磁盘文件数
df -i
18. 查看内存:free
#查看内存大小
free -h
19. 网络相关信息:netstat
#查看本机监听的端口
netstat -tlun
#查看本机所有的网络连接
netstat -an
#查看本机路由表
netstat -rn
#查看9092端口是否被占用
netstat -tlnp | grep 9092
20. 时间相关:date
#获取当前时间,英文显示
date
###当前时间日期格式化
#时间戳
date +%s
#年月日时分秒
date +%Y%m%d%H%M%S
#指定日期格式化成时间戳
date -d "20990221 10:08:10" +%s
#将时间戳格式化成日期
date -d @4078104236 +%Y%m%d
#获取3个小时之前的年月日
date "-d 3hours ago" +%Y%m%d
21. 跨服务器传输文件:scp
#将文件test.csv 传输到h2机器的/tmp目录
scp test.csv h2:/tmp/
#指定目标用户twy传输
scp test.csv twy@h2:/tmp/
#如果传输的目录与本机当前目录相同,可使用$PWD
scp test.csv h2:$PWD
#递归传输目录所有文件
scp -r /tmp/tt/ h2:/tmp/
其它命令
#测试网络联通
ping IP地址(域名)
#退出登录
logout
exit
#重启命令
reboot
#关机命令
shutdown
#磁盘挂载命令
mount /dev/sde /app
#解挂载
umount -v /dev/sde
#查看当前目录各文件和目录所占磁盘大小
du -sh *
#查看和设置网卡信息
ifconfig
#查看近10条历史命令
history 10
#查看ip地址
hostname -i
#查看负载
top
#查看mysql服务状态
systemctl status mysqld #centos7
service mysqld status #centos6
#编码转换
iconv -f gb18030 -t utf8 ${file} -o ${file}
#后台执行
nohup 命令 > /dev/null 2>&1 &
#普通用户使用root权限
sudo 命令
#查看主机信息,版本
uname -a
#查看启动时间
uptime
#清屏
clear
#显示cpu信息
lscpu #核数=CPU(s) * Core(s) per socket
#详细信息
cat /proc/cpuinfo
二、进阶命令
1. 文本编辑器:vim
###命令模式
i #切换到输入模式,在光标当前位置开始输入文本
a #进入插入模式,在光标下一个位置开始输入文本
A #进入插入模式,在光标行尾开始输入文本
o #在当前行的下方插入一个新行,并进入插入模式
O(大写) #在当前行的上方插入一个新行,并进入插入模式
x #删除当前光标所在处的字符
: #切换到底线命令模式,以在最底一行输入命令
dd #剪切当前行
d100d #剪切当前行及往后共100行
yy #复制当前行
y100y #复制当前行及往后共100行
p(小写)#粘贴剪贴板内容到光标下方
P(大写)#粘贴剪贴板内容到光标上方
u #撤销上一次操作
G(shift + g) #跳转最后一行
2 + G(2 + shift + g) #跳转第二行
gg #第一行
ctrl + f #向下一页
ctrl + b #向上一页
ctrl + d #向下半页
ctrl + u #向上半页
ZZ #相当于:wq
ZQ #相当于:q!
###输入模式
#使用 i o a 可进入输入模式,使用Esc退出
#与windows键盘编辑相同
###底线命令行模式
:w #保存文件。
:q #退出 Vim 编辑器。
:wq #保存文件并退出 Vim 编辑器。
:q! #强制退出Vim编辑器,不保存修改
:set nu #显示行号
:set nonu #取消行号
/test #搜索test关键字的,并高亮
详细如下图:
来源: https://www.runoob.com/linux/linux-vim.html
2. 字符串截取:grep/sed/awk/cut
grep:
#查看test.csv文件中出现twy行的数据
grep "twy" test.csv
#不区分大小写,查看test.csv文件中出现twy行的数据
grep -i "twy" test.csv
#查看test.csv文件中没有出现twy行的数据
grep -v "twy" test.csv
#查看test.csv文件中出现twy行的数据,并显示行数
grep -n "twy" test.csv
#递归查看目录/tmp/tt,出现twy的文件,并显示文件名和行数
grep -nr "twy" /tmp/tt/
#显示当前运行的进程中出现java的内容
ps -ef |grep java
sed:
###sed
# 对每行匹配到的第一个字符串进行替换
sed -i 's/原字符串/新字符串/' test.csv
# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' test.csv
# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d' test.csv
# 特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' test.csv
# 特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' test.csv
# 在文件第1行,插入内容"test"
sed -i '1itest' test.csv
# 在文件每一行的行首添加head字符串
sed 's/^/head/g' test.csv
# 在文件每一行的行末添加tail字符串
sed 's/$/tail/g' test.csv
# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' test.csv
awk:
###awk
#用于按分隔符对行进行切割成列的形式
#显示含twy的行
awk "/twy/" test.csv
#按分隔符","切割,显示第2,3列
echo 'yy,tt,dd,,op,a' | awk -F "," '{print $2,$3}'
#按分隔符","切割,指定每行输入的分隔符",",指定每行输出的分隔符"|",显示第2,3列
echo 'yy,tt,dd,,op,a' | awk -v FS="," -v OFS="|" '{print $2,$3}'
#或
echo 'yy,tt,dd,,op,a' | awk -F "," -v OFS="|" '{print $2,$3}'
#指定多个分隔符
echo 'yy,tt,dd|op,a:aaf:pp' | awk -F "[,|:]" '{print $2,$3,$4,$7}'
#输出行号,倒数第二个值,和最后一个值
cat test.csv |awk -F "," '{print NR,$(NF-1),$NF}'
#输出前先判断
cat test.csv | awk -F ',' '{ if ( int ($3 / 100) == 3213) print $2,$1,$3,$NF}'
cut:
###cut
#按照一定规则切割每行数据
-d:#按照指定分隔符分割列
-f:#输出切割后的第几段
-c:以字符 (characters) 的单位取出固定字符区间
-b:以字节为单位进行分割
#按分隔符,切割,并输出每行第二段
cut -d ',' -f 2 test.csv
#按分隔符,切割,并输出每行第二段和第三段
cut -d ',' -f 2,3 test.csv
#切割第5-8个字符
cut -c 5-8 test.csv
#切割前3个字符
cut -c -3 test.csv
#切割第5-8个字节
cut -b 5-8 test.csv
#注意:纯英文状态下字节和字符等效
#切割中文字符(只能使用-C,-b无效)
echo "嘻嘻哈哈的" | cut -c 2,3 #嘻哈
3.文件切割:split
#文件切割,文件过大无法打开时,或传输效率
#切割后cat合并与原文件无差别
-d #指定数字后缀
-a #后缀长度
-b #按文件大小切割,单位:字节(一般都按行数切割,大小分割可能造成单行分割)
-l #按行数切割
#按每个文件100M切割 文件大小可以是 KB、MB,GB,最大可以是 YB!只需使 K、M、G、T、P、E、Z 和 Y 这些合适的字母
$ split -b100M test_20210910.csv
#按每份4000000行切分,使用-d指定数字后缀,-a指定后缀长度,并指定前缀 test_20210910_
split -l4000000 test_20210910.csv -d -a 2 test_20210910_
4. 排序:sort
# 对文件每行按首字母a,b,c...z先后顺序进行排序
sort test.csv
#倒叙
sort -r test.csv
#去除重复行
sort -u test.csv
5. 定时器:crontab
#编辑
crontab -e
#浏览
critab -l
#定时
***** 分别为:分时日月周
6. 进程状态:ps
五种状态码:
- D 不可中断 uninterruptible sleep (usually IO)
- R 运行 runnable (on run queue)
- S 中断 sleeping
- T 停止 traced or stopped
- Z 僵死 a defunct (”zombie”) process
参数:
man ps
- a 显示所有进程
- -a 显示同一终端下的所有程序
- -A 显示所有进程
- c 显示进程的真实名称
- -N 反向选择
- -e 等于“-A”
- e 显示环境变量
- f 显示程序间的关系
- -H 显示树状结构
- r 显示当前终端的进程
- T 显示当前终端的所有程序
- u 指定用户的所有进程
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
- -C<命令> 列出指定命令的状况
- –-help 显示帮助信息
示例:
#显示进程信息
ps -A
#指定用户显示进程信息
ps -u twy
#显示UID(用户),PID(程序id),PPID(程序父id),C(CPU资源百分比),STIME(程序开始时间),TTY(登录者终端位置),TIME(消费CPU时间),CMD(命令行)
ps -ef
#正在内存当中的程序
#USER,PID,%CPU,%MEM,VSZ(使用虚拟内存量),RSS(固定内存量),TTY(登录者终端位置),STAT(状态),START(程序开始时间),TIME,COMMAND,
ps aux
#程序树显示
ps -axjf
#杀死命令
kill -9 PID