Linux系统常见命令

Linux系统常见命令

记录一下常用的linux命令,加深印象,巩固理解。

1、替换文本里的关键字

sed -i "s/nnn/sss/g" `grep naw -rl .`
sed -i "s/kangkang/stephen/g" `grep kanghao -rl .`:替换文件夹中内容

2、压缩与解压文件

  • zip命令:用于创建.zip格式压缩文件
zip archive.zip file1 file2
  • zip解压文件
unzip archive.zip
  • gzip 与 tar 结合使用:同时打包与压缩为 .tar.gz 格式。
tar -czvf archive.tar.gz file1 file2

压缩文件到指定路径:

tar -czvf archive_name.tar.gz /path/to/directory
  • tar 是用于打包和解压文件的命令。

  • -c 表示创建一个新的归档文件。

  • -x 表示从归档文件中提取文件。

  • -z 表示使用gzip压缩或解压缩。

  • -v 表示在操作过程中显示详细信息。

  • -f 表示后面跟归档文件的名称。

注意:

  • 压缩时,archive_name.tar.gz是你想创建的归档文件名,/path/to/directory是你想压缩的文件夹路径。

  • 解压时,archive_name.tar.gz是归档文件的名称,-C /target/directory用于指定解压到的目标文件夹路径。如果不使用-C参数,默认解压到当前目录。

  • 解压并解包文件
tar -xzvf archive.tar.gz

3、查找文件内容

LINUX中的搜索文件和目录命令

find ./ -type l -ls | grep naw > 1.log ////把一个带有名字的”naw”保存到log中

grep 信号 *.v ///查找信号以及所在.v文件,必须在信号所在目录下搜素

grep 信号 -rl .   ///搜素信号在此根目录下所有文件

find . -name 'latest' ///查找latest名字以及所在文件夹(限于查找此目录以及下面的子目录)

find / -name mswin.vim 2>/dev/null(查找根目录里mswin.vim所在文件里)

cat Makefile |grep showcase  ///查找makefile里面含有showcase的字段

 

4、变量$0,$1,$2,$*,$@,$#,$$,$?含义解释

$0:指脚本本身的名字

$1:指传递给该shell脚本的第一个参数

$2:指传递给该shell脚本的第二个参数

$*:显示所有向脚本传递的参数

$@:显示所有向脚本传递的参数

$#:传给脚本的参数个数

$$:脚本运行的当前进程ID号

$?:显示最后命令的退出状态,0表示没有错误,其它表示有错误

[root@kibana ~]# cat dollar.sh 
#!/bin/bash
 
num=$#
name=$0
 
echo "传给脚本的参数个数:" $num
echo "脚本名称:" $name
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo
echo "\"\$*\"显示所有向脚本传递的参数"
for key in $*
do
  echo $key
done
echo
echo "\"\$@\"显示所有向脚本传递的参数"
for key in $@
do
  echo $key
done
echo
echo "process id:$$"
echo "process result status:$?"
 
[root@kibana ~]# sh dollar.sh 1 2
传给脚本的参数个数: 2
脚本名称: dollar.sh
第一个参数为:1
第二个参数为:2
 
"$*"显示所有向脚本传递的参数
1
2
 
"$@"显示所有向脚本传递的参数
1
2
 
process id:2822
process result status:0
[root@kibana ~]# 

5、awk用法

5.1、基本用法

  • 处理格式

awk的用法如下所示:

$awk 动作 文件名
$awk '{print $0}' 111.txt

说明:demo.txt是awk要处理的文本文件。单引号内部有大括号,里面就是每行要处理的动作print $0, 其中print是打印命令,$0代表当前样,执行结果为将文件原样输出。

$ echo 'this is my name'|awk '{print $0}'
this is a my name

说明:上面的代码就是将this is my name, 重新打印一遍。

  • 字段分割

awk默认使用空格和制表符,将每一行数据分成若干字段,字段依次使用$1、$2、$3 …依次代表第一个字段、第二个字段、第三个字段,其中需要$0入上文所描述,代表整行数据。

$ echo 'this is my name' | awk '{print $2}'
$ is

说明:上述代码作用是使用空格分割this is my name, 打印第2个域字段。

  • F参数

默认情况下awk使用tab和空格对数据进行分段,当需要指定自定义分割符时,可以使用-F参数进行指定。

$ echo 'root:x:0:0:root:/usr/bin/zsh' | awk -F':' '{print $3}'
$ 0

5.2、变量

  • awk内置变量列表
