linux入门操作

linux
Author

dd21

Published

December 5, 2022

Referance

zsh,zshrc,zprofile,zshenv区别

基础操作

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的定界符 默认使用’’作为文件的定界符; -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 #行号等于14的打印出来
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