第一次发博客,简单记录下linux几个命令的使用。

1. Linux查看进程运行的完整路径方法:

netstat -nltp | grep 3306 Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。 cwd符号链接的是进程运行目录; exe符号连接就是执行程序的绝对路径; cmdline就是程序运行时输入的命令行命令; environ记录了进程运行时的环境变量; fd目录下是进程打开或使用的文件的符号连接

2.linux 统计一个文件出现某个单词的次数:

(1) grep -o 'pJHlBzlMqeZWDXm0n9ji50pQUOhFIFPpC8Uz' imc-manager.log | wc -l grep -o 一行数据里面有多个相同,会统计相同的次数 grep 一条数据里面有多个相同,会统计一次次数 -o, --only-matching (-o 每行展示过滤的字符串,单独拿出来搜索的字符串) Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. wc -l 统计行数,这样达到统计出现次数的目的 (2) 如果是多个字符可以用正则:grep -o 'is\|th' ttt.txt (3) awk -v RS="@#$j" '{print gsub(/is/,"&")}' ttt.txt

3. ls 命令详解

(1) ls 详细命令 ls -l 打印详细信息,每个文件一行 -开头是文件, d 开头是目录 -h, --human-readable -r, --reverse reverse order while sorting -R, --recursive list subdirectories recursively -s, --size print the allocated size of each file, in blocks -S sort by file size -t sort by modification time, newest first (2)衍生出过滤文件和文件夹: 过滤文件: ll | grep '^-' 统计文件数目: ll | grep '^-' | wc -l 过滤文件夹数据:ll | grep '^d' | wc -l (3) 过滤以指定结尾的文件:ls -l | grep 'file$' (4) ls 支持一下查看多个目录,ls dir1 dir2 dir3 ... ls * 可以理解为对当前目录进行递归的ls

4. find 查找文件命令

也可以用find 进行一些查找。 比如:


​ 查找名称以log结尾且类型是文件的。 从当前目录开始找最少三级目录后面的。



#### 5. 关于文件夹

​ 文件夹也可以用vim 编辑,用vim 编辑打开一个文件。里面保存了相关的文件夹信息和相关文件信息,比如:

root@d7d2b0d3c93d:/# ls -R /test/ /test/: mytest test.txt /test/mytest: test.txt


​ /test 目录结构如上。vim 查看目录信息: 可以看到包含的文件和目录信息

![image-20211112124328735](.\linuxpic\image-20211112124328735.png)

#### 6. 关于linux查看内核以及操作系统

- 方法一

[root@localhost ~]# hostnamectl Static hostname: localhost.localdomain Icon name: computer-vm Chassis: vm Machine ID: 67cabb1b285145099dc1b3848ed635cf Boot ID: 2fc172b00b3f4ab1b310287aecfecd17 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-1160.el7.x86_64 Architecture: x86-64


- 方法二

[root@localhost ~]# cat /proc/version Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020


#### 7. 一些常见的命令

linux 命令学习网站: <http://ipcmen.com/>



- top

参考: [top命令][https://halfcoke.github.io/2020/8649918/index.html]

top -b -n 1


​ 上面命令,-b 指定以批处理方式进行处理; -n 1 代表执行一次,这样可以用于输出到文件中。

- 进阶命令

参考[进阶命令][https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/pstack.html]

- & && || | 区别

command1 & command2 & command3 三个命令同时执行; 如果& 在最后,比如 cmd1 & 表示以守护进程方式执行cmd1

command1; command2; command3 不管前面命令执行成功没有,后面的命令继续执行。顺序执行

command1 && command2 只有前面命令执行成功,后面命令才继续执行

command1 || command2 如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2)

command1 | command2 表示前面的输出作为后面参数的输入执行

- ss

ss是Socket Statistics的缩写,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。例如: 查看所有的tcp 相关命令如下

ss -nlatp
  • lsof

lsof (list open files), 是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。例如, 根据指定端口查看:

[root@k8smaster2 redis-5.0.4]# lsof -i:6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 3084 root 6u IPv4 50482 0t0 TCP localhost:6379 (LISTEN)
  • 读取文件

cat -n test.sh 读取文件并且显示行号 nl test.sh 等价于上面, 与上面的区别是会将空行去掉, 不计算行号。 可以加参数。 nl -ba test.sh 等价于上面,空行也计算行号 vim, 之后 set nu 也可以展示行号。 vim 快速定位到某一行可以 输入行号然后输入大写G less 查看, -N 可以查看行号 grep -n "findstr" *.sh 也可以搜索的时候显示行号 sed 简单使用: 参考: <https://www.runoob.com/linux/linux-comm-sed.html> 可以打印指定行内容,也可以过滤指定行内容