符号 作用
NF 表示当前行有多少字段,因此使用$NF表示最后一段
NR 表示当前处理是多少行
FS 字段分割符,默认是空格和制表符
OFS 输出字段的分割符
ORS 输出记录的分割符,用于打印是分割记录,默认为换行符
OFMT 数字输出格式
  • FS 实例

以文本文件passwd为例,文本文件内容如下所示:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

1.通过FS可以实现修改分割字段的字符

$ awk '{print $1,$2,$3}' FS=':' /etc/passwd
root x 0
daemon x 1
bin x 2
sys x 3
sync x 4
games x 5
man x 6
lp x 7

2.通过FS指定多个分割符

为了方便对比我们先指定一个分割符效果如下

$ awk '{print $1,$2,$NF}' FS=[:] /etc/passwd
root x /bin/bash
daemon x /usr/sbin/nologin
bin x /usr/sbin/nologin
sys x /usr/sbin/nologin
sync x /bin/sync
games x /usr/sbin/nologin
man x /usr/sbin/nologins

 同时指定两个分割字符的效果如下

$ awk '{print $1,$2,$NF}' FS=[:/] /etc/passwd
root x bash
daemon x nologin
bin x nologin
sys x nologin
sync x sync
games x nologin
man x nologin

3.OFS 实例

awk '{print $1,$2,$NF}' FS=[:/] OFS='|' /etc/passwd
root|x|bash
daemon|x|nologin
bin|x|nologin
sys|x|nologin
sync|x|sync
games|x|nologin
man|x|nologin

说明:上述实例指定输入分割符为:/,指定输出分割符为|,输出第一列、第二列、最后一列时,使用|分割输出的结果。

5.3、awk内置函数

  • 常用原函数
函数名称 作用
gsub(r,s) 在整个$0中用s替代r
gsub(r,s,t) 在整个t中用s替代r
tolower() 字符转为小写
toupper() 字符转为小写
length() 返回字符串长度
index(s,t) 返回s中字符串t的第一位置
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 将字符串s使用fs分割并存储在数组a中
sprint(fmt,exp) 返回经fmt格式化后的exp
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分
  • gsub(r,s)及- gsub(r,s,t) 在整个$0中用s替代r用法示例

依然以上述提供文本为例:

$ cat passwd.txt  | awk -F: '{gsub("root","boot", $1); print $0}'
boot x 0 0 root /root /bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

1.将上述文件中用:分割个第一列中的root替换为boot

$ cat passwd.txt  | awk -F: '{gsub("root","boot", $1); print $0}'
boot x 0 0 root /root /bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

2.将上述文件中的root替换为boot

$ cat passwd.txt  | awk -F: '{gsub("root","boot", $0); print $0}'
boot:x:0:0:boot:/boot:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
  • tolower() 字符转为小写示例
$ cat passwdUpper.txt
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
DAEMON:X:1:1:DAEMON:/USR/SBIN:/USR/SBIN/NOLOGIN
BIN:X:2:2:BIN:/BIN:/USR/SBIN/NOLOGIN
SYS:X:3:3:SYS:/DEV:/USR/SBIN/NOLOGIN
SYNC:X:4:65534:SYNC:/BIN:/BIN/SYNC
$ cat passwdUpper.txt  | awk -F: '{ print tolower($0)}'
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
  • length() 返回字符串长度示例
$ cat passwd.txt | awk -F: '{ print length($1)}'
4
6
3
3
4
  • index(s,t) 返回s中字符串t的第一位置示例
cat passwd.txt | awk -F: '{ print $0;print index("root",$1)}'
root:x:0:0:root:/root:/bin/bash
1
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
0
bin:x:2:2:bin:/bin:/usr/sbin/nologin
0
sys:x:3:3:sys:/dev:/usr/sbin/nologin
0
sync:x:4:65534:sync:/bin:/bin/sync
0
  • match(s,r) 测试s是否包含匹配r的字符串示例
$ cat passwd.txt | awk -F: '{ print $0;print match($0,"root")}'
root:x:0:0:root:/root:/bin/bash
1
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
0
bin:x:2:2:bin:/bin:/usr/sbin/nologin
0
sys:x:3:3:sys:/dev:/usr/sbin/nologin
0
sync:x:4:65534:sync:/bin:/bin/sync
0
  • split(s,a,fs) 将字符串s使用fs分割并存储在数组a中示例

split (s,a) 如果第三个参数没有提供,awk就默认使用当前FS值

