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中,如果你想通过命令行复制或处理一个文件的特定行范围,你可以使用sed
或awk
工具。以下是使用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
可以看到生效了