sed -n '1,3p' test.sh    # 打印1-3行
nl -ba test.sh | sed '1,3d' # 打印除了1到3 行的所有内容
  • echo 和 echo -e 区别: 对转义字符的输出不一样,比如echo "\n"会直接输出\n,而echo -e "\n"会输出一个换行。
[root@redisnode1 redis]# echo -e "ddd\nxxx"
ddd
xxx
[root@redisnode1 redis]# echo "ddd\nxxx"
ddd\nxxx
  • < << > >>区别
< :输入重定向; 
<< :标准输入来自命令行的一对分隔号的中间内容
> :输出重定向;
>> :输出重定向,进行追加,不会覆盖之前内容;

例如:

[root@k8smaster2 <sub>]# cat 1.txt 
hello
[root@k8smaster2 </sub>]# wall < 1.txt # 输入重定向, 广播文件内容

Broadcast message from root@k8smaster2 (Wed Feb 16 06:04:44 2022):

hello

测试标准输入来自命令行的一对分隔号的中间内容 (EOT、EOF 或者其他任意的A、B 都可以,只要开始和结束是成对出现的就可以)

cat <<EOT
this
is
EOT

结果:

this 
is

也可以直接输出到文件:

cat >> /etc/hosts << EOF
192.168.13.103 k8smaster1
192.168.13.104 k8snode1
192.168.13.105 k8snode2
EOF
  • du disk usage 命令用于显示目录或文件的大小
[root@k8smaster2 ~]# du -h --max-depth=1 | grep redis # --max-depth 指定深度,默认的话会进行递归查看目录大小
167M ./redis
  • EUID

判断一个用户是否是root 用户,可以用EUID = 0 进行判断

[root@k8smaster01 <sub>]# echo $EUID
0
[root@k8smaster01 </sub>]# id
uid=0(root) gid=0(root) groups=0(root)
[root@k8smaster01 ~]# env
XDG_SESSION_ID=3
HOSTNAME=k8smaster01
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.13.1 59620 22
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/javatest/jdk8/jdk1.8.0_291//bin:/root/bin
PWD=/root
JAVA_HOME=/home/javatest/jdk8/jdk1.8.0_291/
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_CONNECTION=192.168.13.1 59620 192.168.13.107 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
  • fuser 使用文件或文件结构识别进程

例如根据TCP 端口杀死文件的命令:

fuser -k 7687/tcp
  • awk 结合xargs 杀死指定进程

awk: 可以理解为文本捕获处理工具,用于提取相关信息 xargs: eXtended ARGuments, 给命令传递参数的一个过滤器,也是组合多个命令的一个工具。可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白; xargs 能够捕获一个命令的输出,然后传递给另外一个命令。

jps -l | grep bs-school| awk '{print $1}'|xargs kill -9
  • diff 文件比对:diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

比如,如下两个文件:

[root@redisnode1 container-test]# cat t1.txt 
1
11
111
[root@redisnode1 container-test]# cat t2.txt
1
12

444
[root@redisnode1 container-test]# diff t1.txt t2.txt -yw
1 1
11 | 12
111 |
> 444

解释: "|"表示前后2个文件内容有不同;"<"表示后面文件比前面文件少了1行内容;">"表示后面文件比前面文件多了1行内容

  • chroot

在 linux 操作系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,操作系统的目录结构将以指定的位置作为/位置。 比如:

[root@redisnode1 chroot]# sudo chroot ./new_root/ sh
/ # ls
bin
/ # pwd
/
/ # id
uid=0 gid=0 groups=0
/ # exit
[root@redisnode1 chroot]#
  • pivot_root

改变当前工作目录的所有进程或线程的工作目录. 这个跟chroot的就有很大的区别,chroot是只改变即将运行的某进程的根目录; pviot_root主要是把整个系统切换到一个新的root目录,然后去掉对之前rootfs的依赖,以便于可以umount之前的文件系统(pivot_root需要root权限)

  • 关于信号量、队列相关
[root@redisnode1 <sub>]# ipcs    # 查看信号量

------ Message Queues --------
key msqid owner perms used-bytes messages

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status

------ Semaphore Arrays --------
key semid owner perms nsems

[root@redisnode1 </sub>]# ipcmk -Q # 创建信号量
Message queue id: 0
[root@redisnode1 <sub>]# ipcmk -Q
Message queue id: 1
[root@redisnode1 </sub>]# ipcs

------ Message Queues --------
key msqid owner perms used-bytes messages
0x812b53d6 0 root 644 0 0
0x0d1397ef 1 root 644 0 0

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status

------ Semaphore Arrays --------
key semid owner perms nsems
  • 防火墙相关
firewall-cmd --zone=public --add-port=9443/tcp --permanent    # 开放指定端口
firewall-cmd --query-port=9443/tcp # 查看指定端口是否开放
firewall-cmd --reload # 重启防火墙
firewall-cmd --list-port # 查看哪些端口是开放的