PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
198445 root 20 0 81580 28672 21508 R 97.3 0.0 13:04.45 parquet-arrow-p
依次对应:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
运行top命令后,键入大写P。
有两种途径:
a) 打开大写键盘的情况下,直接按P键
b) 未打开大写键盘的情况下,Shift+P键
运行top命令后,键入大写M。
有两种途径:
a) 打开大写键盘的情况下,直接按M键
b) 未打开大写键盘的情况下,Shift+M键
pgrep =根据名称和其他属性查找或发信号通知进程,pgrep查找当前正在运行的进程并列出与选择标准匹配的进程ID。
# pgrep -f HistoryServer
44063
# top -p `pgrep -f HistoryServer`
pidof 是Linux系统中用来查找正在运行进程的进程号(pid)的工具;
语法
pidof(选项)(参数)
选项
-s:仅返回一个进程号;
-c:仅显示具有相同“root”目录的进程;
-x:显示由脚本开启的进程;
-o:指定不显示的进程ID。
# pidof nginx
28895 28078 28077 28076 28075
# pidof -s nginx
28895
如果需要查找到 pid 之后 kill 掉该进程,还可以使用 pkill:
pkill -f name
“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容
常见的set -ex , 见如下参数
-a 标示已修改的变量,以供输出至环境变量。
-b 使被中止的后台程序立刻回报执行状态。
-C 转向所产生的文件无法覆盖已存在的文件。
-d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e 若指令传回值不等于0,则立即退出shell。
-f 取消使用通配符。
-h 自动记录函数的所在位置。
-H Shell 可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k 指令所给的参数都会被视为此指令的环境变量。
-l 记录for循环的变量名称。
-m 使用监视模式。
-n 只读取指令,而不实际执行。
-p 启动优先顺序模式。
-P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t 执行完随后的指令,即退出shell。
-u 当执行时使用到未定义过的变量,则显示错误信息。
-v 显示shell所读取的输入值。
-x 执行指令后,会先显示该指令及所下的参数。
+<参数> 取消某个set曾启动的参数。
示例
# cat shell.sh
set -ex
echo "hello"
uidentry=$(getent passwd root)
# sh shell.sh
+ echo hello
hello
++ getent passwd root
+ uidentry=root:x:0:0:root:/root:/bin/bash
# cat shell.sh
set -e
echo "hello"
uidentry=$(getent passwd root)
# sh shell.sh
hello
ssh-keygen -t rsa -b 4096
-t rsa:t是type的缩写
RSA:RSA加密算法是一种非对称加密算法,是由三个麻省理工的牛人弄出来的,RSA是他们三个人姓的开头首字母组合。DSA:Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种。
-b 4096:b是bit的缩写
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。
DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。
ssh -i ~/.ssh/id_rsa root 192.168.1.11
cat /etc/issue
apt-get update
如果出现以下错误
There is no public key available for the following key IDs
apt-get install debian-keyring debian-archive-keyring
apt-key update
apt-get install vim -y
所以正确的执行顺序是
apt-get install debian-keyring debian-archive-keyring
apt-key update
apt-get update
apt-get install vim -y
zip OAP-TPCDS-TOOL.zip -r OAP-TPCDS-TOOL
tar -zcvf spark-cdh6.3.1-release-build.tar.gz spark-cdh6.3.1-release-build
-z, --gzip, --gunzip, --ungzip filter the archive through gzip
-c, --create create a new archive
-x, --extract, --get extract files from an archive
-v, --verbose verbosely list files processed
-f, --file=ARCHIVE use archive file or device ARCHIVE
last reboot可以看到Linux系统历史启动的时间
# last reboot
reboot system boot 4.18.16-300.fc29 Thu Jan 16 17:25 still running
reboot system boot 4.18.16-300.fc29 Wed Jan 15 17:21 - 02:41 (09:19)
reboot system boot 4.18.16-300.fc29 Tue Jan 14 17:25 - 02:39 (09:13)
reboot system boot 4.18.16-300.fc29 Wed Nov 13 21:41 - 02:48 (61+05:07)
reboot system boot 4.18.16-300.fc29 Tue Nov 12 05:30 - 21:40 (1+16:10)
reboot system boot 4.18.16-300.fc29 Tue Nov 12 00:03 - 05:28 (05:24)
reboot system boot 4.18.16-300.fc29 Wed Nov 6 00:37 - 00:01 (5+23:24)
reboot system boot 4.18.16-300.fc29 Thu Oct 17 20:02 - 00:34 (19+04:31)
rpm -ql 包名 查看一个包安装了哪些文件
rpm -qa 查看系统中安装了哪些包
# rpm -qa | grep libvmem
libvmemcache-0.8-1.x86_64
# rpm -ql libvmemcache-0.8-1.x86_64
/usr/include/libvmemcache.h
/usr/lib/.build-id
/usr/lib/.build-id/87
/usr/lib/.build-id/87/e1898ba75923d6a0e239161d4cd36fb905f1e7
/usr/lib64/libvmemcache.so
/usr/lib64/libvmemcache.so.0
/usr/lib64/pkgconfig/libvmemcache.pc
# grep "com.intel.arrow " ./ -r
./java/adapter/avro/pom.xml: com.intel.arrow
./java/adapter/avro/pom.xml: com.intel.arrow
./java/adapter/avro/pom.xml: com.intel.arrow
./java/adapter/jdbc/pom.xml: com.intel.arrow
l 参数 带有去除 print 和去重 功能
# grep "com.intel.arrow " ./ -rl
./java/adapter/avro/pom.xml
./java/adapter/jdbc/pom.xml
./java/adapter/orc/pom.xml
./java/algorithm/pom.xml
■ \ :转义字符,\!、 \n等 #让特殊意义的元字符作普通字符使用
■ ^ :匹配字符串开始的位置
例: ^a、 ^the、 ^#
■ $ :匹配字符串结束的位置
例: word$
■ . :匹配除\n之外的任意的一个字符
例: go.d、 g..d
■ * :匹配前面子表达式0次或者多次
例: goo*d、 go.*d
■ [list] :匹配list列表中的一个字符
例: go[ola]d 、[abc]、 [a-z]、 [a-z0-9]
■ [^list] :匹配任意不在list列表中的一个字符
例: [^a-z]、 [^0-9]、 [^A-Z0-9]
■ \{n,m\} :匹配前面的子表达式n到m次,有\{n\}、 \{n,\}、\{n,m\}三种格式
例: go\{2\}d、 go\{2,3\}d、 go\{2,\}d
注意:“o{1,}” 等价于 “o+” ;“o{0,}” 则等价于 “o*”
示例:
grep -n 'the' test.txt #文件检索出带‘the’的行并显示行号
grep -vn 'the' test.txt #文件反向检索出不带‘the’的行并显示行号
grep -n 'sh[oi]rt' test.txt #文件检索出带‘short’或‘shirt‘的行并显示行号
grep -n 'oo' test.txt #文件检索出至少带连续oo的行并显示行号
grep -n 'o\{2\}' test.txt #文件检索出至少带连续oo的行并显示行号
grep -n 'o\{2,\}' test.txt #文件检索出至少带连续oo的行并显示行号
grep -n '[^w]oo' test.txt #文件检索出连续oo前面不带w的行并显示行号
grep -n '^[^w]oo' test.txt #文件检索出除w外,任意*oo开头的行并显示行号
grep -n ' [^a-z]oo ' test.txt #文件检索出连续oo前面不是小写字母的行并显示行号
grep -n '[0-9]' test.txt #文件检索出包含数字的行并显示行号
grep -n '[^0-9]' test.txt #文件检索出不包含纯数字的行并显示行号,非纯数字也会匹配
grep -n '[^#]' test.txt #文件检索出不包含#的行并显示行号
grep -n '^the' test.txt #文件检索出以‘the’开头的行并显示行号
grep -n ‘^[a-z] ' test.txt #文件检索出以小写字母开头的行并显示行号
grep -n ‘^[A-Z] ' test.txt #文件检索出以大写字母开头的行并显示行号
grep -n '^[^a-zA-Z]' test.txt #文件检索出不以字母开头的行并显示行号
grep -n '\.$' test.txt #文件检索出以 . 号结尾的行并显示行号
grep -n '^$' test.txt #文件检索出空行并显示行号
grep -n 'w..d' test.txt #文件检索出带有w开头,d结尾,中间两个任意字符的行并显示行号
grep -n 'ooo*' test.txt #文件检索出带有连续oo或两个0以上的行并显示行号
grep -n 'oo*' test.txt #文件检索出带有o或一个0以上的行并显示行号
grep -n 'w.*d' test.txt #文件检索出带有w开头,d结尾,中间任意字符也可中间什么也没有的行并显示行号
grep -n '[0-9][0-9]*' test .txt #文件检索出带有数字的行并显示行号
date --set="Fri August 14 3:08:10 EDT 2020"
date --set="Wed 2020-12-23 16:06:06 CST"
tee - read from standard input and write to standard output and files
同时输出到标准输出和文件
# cat txt > test
# cat txt | tee test1
hello, world
cat /etc/issue
sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具,windows端需要支持ZModem的telnet/ssh客户端(比如SecureCRT)。注意:该方法的传输速度比较慢,推荐使用中小文件的传输。
yum install -y lrzsz
chmod u+x file.sh
表示用户权限中,增加执行权限
Linux系统中的每个文件和目录都有访问许可权限,
用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
文件或目录的访问权 限分为只读,只写和可执行三种。
这里显示的权限是依次排列的,分别为:[用户][同组][其他]
用户权限,就是你自己的权限。英文:user,简写:u(覆盖标号123)
用户组权限,就是和你同组的人的权限。英文:group,简写:g(覆盖标号456)
其他权限,就是不和你同组的人的权限。英文:others,简写:o(覆盖标号789)
所有人的权限,英文:all,简写:a
r, 即Read,读,权限值为4
w,即Write,写,权限值为2
x,即eXecute,执行,权限值为1
-,在标号0位置,表示普通的文件
-,其他位置,表示对应权限未开启,不具备权限
d,即directory,表示目录文件
无任何权限:数字0表示
开所有权限:数字7表示,即7=4+2+1
chmod 命令是用于改变文件或目录的访问权限。
+ 表示增加权限,如u+x, u+r, u+w, g+w, g+r, o+r, a+r等
- 表示取消权限,如u-x, u-r, u-w, g-w, g-r, o-r, a-r等
= 表示赋予给定权限,并取消其他所有权限(如果有的话,如原来u是rwx,设置u=r,u就剩r)
sudo chown -R sparkuser:sparkuser Row_Gazelle_plugin/
在CentOS8.0中默认不再支持ntp软件包,时间同步将由chrony来实现;
可添加wlnmp源,来安装ntp服务
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
dnf install wntp -y
ntpdate gar.corp.intel.com
echo "*/3 * * * * ntpdate gar.corp.intel.com &> /dev/null" > /tmp/crontab
crontab /tmp/crontab
find ./ -mtime +21 -name "*.*" -exec rm -Rf {} \;
/home/lifeccp/dicom/studies :准备要进行清理的任意目录
-mtime:标准语句写法
+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
“.”:希望查找的数据类型,".jpg"表示查找扩展名为jpg的所有文件,""表示查找所有文件
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} ; :固定写法,一对大括号+空格+/+;
执行前一条或前几条命令,这时候我们可以用负数表示,比如!-1代表上一条刚执行的命令,!-2代表倒数第二条命令,以此类推。另外!!也可以代表上一条刚执行的命令,与!-1的作用一样。
Linux标准输入、输出设备主要是键盘和显示器,详细介绍如下表所示。
输出重定向
just means that
< /dev/null is used to instantly send EOF to the program,
so that it doesn't wait for input (/dev/null, the null device, is a special file that discards all data written to it, but reports that the write operation succeeded,
and provides no data to any process that reads from it,
yielding EOF immediately). & is a special type of command separator used to
background the preceding process.
gcc -march=skylake-avx512 -dM -E - < /dev/null | egrep “SSE|AVX” | sort
# 以后台进程执行启动 grafana 命令,& 放在命令到结尾,表示后台运行
nohup ./bin/grafana-server start > grafana.log 2>&1 &
# 2>&1 解释:将标准错误输出(2 表示)重定向到标准输出(&1 表示) ,标准输出(&1) 再被重定向输入到 grafana.log 文件中。
[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示
[root@redhat box]# cat file.out
a.txt
[root@redhat box]# cat file.err
ls: b.txt: No such file or directory
一般来说, “1>” 通常可以省略成 “>”.
即可以把如上命令写成: ls a.txt b.txt >file.out 2>file.err
有了这些认识才能理解 “1>&2” 和 “2>&1”.
1>&2 正确返回值传递给2输出通道 &2表示2输出通道
如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.
举个例子.
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
[root@redhat box]# cat file.out
ls: b.txt: No such file or directory
a.txt
现在, 正确的输出和错误的输出都定向到了file.out这个文件中, 而不显示在前端.
补充下, 输出不只1和2, 还有其他的类型, 这两种只是最常用和最基本的.
egrep即扩展grep。等同于grep -E 。 可用于扩展正则表达式
# 如,匹配gd,god
grep –nE ‘go?d’ regular.txt
例如:匹配god,good,goood等等字符串。
grep –nE go+d’ regular.txt
#!/bin/bash
echo "\$#:" $#
echo "\$0:" $0
echo "\$1:" $1
echo "\$2:" $2
echo "\$@:" $@
echo "\$*:" $*
echo "\$$:" $$
echo "\$?:" $?
# bash shell.sh 1 2 3 4 5
$#: 5
$0: shell.sh
$1: 1
$2: 2
$@: 1 2 3 4 5
$*: 1 2 3 4 5
$$: 107543
$?: 0
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。
但是当它们被双引号" "包含时,就会有区别了:
“$*” 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。
# BASEDIR=$(dirname software/llvm-12.0.0.src.tar.xz)
# echo $BASEDIR
software
# BASEDIR=$(dirname software)
# echo $BASEDIR
.
# dirname --h
Usage: dirname [OPTION] NAME...
Output each NAME with its last non-slash component and trailing slashes
removed; if NAME contains no /'s, output '.' (meaning the current directory).
-z, --zero end each output line with NUL, not newline
--help display this help and exit
--version output version information and exit
Examples:
dirname /usr/bin/ -> "/usr"
dirname dir1/str dir2/str -> "dir1" followed by "dir2"
dirname stdio.h -> "."
反单引号是西方符号,主要用在linux的bash中。
在bash中,其用法同$()一样,用``括起来的内容代表一个变量.
# echo `ls`
anaconda-ks.cfg Desktop Documents
# echo $(ls)
anaconda-ks.cfg Desktop Documents
这是最佳查看方式
cat /etc/os-release
每个系统都存在的系统变量
# echo $OSTYPE
linux-gnu
# /etc/os-release is a standard way to query various distribution
# information and is available everywhere
LINUX_DISTRIBUTION=$(. /etc/os-release && echo ${ID})
linux中sed中的动作i是插入,i的后面可以接字符串,该字符串会在当前指定行的上一行出现。a是添加a的后面可以接字符串,该字符串会在当前指定行的下一行出现。
&& 可以串联几个shell命令,在一行语句中
sed -i "s/192.168.0.3/192.168.0.5/g" `grep "192.168.0.3" -rl /home/www/src`
sed -i "s/github.com\/oap-project/gitee.com\/zhixingheyi-tian/g" `grep "github.com/oap-project" -rl ./`
$ lsblk -d -o name,rota
NAME ROTA
sda 0
sdb 1
sdc 1
sdd 1
sde 1
sdf 1
sdg 1
sdh 1
sdi 1
sdj 1
sdk 1
sdl 1
sdm 1
返回结果为0说明是SSD硬盘,如果返回结果为1,说明是转动盘HDD类的硬盘。
cat /sys/block/sda/queue/rotational
# 返回0:SSD盘
# 返回1:SATA盘
# hdparm -tT --direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 2170 MB in 2.00 seconds = 1084.47 MB/sec
Timing O_DIRECT disk reads: 3134 MB in 3.00 seconds = 1044.47 MB/sec
在shell脚本中,经常遇到 “=~” ,表达形式如下:
[[ “string” =~ pattern ]]
“=~” 用于判断string和右边的正则表达式pattern是否匹配
# cat hh.sh
#!/bin/bash
INT=-15a
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
echo "INT is an integer."
else
echo "INT is not an integer." >&2
exit 1
fi
# sh hh.sh
INT is not an integer.
正则表达式^表示起始,$表示结束,?表示0个或者1个
# ssh localhost
ssh: connect to host localhost port 22: Connection refused
检查 /etc/ssh/sshd_config
1、常见SSH服务器监听的选项以下:
Port 22 //监听的端口为22
Protocol 2 //使用SSH V2协议
ListenAdderss 0.0.0.0 //监听的地址为所有地址
UseDNS no //制止DNS反向解析
2、常见用户登录控制选项以下:
PermitRootLogin no //制止root用户登录
PermitEmptyPasswords no //制止空密码用户登录
LoginGraceTime 2m //登录验证时间为2分钟
MaxAuthTries 6 //最大重试次数为6
AllowUsers user //只允许user用户登录,与DenyUsers选项相反
3、常见登录验证方式以下:
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用秘钥验证
AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件
如果Port 改为 10000, 须
ssh -p10000 localhost
To avoid having to do this every time you log in to your remote server, you can create or edit a configuration file in the ~/.ssh directory within the home directory of your local computer.
参见:
https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys
Host remote_alias
HostName remote_host
Port port_num
Linux alias 命令用于设置指令的别名,用户可利用 alias,自定指令的别名。
它可以使您以一种更简单和易于记忆的方式执行命令,而不必每次都键入完整的命令。
若仅输入 alias,则可列出目前所有的别名设置。
alias 的效果仅在该次登入的操作有效,若想要每次登入都生效,可在 .profile 或 .cshrc 中设定指令的别名。
alias ssh='ssh -p 10000'
.bash_profile是当用户登录后被加载的文件,随后该文件会显式调用 .bashrc,其内容主要为设置环境变量。
bashrc是每次启动新的shell时,或者被 .bash_profile调用时加载的文件,其内容主要为设置功能shopt和设置别名alias,也可用来设置环境变量。
在登陆情况下,执行顺序通常总是如下的: 执行/etc/profile ⇒ 执行~/.bash_profile ⇒ 执行~/.bashrc ⇒ 执行/etc/bashrc ⇒ 执行~/.bash_profile剩余的语句。
只有在非交互式登陆的情况下,才会只有: 执行~/.bashrc ⇒ 执行/etc/bashrc。
如果要更改,更推荐 ~/.bash_profile,因为这样的更改只会被执行一次。然而实践中人们通常修改 ~/.bashrc,因为其无论用什么方式启动新的shell,其都会被执行。
shell是用户与linux系统进行交互的媒介,而bash是目前linux上最常用的shell。
ping 的时候 不要带上 http 前缀
$ ping dt.cn-hangzhou.maxcompute.aliyun.com
PING dt.cn-hangzhou.maxcompute.aliyun.com (47.97.242.31) 56(84) bytes of data.
64 bytes from 47.97.242.31 (47.97.242.31): icmp_seq=1 ttl=38 time=13.2 ms
64 bytes from 47.97.242.31 (47.97.242.31): icmp_seq=2 ttl=38 time=13.2 ms
64 bytes from 47.97.242.31 (47.97.242.31): icmp_seq=3 ttl=38 time=13.2 ms
^C
--- dt.cn-hangzhou.maxcompute.aliyun.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 13.227/13.230/13.236/0.004 ms
反引号,英文名为backquote或backtick,位于键盘左上角,和波浪号(~)在同一个键上。
反引号在Linux shell命令行中有特殊的含义:反引号间的内容,会被shell先执行。其输出被放入主命令后,主命令再被执行。
$ ps axo pid,ppid | grep 36713
36713 1
36714 36713
如上 36713 的父进程 为1
36714 的父进程为 36713
可按照时间进行排列
$ ls -ltr *jar
-rw-r--r-- 1 root root 14519325 Nov 1 20:33 trino-main-414.jar
-rw-r--r-- 1 root root 12583796 Nov 6 10:23 spark-catalyst_2.12-3.3.2.jar
-rw-r--r-- 1 root root 11015145 Nov 6 10:27 spark-core_2.12-3.3.2.jar
-rw-r--r-- 1 root root 8879927 Nov 6 10:27 spark-sql_2.12-3.3.2.jar
-rw-r--r-- 1 root root 714249 Nov 7 20:58 spark-hive_2.12-3.3.2.jar