工作中常用的linux命令整理
$> to_date=123
$> echo '$to_date'
$to_date
$> echo "$to_date"
123
$> echo '"$to_date"'
"$to_date"
$> echo "'$to_date'"
'123'
$>
huanzi@hp-pc:~ # bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+1
2
huanzi@hp-pc:~ # cal 9 2022
September 2022
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # date +%Y-%m-%d-%H:%M
2022-09-27-09:15
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # man cat
Man: find all matching manual pages (set MAN_POSIXLY_CORRECT to avoid this)
* cat (1)
cat (1p)
Man: What manual page do you want?
Man: 1
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # ps aux | grep tomcat
root 20896 0.0 0.0 38792 3900 pts/1 S+ 09:21 0:00 grep --color=auto tomcat
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # basename /root/risk_push.txt
risk_push.txt
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # dirname /root/risk_push.txt
/root
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # lsb_release -a
LSB Version: n/a
Distributor ID: SUSE
Description: SUSE Linux Enterprise Server 12 SP4
Release: 12.4
Codename: n/a
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # uname -a
Linux huanzi@hp-pc 4.12.14-94.41-default #1 SMP Wed Oct 31 12:25:04 UTC 2018 (3090901) x86_64 x86_64 x86_64 GNU/Linux
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # ls -lthr
total 99M
drwxr-xr-x 4 root root 4.0K Jan 11 2019 inst-sys
drwx------ 3 root root 4.0K Jan 11 2019 .dbus
drwx------ 3 root root 4.0K Jan 11 2019 .cache
drwxr-xr-x 2 root root 4.0K Jan 11 2019 Videos
drwxr-xr-x 2 root root 4.0K Jan 11 2019 Templates
drwxr-xr-x 2 root root 4.0K Jan 11 2019 Public
huanzi@hp-pc:~ # cat -n ./test.txt
1 test
2 test
3 test
4 test
5 test
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # touch -d '2021-12-02 14:14:14' ./test.txt
huanzi@hp-pc:~ # ll
-rw-r--r-- 1 root root 25 Dec 2 2021 test.txt
huanzi@hp-pc:~ # id root
uid=0(root) gid=0(root) groups=0(root)
huanzi@hp-pc:~ #
find ./ -name test.txt:在当前目录下查找name为test的文件或者目录
huanzi@hp-pc:~ # find ./ -name test.txt
./test.txt
huanzi@hp-pc:~ #
find / -mtime [+|-] [4|0]:在/目录下查找文件或者目录,+4:查找大于时间5的 -4:查找时间为4天内的 4:查找第4天开始算24小时内的 0:查找从当前时间算24小时内的
huanzi@hp-pc:~ # find ./ -mtime 0
./test.txt
find ./ -size +25k -a -size -30k -exec ls -lh {} ;:找出 当前目录下,文件大小介于 30K 到25K 之间文件,并且将权限完整的列出 (-exec ls -lh {} ,注意那么;不能省略,-a就是and的意思,-o就是or的意思。
huanzi@hp-pc:~ # find ./ -size +25k -a -size -30k -exec ls -lh {} \;
-rw-r--r-- 1 root root 28K Mar 11 2022 ./data_251.log
find /etc -size +50k -a ! -user root -exec ls -ld {} ;:找出 /etc 底下,文件大小大于 50K 但是不属于root用户的文件,并且将权限完整的列出 (-exec ls -ld {} ,注意那么;不能省略,-a就是and的意思,-o就是or的意思,!代表不满足后边的条件。
huanzi@hp-pc:~ # find ./ -size +25k -a -size -30k -a ! -user root -exec ls -lh {} \;
huanzi@hp-pc:~ #
find /etc -newer /etc/test:找出比test文件时间更新的文件
huanzi@hp-pc:~ # find ./ -newer ./test.txt -exec ls -lh {} \;
-rw-r--r-- 1 root root 25 Sep 27 00:00 test.txt
-rw------- 1 root root 13K Sep 27 09:56 ./.viminfo
whereis test:这个查找的是系统数据库,只有系统数据库同步之后才能查找到。
huanzi@hp-pc:~ # whereis test.txt
test: /usr/bin/test /usr/share/man/man1p/test.1p.gz /usr/share/man/man1/test.1.gz
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # df -aTh
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda2 ext3 88G 11G 75G 13% /
/dev/vdb2 ext3 295G 94G 186G 34% /var/log
/dev/vdb1 ext3 295G 21G 260G 8% /opt
/dev/vdb3 ext3 1.4T 357G 996G 27% /srv/BigData
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # du -ah
4.0K ./Documents
4.0K ./Public
4.0K ./.ssh/authorized_keys
4.0K ./.ssh/known_hosts
huanzi@hp-pc:~ # ln -s ./text.json ./test.txt1
lrwxrwxrwx 1 root root 11 Sep 27 13:50 test.txt1 -> ./text.json
huanzi@hp-pc:~ # mount -l
/dev/vdb2 on /var/log type ext3 (rw,noatime,errors=panic,data=ordered)
/dev/vdb1 on /opt type ext3 (rw,noatime,errors=panic,data=ordered)
/dev/vdb3 on /srv/BigData type ext3 (rw,noatime,data=ordered)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # free
total used free shared buffers cached
Mem: 65718136 24792992 40925144 1631084 1298812 8242732
-/+ buffers/cache: 15251448 50466688
Swap: 0 0 0
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # alias
alias l='ls -alF'
alias la='ls -la'
alias ll='ls -l'
alias you='if test "$EUID" = 0 ; then /sbin/yast2 online_update ; else su - -c "/sbin/yast2 online_update" ; fi'
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # read -p '请输入用户名:' -t 10 name
请输入用户名:测试
huanzi@hp-pc:~ # echo $name
测试
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # declare -ax name='这是测试'
huanzi@hp-pc:~ # echo $name
这是测试
huanzi@hp-pc:~ #
注意:使用history列出来命令之后,使用 [!序号] 可以执行对应的命令,[!al] 执行所有以al开头的命令。
huanzi@hp-pc:~ # history 10
1139 2022-09-28 09:06:02 declare -a name='这是测试'
1140 2022-09-28 09:06:04 echo $name
1141 2022-09-28 09:06:16 declare -ax name='这是测试'
1142 2022-09-28 09:06:18 echo $name
1143 2022-09-28 09:09:25 history -n 2
1144 2022-09-28 09:09:30 history
1148 2022-09-28 09:09
切割字符串:cut -d ‘分隔字符’ -f fields 文件名
huanzi@hp-pc:~ # cat ./test.txt
test:pp
test:pp
test:pp
test:pp
huanzi@hp-pc:~ # cut -d ':' -f 2 ./test.txt
pp
pp
pp
pp
huanzi@hp-pc:~ #
过滤字符串:grep [-acinv] [–color=auto] ‘搜寻字符串’ filename
huanzi@hp-pc:~ # grep -an 'pp' ./test.txt
1:test:pp
2:test:pp
3:test:pp
4:test:pp
huanzi@hp-pc:~ #
排序: sort [-fbMnrtuk] [file or stdin]
huanzi@hp-pc:~ # ll | sort -k 4
total 100600
-rw------- 1 root root 0 Oct 27 2020 .history
-rw-r--r-- 1 root root 0 Sep 27 13:50 text.json
lrwxrwxrwx 1 root root 11 Sep 27 13:50 test.txt1 -> ./text.json
-rw------- 1 root root 16 Jan 11 2019 .esd_auth
-rw-r--r-- 1 root root 21 Sep 27 17:29 hbase_recorve.sh
去重: uniq [-ic]
huanzi@hp-pc:~ # cat ./test.txt | uniq -ci
4 test:pp
4 test
huanzi@hp-pc:~ #
统计文件字数:wc [-lwm]
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
注意:输出的三个数字中,分删代表: 『行、字数、字符数』
huanzi@hp-pc:~ # wc ./test.txt
8 8 52 ./test.txt
huanzi@hp-pc:~ #
内容输出到文件并在屏幕上显示:tee [-a] file
huanzi@hp-pc:~ # tee -a ./tee.txt
这是地第一次输入
这是地刺第一次输入
这是第二次输入
这是第二次输入
这是第三次输入
这是第三次输入
^C
huanzi@hp-pc:~ # cat ./tee.txt
这是地刺第一次输入
这是第二次输入
这是第三次输入
huanzi@hp-pc:~ #
删除文件或者替换文件:tr [-ds] SET1 …
huanzi@hp-pc:~ # echo '1234' | tr -d '3'
124
huanzi@hp-pc:~ # echo '1234' | tr -s '3' '9'
1294
huanzi@hp-pc:~ #
字符转化:col [-xb]
huanzi@hp-pc:~ # echo -e "123\t456" | col -x
123 456
huanzi@hp-pc:~ #
两个文件当中,有 “相同数据” 的那一行,拼接在一起:join [-ti12] file1 file2
huanzi@hp-pc:~ # cat ./student.txt
lala 20
daiad 23
huahu 99
huanzi@hp-pc:~ # cat ./student1.txt
lala 66
daiad 88
huahu 99
huanzi@hp-pc:~ # join ./student.txt ./student1.txt
lala 20 66
daiad 23 88
huahu 99 99
将两行数据连接在一起,并以tab键分隔:paste [-d] file1 file2
huanzi@hp-pc:~ # paste ./student.txt ./student1.txt
lala 20 lala 66
daiad 23 daiad 88
huahu 99 huahu 99
huanzi@hp-pc:~ # paste -d '=' ./student.txt ./student1.txt
lala 20=lala 66
daiad 23=daiad 88
huahu 99=huahu 99
huanzi@hp-pc:~ #
在将 [tab] 键转成空格键:expand [-t] file
huanzi@hp-pc:~ # cat ./tab.txt
这是在测试tab键 链▒两个tab键
这这是在测试tab键 这是一个tab键
huanzi@hp-pc:~ # expand -t 1 ./tab.txt
这是在测试tab键 链▒两个tab键
这这是在测试tab键 这是一个tab键
huanzi@hp-pc:~ # expand -t 4 ./tab.txt
这是在测试tab键 链▒两个tab键
这这是在测试tab键 这是一个tab键
huanzi@hp-pc:~ #
将大文件切分成小文件: split [-bl] file PREFIX
huanzi@hp-pc:~ # split -l 1 ./tab.txt spilt
huanzi@hp-pc:~ # ll | grep spilt
-rw-r--r-- 1 root root 41 Sep 28 14:02 spiltaa
-rw-r--r-- 1 root root 44 Sep 28 14:02 spiltab
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # cat ./spiltaa
这是在测试tab键 链▒两个tab键
huanzi@hp-pc:~ # cat ./spiltab
这这是在测试tab键 这是一个tab键
huanzi@hp-pc:~ #
参数替换:xargs [-0epn] command
huanzi@hp-pc:~ # cat ./tab.txt | xargs
这是在测试tab键 链▒两个tab键 这这是在测试tab键 这是一个tab键
huanzi@hp-pc:~ # cat ./tab.txt | xargs -n 2
这是在测试tab键 链▒两个tab键
这这是在测试tab键 这是一个tab键
huanzi@hp-pc:~ # cat ./tab.txt | xargs -n 3
这是在测试tab键 链▒两个tab键 这这是在测试tab键
这是一个tab键
huanzi@hp-pc:~ # cat ./tab.txt | xargs -p
echo 这是在测试tab键 链▒两个tab键 这这是在测试tab键 这是一个tab键 ?...y
这是在测试tab键 链▒两个tab键 这这是在测试tab键 这是一个tab键
减号 - 的用途:tar -cvf - /home | tar -xvf -
经过管线后,将 tar -cvf - /home 传送给后面的tar -xvf -,后面的这个 - 则是取用前一个命令事务 stdout, 因此,我们就不需要使用 file 了。
将数据进行取代、删除、新增、截取特定行等等:sed [-nefr] [动作]
huanzi@hp-pc:~ # cat ./student.txt
lala 20
daiad 23
huahu 99
tab tab
tab键测试 tab
huanzi@hp-pc:~ # sed -i 6d -f ./student.txt
sed: file ./student.txt line 1: extra characters after command
huanzi@hp-pc:~ # sed -i 6d ./student.txt
huanzi@hp-pc:~ # cat ./student.txt
lala 20
daiad 23
huahu 99
tab tab
huanzi@hp-pc:~ # sed -i 4a\newline ./student.txt
huanzi@hp-pc:~ # cat ./student.txt
lala 20
daiad 23
huahu 99
newline
tab tab
huanzi@hp-pc:~ #
huanzi@hp-pc:~ # printf "%-10s %-8s %-6s %4s\n" "姓名 年龄 性别 收入";printf "%-10s %-8s %-6s %-4.2f\n" "lal 20 男 10.22";
姓名 年龄 性别 收入
lal 20 男 10.22 0.00
huanzi@hp-pc:~ #
比对两个文件之间的差异:diff [-bBi] from-file to-file
huanzi@hp-pc:~ # diff -bBi ./student.txt ./student1.txt
1,2c1,2
< lala 20
< daiad 23
---
> lala 66
> daiad 88
4,6d3
<
< newline
< tab tab
huanzi@hp-pc:~ #
关于某个档名的『文件类型』判断,如 test -e filename 表示存在否
# test.sh文件
#!/bin/bash
if test -e ~/student.txt; then
echo "student.txt存在于~目录下!"
elif test -e ~/student1.txt; then
echo "student1.txt存在于~目录下!"
else
echo "student.txt、student1.txt不存在于~目录下!"
fi
~
huanzi@hp-pc:~ # ./test.sh
student.txt存在于~目录下!
huanzi@hp-pc:~ #
关于档案的权限侦测,如 test -r filename 表示可读否 (但 root 权限常有例外)
# test.sh文件
#!/bin/bash
if test -r ~/student.txt; then
echo "student.txt有读权限!"
else
echo "student.txt没有读权限!"
fi
huanzi@hp-pc:~ # ./test.sh
student.txt有读权限!
huanzi@hp-pc:~ #
两个档案之间的比较,如: test file1 -nt file2
# test.sh文件
#!/bin/bash
if test ~/student.txt -ef ~/student1.txt; then
echo "student.txt和student1.txt是同一个文件!"
else
echo "student.txt和student1.txt不是同一个文件!"
fi
huanzi@hp-pc:~ # ./test.sh
student.txt和student1.txt不是同一个文件!
关于两个整数之间的判定,例如 test n1 -eq n2
# test.sh文件
#!/bin/bash
if test 123 -eq 123; then
echo "123 EQ 123"
else
echo "123 NOT EQ 123"
fi
huanzi@hp-pc:~ # ./test.sh
123 EQ 123
判定字符串的数据
# test.sh文件
#!/bin/bash
if test -n '123'; then
echo "'123' IS NOT EMPTY STRING"
else
echo "'123' IS EMPTY STRING"
fi
huanzi@hp-pc:~ # ./test.sh
'123' IS NOT EMPTY STRING
多重条件判定,例如: test -r filename -a -x filename
# test.sh文件
#!/bin/bash
if test -r ~/test.sh -a -x ~/test.sh; then
echo "test.sh have read and write permissions"
else
echo "test.sh have not read and write permissions"
fi
huanzi@hp-pc:~ # ./test.sh
test.sh have read and write permissions
if条件判断:
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以进行的指令工作内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以进行的指令工作内容;
else
当条件判断式一不二均不成立时,可以进行的指令工作内容;
fi
# test.sh文件
#!/bin/bash
if test -e ~/student.txt; then
echo "student.txt存在于~目录下!"
elif test -e ~/student1.txt; then
echo "student1.txt存在于~目录下!"
else
echo "student.txt、student1.txt不存在于~目录下!"
fi
~
huanzi@hp-pc:~ # ./test.sh
student.txt存在于~目录下!
huanzi@hp-pc:~ #
case … esac判断:
case $1 in
“one”)
echo “Your choice is ONE” ;;
“two”)
echo “Your choice is TWO” ;;
“three”)
echo “Your choice is THREE” ;;
*)
echo “Usage $0 {one|two|three}” ;;
esac
# test.sh文件
#!/bin/bash
case $1 in
"one")
echo "one";;
"two")
echo "two";;
"three")
echo "three";;
"four")
echo "four";;
"five")
echo "five";;
*)
echo "over";;
esac
huanzi@hp-pc:~ # ./test.sh one
one
huanzi@hp-pc:~ # ./test.sh five
five
huanzi@hp-pc:~ # ./test.sh
over
huanzi@hp-pc:~ #
function fname() { 程序段 }
# test.sh文件
#!/bin/bash
function casetest {
echo "function ......"
}
casetest
huanzi@hp-pc:~ # ./test.sh
function ......
while循环:
while [ condition ] <==中括号内的状态就是刞断式
do <==do 是循环的开始!
程序段落
done <==done 是循环的结束
# test.sh文件
#!/bin/bash
function whiletest {
count=0
while [ $count -le 5 ]
do
echo "while out put context " $count
((count++))
done
}
whiletest
huanzi@hp-pc:~ # ./test.sh
while out put context 0
while out put context 1
while out put context 2
while out put context 3
while out put context 4
while out put context 5
huanzi@hp-pc:~ #
until 循环:
until [ condition ]
do
程序段落
done
# test.sh文件
#!/bin/bash
function untiltest {
count=0
while [ $count -le 5 ]
do
echo "until out put context " $count
((count++))
done
}
untiltest
huanzi@hp-pc:~ # ./test.sh
until out put context 0
until out put context 1
until out put context 2
until out put context 3
until out put context 4
until out put context 5
huanzi@hp-pc:~ #
for循环:
for var in con1 con2 con3 …
do
程序段
done
# test.sh文件
#!/bin/bash
function fortest {
for item in 1 2 3 4 5
do
echo "for out put context " $item
done
}
fortest
huanzi@hp-pc:~ # ./test.sh
for out put context 1
for out put context 2
for out put context 3
for out put context 4
for out put context 5
huanzi@hp-pc:~ #
for (( 初始值; 限制值; 执行步阶 )) # 类似于java中for(i = 0;i<10;i++)
do
程序段
done
# test.sh文件
#!/bin/bash
function fortest1 {
for ((i=0;i<5;i++))
do
echo "for out put context " $i
done
}
fortest1
huanzi@hp-pc:~ # ./test.sh
for out put context 0
for out put context 1
for out put context 2
for out put context 3
for out put context 4
huanzi@hp-pc:~ #
at:at [-mldv] TIME,at -c 工作号码,只执行一次。
crontab :crontab [-u username] [-l|-e|-r],循环执行
-d :后面可以接秒数,就是整个程序画面更新的秒数。预设是 5 秒;
-b :以批次的方式执行 top ,还有更多的参数可以使用喔! 通常会搭配数据流重导向来将批次的结果输出成为档案。
-n :与 -b 搭配,意思是,需要的行进行几次 top 的输出结果。
-p :指定某个 PID 来的行观察监测。
在 top 执行过程当中可以使用的以下按键执行命令:
huanzi@hp-pc:~ # netstat -atunlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.243.48.251:21303 0.0.0.0:* LISTEN 21113/java
tcp 0 0 10.243.48.251:26007 0.0.0.0:* LISTEN 13985/java
tcp 0 0 127.0.0.1:25016 0.0.0.0:* LISTEN 5940/java
tcp 0 0 10.243.48.251:21304 0.0.0.0:* LISTEN 26026/java
tcp 0 0 10.243.48.251:26008 0.0.0.0:* LISTEN 13985/java
rpm -qa 软件名称:列出对应的软件信息
huanzi@hp-pc:~ # rpm -qa openssh
openssh-7.2p2-74.25.1.x86_64
huanzi@hp-pc:~ #
yum [option] [查询工作项目] [相关参数]:安装/升级功能
yum clean [packages|headers|all]:
dpkg -i 软件包:
dump [-Suvj] [-level] [-f 备份档] 待备份资料 (dump可以备份整个文件系统)
dd if=/dev/vda1 of=/home/bak bs=1M count=512
if 是 input file ,输入档案。of 是 output file ,将一堆零写入到后面接的档案中。
bs 是每个 block 大小,就像文件系统那样的 block 意思。
count 则是总共几个 bs 的意思。
restore -r [-f dumpfile] :还原整个文件系统,主要是还原dump 备份的数据
parted /dev/vdb mkpart logical ext4 100GB 200GB:直接使用该命令划分一个100G的逻辑分区。
parted /dev/vdb print:打印/dev/vdb磁盘划分情况
parted /dev/vdb rm 8:删除/dev/vdb磁盘下8号分区
分步操作:
分别执行以下命令:
parted /dev/vdb // 进入parted命令,选择yes
(parted) mklabel gpt // 设置分区格式
(parted) mkpart primary 1 400G // 第一个分区大小300G
(parted) mkpart primary 401G 700G // 第二个分区300G
(parted) mkpart primary 701G 2199G // 第三个分区剩下的
(parted) print(或者p) // 查看分区
(parted) rm // 删除分区
Partition number? 2 // 分区编号
(parted) quit // 退出parted命令,会自动保存分区。下边这提示不用处理。
Information: You may need to update /etc/fsta