$ cat passwd.txt | awk  '{print $0;split($0,arry,":");print length(arry),arry[1],arry[2],arry[3]}'
root:x:0:0:root:/root:/bin/bash
7 root x 0
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
7 daemon x 1
bin:x:2:2:bin:/bin:/usr/sbin/nologin
7 bin x 2
sys:x:3:3:sys:/dev:/usr/sbin/nologin
7 sys x 3
sync:x:4:65534:sync:/bin:/bin/sync
7 sync x 4

5.4、条件语句

awk允许指定输出条件,只输出符合条件的行

$ awk ‘条件 动作’ 文件名
  • 正则表达式匹配指定的行
$ cat passwd.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

$ cat passwd.txt | awk '/sys/ {print $1}'
sys:x:3:3:sys:/dev:/usr/sbin/nologin
  • 输出偶数行
$ cat passwd.txt | awk -F: 'NR % 2 == 0 {print $1}'
daemon
sys
  • 输出字段等于特定值
$ cat passwd.txt | awk -F: '$1 == "bin" {print $0}'
bin:x:2:2:bin:/bin:/usr/sbin/nologin
  • if语句
$ cat passwd.txt | awk -F: '{if($1 >= "r") print $0}'
root:x:0:0:root:/root:/bin/bash
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

$ cat passwd.txt | awk -F: '{if($1 >= "r") print $0 ;else print $1}'
root:x:0:0:root:/root:/bin/bash
daemon
bin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

$ cat passwd.txt | awk -F: '{if($1 >= "r") print $0 ;else if($1<"r") print $1}'
root:x:0:0:root:/root:/bin/bash
daemon
bin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

6、sed用法

6.1、删除多行

在Linux中,如果你想通过命令行复制或处理一个文件的特定行范围,你可以使用sedawk工具。以下是使用sed命令来选择从第N行到第M行的方法:

例如有一个文件名newddddd.txt,内容如下,我想保留前1~5000行的数据,其他行数据不想要

可以使用如下命令,会将保留的数据打印到操作界面

sed '5000,65536d' newddddd.txt

也可以加入-i会直接修改文本,保留修改后的文件

sed -i '5000,65536d' newddddd.txt

6.2、文本内容替换

在Linux系统中,可以使用sed命令来替换文本文件中的内容。sed是一种流编辑器,能够执行文本替换的基本命令。

基本语法如下:

sed 's/要替换的文本/新文本/g' 文件名
  • s 表示替换操作。

  • g 表示全局替换,即在每一行中替换所有匹配的文本。

如果你想要直接修改原文件,可以使用-i选项:

sed -i 's/要替换的文本/新文本/g' 文件名

例如,要将文件example.txt中的所有apple替换为orange,可以使用以下命令:

sed -i 's/apple/orange/g' example.txt

如果只想替换第一次出现的文本,可以去掉g

sed -i 's/apple/orange/' example.txt

如果需要对变量进行替换,可以使用双引号:

old_text="apple"
new_text="orange"
sed -i "s/$old_text/$new_text/g" example.txt

请注意,如果你的替换文本中包含了特殊字符,如/&\等,你需要对它们进行转义。

7、查看文件占用内存情况

在Linux中,可以使用du命令来查看当前路径所占用的磁盘空间。以下是一个基本的命令

du -h  //查看文件占用内存
du -sh

这里的参数解释如下:

  • -s:表示汇总每个参数的总用量。

  • -h:表示以人类可读的格式显示(例如,KB、MB、GB)。

运行 df -h 可以快速了解磁盘使用情况,显示每个挂载点的使用百分比

8、配置终端提示符颜色

在 Linux 中,当前的 Bash 提示设置保存在一个名为 PS1 的 shell 变量中,它表示【提示语句】(Prompt Statement)

这个变量保存的路径通常在$HOME/.bashrc 文件中(或者 /etc/bashrc

# 查看当前 bash shell 的 PS1 值
[root@localhost ~]# echo $PS1
[\[\e[33m\]\u\[\e[0m\]@\[\e[31m\]\h\[\e[0m\] \[\e[35m\]\w\[\e[0m\]]\$

然后在.bashrc文件里增加

PS1='\[\033[1;32m\]\u\[\033[1;37m\]@\[\033[1;36m\]\h\[\033[00m\]:\[\033[1;34m\]\w\[\033[00m\]\$ '

然后生效一下

source /etc/bashrc 

或

source ~/.bashrc 

可以看到生效了
image

posted @ 2024-03-22 17:10  stephenkang  阅读(17)  评论(0编辑  收藏  举报