Linux 常用命令

6 篇文章 1 订阅

shell

#! 是 Unix/Linux 里面用于指示脚本解释器的特定语法,位于脚本中的第一行,以 #! 开头,接着是该脚本的解释器,通常是 /bin/bash、/usr/bin/python 之类。

关于 #! 其英文名称为“shebang”,其中的“she” 来源于 “#”的发音 “sharp”,“bang”来源于“!”,故如此命名。

Linux 中国翻译组核心成员 GOLinux 提议将此专有名称翻译为“释伴”。

  • #!/bin/bash 是直接指定了应该去哪里找 bash
  • #!/usr/bin/env bash 则是告诉系统去 $PATH 包含的目录中挨个去找吧,先找到哪个,就用哪个

可参考: https://stackoverflow.com/questions/16365130/what-is-the-difference-between-usr-bin-env-bash-and-usr-bin-bash?spm=a2c6h.12873639.article-detail.9.13298861RwnW9H

Top 命令

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


在这里插入图片描述

top和ps查看线程

在Linux上显示某个进程的线程的几种方式。

方法一:PS

在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。

1.$ ps -T -p

方法二: Top

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

1.$ top -H

要让top输出某个特定进程并检查该进程内运行的线程状况:

2.$ top -H -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 — 进程名称(命令名/命令行)
按进程的CPU使用率排序

运行top命令后,键入大写P。
有两种途径:

a) 打开大写键盘的情况下,直接按P键
b) 未打开大写键盘的情况下,Shift+P键

按进程的内存使用率排序

运行top命令后,键入大写M。
有两种途径:

a) 打开大写键盘的情况下,直接按M键
b) 未打开大写键盘的情况下,Shift+M键

pgrep

pgrep =根据名称和其他属性查找或发信号通知进程,pgrep查找当前正在运行的进程并列出与选择标准匹配的进程ID。

# pgrep -f HistoryServer
44063

# top -p `pgrep -f HistoryServer`

在这里插入图片描述

pidof

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
diff

“|”表示前后2个文件内容有不同
“<”表示后面文件比前面文件少了1行内容
“>”表示后面文件比前面文件多了1行内容

set 指令能设置所使用shell的执行方式

常见的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

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

Debian 相关

安装vim

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
zip OAP-TPCDS-TOOL.zip -r OAP-TPCDS-TOOL
tar
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

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

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
# grep "<groupId>com.intel.arrow</groupId>" ./ -r
./java/adapter/avro/pom.xml:    <groupId>com.intel.arrow</groupId>
./java/adapter/avro/pom.xml:      <groupId>com.intel.arrow</groupId>
./java/adapter/avro/pom.xml:      <groupId>com.intel.arrow</groupId>
./java/adapter/jdbc/pom.xml:        <groupId>com.intel.arrow</groupId>

l 参数 带有去除 print 和去重 功能

# grep "<groupId>com.intel.arrow</groupId>" ./ -rl
./java/adapter/avro/pom.xml
./java/adapter/jdbc/pom.xml
./java/adapter/orc/pom.xml
./java/algorithm/pom.xml

grep 语法
■ \  :转义字符,\!、 \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  #文件检索出带有数字的行并显示行号 
timedatectl
date --set="Fri August 14 3:08:10 EDT 2020"
date --set="Wed 2020-12-23 16:06:06 CST"
tee

tee - read from standard input and write to standard output and files
同时输出到标准输出和文件

# cat txt  > test
# cat txt | tee  test1
hello, world

查看 ubuntu 版本
cat /etc/issue
SZ RZ

sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具,windows端需要支持ZModem的telnet/ssh客户端(比如SecureCRT)。注意:该方法的传输速度比较慢,推荐使用中小文件的传输。

yum install -y lrzsz
chmod

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)
chown
sudo chown -R sparkuser:sparkuser Row_Gazelle_plugin/
CentOS 校对时间

在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
Ubuntu 更改时区 timezone

sudo tzselect
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mtime
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标准输入、输出设备主要是键盘和显示器,详细介绍如下表所示。
在这里插入图片描述
输出重定向
在这里插入图片描述

Linux输入重定向
在这里插入图片描述

/dev/null

</dev/null is used to avoid having the script wait for input.
just means that </dev/null provides empty input to the script

< /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

egrep即扩展grep。等同于grep -E 。 可用于扩展正则表达式

# 如,匹配gd,god   
grep –nE ‘go?d’ regular.txt
例如:匹配god,good,goood等等字符串。
grep –nE go+d’ regular.txt
shell 脚本后参数解析
#!/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表示没有错误,其他表示有错误

$* 和 $@ 的区别

当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间以空格来分隔。

但是当它们被双引号" "包含时,就会有区别了:
“$*” 会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

dirname
# 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
查看不同linux 系统版本

