基础操作
1. 学会使用命令帮助
man -k xxx // 忘记具体命令
whatis xxx // 查看具体信息,info也可
whatis -w "ca*" // 正则表达式查找
info xxx // 同whatis
man xxx // 查看具体参数
Linux分
(1)、用户可以操作的命令或者是可执行文件
(2)、系统核心可调用的函数与工具等
(3)、一些常用的函数与数据库
(4)、设备文件的说明
(5)、设置文件或者某些文件的格式
(6)、游戏
(7)、惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容
(8)、系统管理员可用的管理条令
(9)、与内核有关的文件
查找程序的bin文件夹所在位置
which xxxx
查看程序的搜索路径(查看执行的是哪一个程序)
whereis xxx
2. 文件及目录管理
文件,文件夹基本操作
ls // 列出当前目录下的所有文件
touch xx.x // 创建一个文件
mkdir xxx // 创建一个文件夹
mv FILE PATH // 移动文件到指定位置
cp SRC DESC // 复制文件到那个文件(可以写路径)
cp -r ./aaa ./bbb // 复制文件夹
rm -rf // 删除(加单粗暴的删除)
查看文件个数
find ./ |wc -l // 官方写法,个人觉得不太方便记忆
ls | cat -n // 文件前面加序号
目录切换
cd xxx // 进入到xx目录
cd - // 进入到场次的路径
cd ~ // 进入到家目录
cd / // 记入到根目录
pwd // 显示当前路径
列出文件
ls // 列出所有文件
ll // 列出详细信息
ls -lrt // 时间排序
别名修改
修改家目录下的bachrc
文件设置命令别名,想当于快捷方式
alias lt='ls -lrt' // 修改别名为lt
文件查找
find ./ -name "xxx" // 在当前目录查找xxx, xxx可以是正则表达式
文件内容查看
cat
vim
head
head -10 xxx // 看前10行
tail -10 xxx // 看倒数10行
tail -f xxx // 动态显示文本最新信息
diff xx-1 xx-2 // 文件对比
查找文件内容
egrep 'str' file // 查找文件内容
egrep 'str' file > outFile // 将查找到的内容输出到outFile
权限修改
chown user file // 修改文件拥有者
chmod a+x file // 所用用户添加可执行权限a(all) u(user) g(group) o(other)
文件创建别名(快捷方式)
ln file-1 file-2 // 硬连接, 相当于复制
ln -s file1 file2 // 软连接, 相当于快捷方式
管道和重定向
批处理命令连接执行,使用 |
串联: 使用分号 ;
前面成功,则执行后面一条,否则,不执行:&&
前面失败,则后一条执行: ||
ls ./ && echo ok || echo failed
if ls ./;then echo ok; else echo failed;fi // 和上面等同
:> a.txt // 清空文件
ls a.text >> a.out // 重定向, 就是将原本输出到控制台的信息, 重新输出到别的地方
环境变量设置
bashrc: 系统启动时执行的文件
profile: 用户登陆后执行的文件
vim ~/.bashrc
vim /etc/profile
//修改其中的PATH变量
PATH=$APPDIR:/opt/app/soft/bin:$PATH:/usr/local/bin:$TUXDIR/bin:$ORACLE_HOME/bin;export PATH
bash快捷键
Ctl-U 删除光标到行首的所有字符,在某些设置下,删除全行
Ctl-K 删除光标到行尾的所有字符
Ctl-W 删除当前光标到前边的最近一个空格之间的字符
Ctl-H backspace,删除光标前边的字符
Ctl-R 匹配最相近的一个执行过的命令,然后输出
Ctl-J 回车
Ctl-B 左移一个字符
alt-B 左移一个单词(ubuntu失败)
Ctl-F 右移一个字符
alt-F 右移一个单词(ubuntu失败)
Ctl-A 移动到最前面
Ctl-E 移动到最后面
Ctl-P 上一条指令
Ctl-N 下一条指令(执行过的指令中上翻下翻,==>上/下 键: 终于不用按上下了, 太爽了!!!)
Ctl-L 清屏(不用clear了, 解决痛点+1,爽+1)
综合应用
查找record.log中包含AAA,但不包含BBB的记录的总数:
cat -v record.log | grep AAA | grep -v BBB | wc -l // cat -v 显示文件原本在中的数据, 对中文字符有影响 直接翻译成acsii字符
3. 文本处理
文件查找
find ./ -name "*.txt" // 文件名查找
find ./ -regex ".*?.txt" // 正则表达式查找
find ./ ! -name "*.txt" // 文件名反向查找
find . -maxdepth 1 -type f // 指定深度查找, 深度为1
文件操作时间查询
-atime 访问时间 (单位是天,分钟单位则是-amin,以下类似)
-mtime 修改时间 (内容被修改)
-ctime 变化时间 (元数据或权限变化)
find ./ -atime 7 -type f // 查找最近第7天修改的文件 f(file)
find ./ -atime -7 -type f // 最近7天内
find ./ -atime +7 -type f // 最近7天前
按照大小查询文件
find ./ -type f -size +2 // 查找大于2k的文件
find ./ -type f -size -2 // 查找小于2k的文件
按照文件创建用户查找
find ./ -type f -user root // root用户创建的文件
删除指定条件的文件
find ./ -type f -name "*.txt" -delete // 删除当前目录下的xxx.txt文件
动作执行
exec后面可以跟执行的命令, {}代表符合条件的所有文件
find ./ -type f -name "*.txt" -exec cp {} ./OtherDir \ ; // 将当前文件夹中的所有txt文件复制到当前目录下的OtherDir中
结合多个命令
如果需要后续执行多个命令,可以将多个命令写成一个脚本。然后 -exec 调用时执行脚本即可:
-exec ./commands.sh {} \;
-print的定界符
默认使用’\n’作为文件的定界符;
-print0 使用’\0’作为文件的定界符,这样就可以搜索包含空格的文件;
grep文本搜索
-o 只输出匹配的文本行 -v 只输出没有匹配的文本行
-c 统计文件中包含文本的次数
grep -c “text” filename
-n 打印匹配的行号
-i 搜索时忽略大小写
-l 只打印文件名
grep -i -n 'hello' a.txt // 查找文本中hello的位置, 忽略大小写
在多级目录中对文本递归搜索(程序员搜代码的最爱):
grep "class" . -R -n
xargs命令行参数转换
-d 定义定界符 (默认为空格 多行的定界符为 n)
-n 指定输出为多行
-I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时
-0:指定0为输入定界
cat xxx.txt | xargs -n 3 // 将内容三行在一行显示
cat xxx.txt | xargs -i echo -{} // 将xx.txt中的数据按行读取,通过echo输出,并在前加 -
sort
排序
-n 按数字进行排序 VS -d 按字典序进行排序
-r 逆序排序
-k N 指定按第N列排序
sort -n xxx.txt // 默认n排序
sort -r xxx.txt // 逆序
sort -d xxx.txt // 字典排序
sort xxx.txt | uniq // 去重
sort xxx.txt | uniq -c // 每行出现次数
sort xxx.txt | uniq -d
文本拼接
paste F1 F2 // F1和F2进行拼接, 是对应行进行拼接,不知直接拼到下面, 默认分割是以tab进行分割的
past F1 F2 -d "," // 使用","进行分割
字数统计
wc -l xxxx // 统计行数
wc -w xxxx // 统计单词数
wc -c xxxx // 统计字符数
wc xxx // 返回[行数, 单词数, 字符数]
文本替换 - sed
sed 's/xxx/***/' FILE // 替换每行第一个匹配的字符[将FILE中的xxx替换为***]
sed 's/xxx/***/g' FILE // 替换匹配到的所有的字符
sed -i 's/xxx/***/' FILE // 直接修改原文[上面的写法需要将修改后的内容重定位输出到新的文件才可以保存]
sed -i '/^$/d' FILE // 直接将文件中的空白行删除[文本末尾的空白行没有删除]
str = 9999
sed "s/xx/$str/" FILE // 双引号会替换变量的值, 单引号不会, 会将str替换为9999
awk数据流处理
awk脚本结构
awk ' BEGIN{ statements } statements2 END{ statements } '
- 工作方式
1.执行begin中语句块;
2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
3.执行end语句块;
echo 123 | awk 'BEGIN {print "Start"}{ print } END{print "END"}' // 格式很关键,标点,大小写
print 以逗号分割时,参数以空格定界;
echo|awk '{a=1;b=2;c="dasdsa";print a,b,c;}'
print字符串拼接
echo|awk '{a=1;b=2;c="dasdsa";print a" ----***" b"----** " c;}'
// 输出
1 ----***2----** dasdsa
awk - 特殊变量: NR NF $0 $1 $2
NR:表示记录数量,在执行过程中对应当前行号;
cat xxx.txt | awk '{print NR}' // 输出执行到的行数
cat xxx.txt | awk '{print NF}' // 输出执行的当前行的单词数
cat xxx.txt | awk '{print $2}' // 输出当前行的第2个单词
NF:表示字段数量,在执行过程总对应当前行的字段数;
$0:这个变量包含执行过程中当前行的文本内容;
$1:第一个字段的文本内容;
$2:第二个字段的文本内容;
// 每行求和 -e是将转移字符输出出来
echo -e "1\n 2\n 3\n 4\n" |awk 'BEGIN{sum=0;}{sum+=$1;}END{print sum}' // 输出10
awk - 传递外部变量
var = 9999
echo | awk vara=$var '{print vara}' // 传递外部变量, 变量放前后都行,但是不能加括号, 默认来自输入
echo | awk vara=$var '{print vara}' FILE // 个人使用失败,可能是语法哪里写错了
用样式对awk处理的行进行过滤
awk 'NR < 5' #行号小于5
awk 'NR==1,NR==4 {print}' file #行号等于1和4的打印出来
awk '/linux/' #包含linux文本的行(可以用正则表达式来指定,超级强大)
awk '!/linux/' #不包含linux文本的行
使用-F来设置定界符(默认为空格)
awk -F: '{print $NF}' /etc/passwd
4. 磁盘管理
查看磁盘大小以及使用情况
-h: human缩写,以易读的方式显示结果(即带单位:比如M/G,如果不加这个参数,显示的数字以B为单位
df -h // 查看磁盘信息
当前目录所占大小
-h 人性化显示
-s 递归整个目录的大小
du -sh // 当前文件夹占用磁盘大小
查看当前目录下所有子文件夹排序后的大小:
du -sh `ls`| sort // 当前文件夹中的文件按照大小排序
打包,压缩,解压缩
tar -cvf example.tar example ->将example文件夹归档变成了example.tar
- c: create创建档案
- v: verbose显示详情
- f: file表示文件
tar -cvf example.tar example // 只打包不压缩
gzip xxx.tar // 压缩后生成-> xxx.tar.gz
gunzip xxx.tar.gz // 解压后-> xxx.tar
tar -xvf xxx.tar.gz // 解压后-> xxx
tar 解压参数
-z 解压gz文件
-j 解压bz2文件
-J 解压xz文件
5. 进程管理工具
查询正在运行的进程
ps -ef // 查询所有进程
ps -ef|prep root // 查询root用户的进程
pgrep -l ba // 查询含有ba关键字的进程->查询进程ID(适合只记得部分进程字段)
ps -ajx // 查看所有信息的完整信息
top // 实时查看进程信息 实时更新
查看端口占用情况
lsof -i:3306 // 查看3306的端口占用情况
查看用户username的进程所打开的文件
lsof -u username
利用进程名 查看进程使用的文件
lsof -c mysql // 查看mysql进程占用的文件
利用pid 查看进程使用的文件
ls -i 22 // 查询占用22号端口的进程
lsof -p 774 // 根据进程pid号774查询 文件使用情况
查询制定文件夹内文件夹的使用进程
lsof +d ./ // 查询当前文件夹内的文件使用情况(进程信息)
结束进程
lsof -c NAME // 查询进程的pid
kill PID // 结束PID进程
(1) CTRL+Z挂起进程并放入后台
(2) jobs 显示当前暂停的进程
(3) bg %N 使第N个任务在后台运行(%前有空格)
(4) fg %N 使第N个任务在前台运行
默认bg,fg不带%N时表示对最后一个进程操作!
动态查看-top
P:根据CPU使用百分比大小进行排序。
M:根据驻留内存大小进行排序。
i:使top不显示任何闲置或者僵死进程。
top // top之后按下p/m/i
6. 性能监控
监控cpu
sat -u 1 2 // 查看cpu使用情况, 一秒钟采样两次, ubuntu没有sar需要安装
vmstart 1 2 // 和上面等效
查看内存
free // 硬盘使用情况
free -m // 内存使用情况
7. 网络工具
查询网络服务和端口
netstat -a // 查看所有端口
netstat -at // 列出所有tcp端口
netstat -au // 列出所有udp端口
列出所有监听的服务 - netstat -x
[ netstat ]
-a 显示所有连接和侦听端口,默认不显示LISTEN相关
-b 显示在创建每个连接或侦听端口时涉及的可执行程序。在某些情况下,已知可执行程序承载多个独立的组件,这些情况下,显示创建连接或侦听端口时涉及的组件序列。在此情况下,可执行程序的名称位于底部 [] 中,它调用的组件位于顶部,直至达到 TCP/IP。注意,此选项可能很耗时,并且在你没有足够权限时可能失败。
-e 显示以太网统计信息。此选项可以与 -s 选项结合使用。
-i 显示网络接口列表
-n 以数字形式显示地址和端口号。
-o 显示拥有的与每个连接关联的进程 ID。
-p proto 显示 proto 指定的协议的连接;proto可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
-q 显示所有连接、侦听端口和绑定的非侦听 TCP 端口。绑定的非侦听端口不一定与活动连接相关联。
-r 显示路由表。
-s 显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认的子网。
interval 重新显示选定的统计信息,各个显示间暂停的间隔秒数。按 CTRL+C 停止重新显示统计信息。如果省略,则 netstat 将打印当前的配置信息一次。
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-c 每隔一个固定时间,执行该netstat命令,netstat 将每隔一秒输出网络信息。
netstat -l // 列出所有监听的服务
8. 用户管理工具
添加用户
useradd -m xxx // 添加xxx用户, 单独的添加,没有任何权限 以及密码
用户切换
su xxx // 切换xxx用户
su root // 切换root用户
删除用户
userdel -r xxx // 删除用户xxx
lsof -u xxx // 查询xxx用户PID
kill -9 PID // 用户无法删除,显示进程占用, 先结束进程, 然后重新删除用户
权限管理
使用chmod命令更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式
分组
- u:用户
- g:组
- o:其它用户
- a:所有用户
权限
- r:读
- w:写
- x:执行
数字方式:
数字方式直接设置所有权限,相比字母方式,更加简洁方便;
使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
chmod a+x FILE // 对FILE文件的所用户添加可执行程序
chmod g+x FILE // 对组用户添加可执行权限
chmod 777 FILE // 所有权限打开
修改拥有者
chown USER File // 修改拥有者
chown -R USER FILE // 递归所有文件夹修改拥有者
环境变量
bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。
全局 | 用户 |
---|---|
bashrc(不登录) / profile(登录) | bashrc (不登录) / profile (登录) |
/etc/profile,/etc/bashrc 是系统全局环境变量设定
~/.profile ~/.bashrc用户目录下的私有环境变量设定
全局 | 用户 |
---|---|
/etc/profile,/etc/bashrc | ~/.profile ~/.bashrc |
当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:
首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc
读取当前登录用户Home目录下的文件/.bash_profile,其次读取/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
读取~/.bashrc
/.profile与/.bashrc的区别:
这两者都具有个性化定制功能
~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次
~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
9. 系统管理及IPC资源管理
查看cpu信息
cat /etc/cpuinfo // 查看cpu信息
查看内存信息
cat /etc/meminfo // 查看内存信息
查看cpu架构
arch // 查案CPU架构
ipcs资源查询
ipcs
参考:
https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/03_text_processing.html