这是最佳查看方式

 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})
sed 命令

linux中sed中的动作i是插入,i的后面可以接字符串,该字符串会在当前指定行的上一行出现。a是添加a的后面可以接字符串,该字符串会在当前指定行的下一行出现。

&&

&& 可以串联几个shell命令,在一行语句中

使用 sed进行全局字符串变量替换
​​​​​​​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 ./`

不带g,只对每行第一个命中的字符串,进行匹配

  • sed -i直接对文件进行操作
# 对每行匹配到的第一个字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt 

# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' ab.txt 

# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d'  ab.txt  

# 特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' ab.txt 

# 特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' ab.txt

# 把匹配行中的某个字符串替换为目标字符串
sed -i '/匹配字符串/s/源字符串/目标字符串/g' ab.txt

# 在文件ab.txt中的末行之后,添加bye
sed -i '$a bye' ab.txt   

# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' ab.txt 
查看磁盘是HDD 还是 SSD
$ 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盘
ethtool

查看网卡速度
ethtool enp0s3
在这里插入图片描述

测试硬盘的读写速度
# 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
 
linux shell “=~”

在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个

sshd
# 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

~/.ssh/config
Host remote_alias
    HostName remote_host
    Port port_num
alias

Linux alias 命令用于设置指令的别名,用户可利用 alias,自定指令的别名。

它可以使您以一种更简单和易于记忆的方式执行命令,而不必每次都键入完整的命令。

若仅输入 alias,则可列出目前所有的别名设置。

alias 的效果仅在该次登入的操作有效,若想要每次登入都生效,可在 .profile 或 .cshrc 中设定指令的别名。

alias ssh='ssh -p 10000'
其他修改端口方式

可参见:
https://cloud.tencent.com/developer/article/1635355

更改配置文件·~/.ssh/config·或·/etc/ssh/ssh_config·的Port选项即可。

scp 指定端口

scp -P xxx root@9.134.80.xx:/data/home/xx ./

~/.bash_profile vs ~/.bashrc
主要 difference

.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与bash

shell是用户与linux系统进行交互的媒介,而bash是目前linux上最常用的shell。

ping

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

可按照时间进行排列

$ 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
查看当前用户及用户组
# groups
root
# groups root
root : root
# whoami
root

$ id
uid=0(root) gid=0(root) groups=0(root)
非root 用户 sudo 免密

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

遇到该问题,处理步骤:

第一步,在root 用户下
chmod +w /etc/sudoers

给所有用户,增加写功能权限

chmod ugo+w /etc/sudoers

第二步,切换至 hadoop 用户,
在 /etc/sudoers 添加以下行

hadoop ALL=NOPASSWD:ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
hadoop ALL=NOPASSWD:ALL

建议在root用户下直接修改,而不是 更改 /etc/sudoers权限,再在hadoop用户修改。否则容易遇到以下错误。

可参考: https://zhuanlan.zhihu.com/p/64749299

$ sudo yum install dnf
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

如果遇到以上错误,则恢复文件原先的权限

chmod 640 /etc/sudoers
免密登录

Linux, MAC 同理
将A机器 ~/.ssh/下的公钥id_rsa.pub 内容copy 到 B机器 的 ~/.ssh/authorized_keys 里,直接追加即可。

这样的 A 机器 可以免密登录到 B 机器。

已删除文件被进程所占用

有时,文件可能已经被删掉了,但有进程依然在使用它。在进程运行期间,Linux 不会释放该文件的存储空间。你需要找出这个进程然后重启这个进程。

可以使用以下命令来定位进程

lsof/|grep deleted
查看网卡流量
$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 29774890007 92643682    0    0    0     0          0         0 29774890007 92643682    0    0    0     0       0          0
  eth0: 420497785376 338027910    0    0    0     0          0         0 57396655900 103860365    0    0    0     0       0          0

从返回信息看到, eth0 的流量最大。(不看 lo 这一项)

最左边的表示接口的名字,

  • Receive 表示收包,
  • Transmit 表示发包,
  • bytes 表示收发的字节数;
  • packets 表示收发正确的包量;
  • errs 表示收发错误的包量;
  • drop 表示收发丢弃的包量;

注意:lo 是回环接口,是一个虚拟网络接口,并非真实存在,并不真实地从外界接收和发送数据包,而是在系统内部接收和发送数据包,因此虚拟网络接口不需要驱动程序。因为:如果包是由一个本地进程为另一个本地进程产生的,它们将通过外出链的 lo 接口,然后返回进入链的 lo 接口。

FQA

bash终端下命令显示乱码解决
bash终端下命令显示乱码
试试设置系统显示编码格式为utf-8

export LANG="en_US.UTF-8" 
export LC_ALL="en_US.UTF-8"

如果可以的话将上条语句添加到 ~/.bashrc中
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值