----------------------------------------------------------v2--------------------------------------------------------------------
大纲
虚拟文件系统
可能每个目录用来挂在的文件系统是不一样的,
//列出系统信息
[parallels@localhost /]$ uname -a
Linux localhost.localdomain 4.18.0-305.10.2.el8_4.x86_64 #1 SMP Tue Jul 20 17:25:16 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
//查看所有的系统调用
[parallels@localhost /]$ man 2 syscalls
//查询系统调用中的acct的说明
[parallels@localhost /]$ man 2 acct
//查看公共库函数
[parallels@localhost /]$ man 3
linux 中 man 1 man2 man3 …man N的区别
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
9 其他(Linux特定的), 用来存放内核例行程序的文档。
//本机器支持的shell的版本
[parallels@localhost /]$ cat /etc/shells
//切换到指定的shell上面
[parallels@localhost ~]$ chsh -s shell路径
//列出根目录下的文件
[parallels@localhost ~]$ ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
tmp:存进程启动后的临时数据,这些数据有可能存在内容中,所以我们也称之为 内存文件系统
usr:并不是user,而是unix system resource的缩写 ,里面存放 系统资源 和命令的执行文件
proc:存放 unix下的进程及内核信息,通过 ls /proc 可查看到进程id
var:是 variable date file 即 可变数据文件,存储运行时的数据,通常会存日志文件
boot:存放和启动相关的文件
dev:设备信息
//echo为标准输出流文件,每个文件都有自己的标准输出流,当我们在终端执行 echo时,因为终端监听到了 这个输出流 所以会在控制台打印出来
[parallels@localhost bin]$ echo "aaa"
aaa
//>重定向输出符号
[parallels@localhost bin]$ echo "aaa" > 1.txt
//创建管道文件
[root@localhost /]# mkfifo aaa
//显示文件类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接,软链接;“|”表示FIFOs 即管道;(aaa| 后面的| 表示aaa是管道文件)
[root@localhost /]# ls -F
aaa| boot/ etc/ lib@ media/ opt/ root/ sbin@ sys/ usr/
bin@ dev/ home/ lib64@ mnt/ proc/ run/ srv/ tmp/ var/
//查看每个目录对应的文件系统
[parallels@localhost ~]$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 1880996 0 1880996 0% /dev
tmpfs tmpfs 1909952 0 1909952 0% /dev/shm
tmpfs tmpfs 1909952 9536 1900416 1% /run
tmpfs tmpfs 1909952 0 1909952 0% /sys/fs/cgroup
/dev/mapper/cl-root xfs 41570476 5506144 36064332 14% /
/dev/mapper/cl-home xfs 20293632 233156 20060476 2% /home
/dev/sda1 ext4 999320 200412 730096 22% /boot
Home prl_fs 244810132 153677008 91133124 63% /media/psf/Home
iCloud prl_fs 244810132 153677008 91133124 63% /media/psf/iCloud
tmpfs tmpfs 381988 36 381952 1% /run/user/1000
//树形展示目录结构, -L 表示深度为1 即只展示一层,(具体指令参数可以通过 man tree来查看)
[parallels@localhost ~]$ tree / -L 1
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
//删除根目录下文件,rm就是remove的意思,-r表示 递归 -f表示强制(不会提示) 很危险 慎用
[parallels@localhost ~]$ rm -rf /
//查看命令在那里,如下查询rm指令目录是在 /usr/bin/rm路径下
[parallels@localhost ~]$ which rm
/usr/bin/rm
//当前所在路径
[root@localhost bin]# pwd
/bin
//$是求值符号,=两边不能有空格
[root@localhost bin]# a=$(pwd)
[root@localhost bin]# echo $a
/bin
//touch都认为是创建文件用的,如下图中 通过 man touch 内容 可知是改变文件时间用的,但是发现没有这个文件 他会帮忙创建一个
[root@localhost /]# touch aaa.txt
[root@localhost /]# ls
aaa.txt boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
//vim 编辑文件 但是有很多指令,需要一定学习成本,nano也可编辑但是相对简便,cat 全文输出内容,在线上服务器 要慎用
[root@localhost /]# vim aaa.txt
[root@localhost /]# nano aaa.txt
[root@localhost /]# cat aaa.txt
fsjalk
UNIX文件内容显示命令cat、more、less、head和tail
管道:管道是进程间通信的手段
//通过管道链接两个指令
[root@localhost /]# man ls | less
//tee 如果什么也不做的话 就是一个输入输出,没有任何工作
[root@localhost /]# ls | tee | less
//但是tee 可以将内容保存在一个文件中,file 是自定义的文件名称
[root@localhost /]# ls | tee file | less
//我们也可以通过grep 查找 看到 file 被 tee创建好了
[root@localhost /]# ls | grep file
file
//我们可以通过grep 查找
[root@localhost /]# ls | grep file
file
//管道前也可以是 cat 文件名,这样我们可以判断文件中是否存在某一个关键字,线上慎用cat
[root@localhost /]# cat aaa.txt | grep hellp
//同上,也是循环所以内容查询,线上慎用
[root@localhost /]# grep hellp aaa.txt
//查找指定格式的文件
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java"
/usr/share/doc/python3-cryptography/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java
//查询找到了多少个文件
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | wc -l
1
//查询找到文件的文件名字节数
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | wc -c
105
如果想查看找到的所有文件中内容的行数或字节数 需要用到xargs指令
//会把所有查询到的文件 都打印出来,xargs 后面的 -I 表示定义占位符
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} cat {}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.security.AlgorithmParameters;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PrivateKey;
。。。
//所有文件行号总和是 416行
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} cat {} | wc -l
416
//所有文件字节数总和是 14456个字节
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} cat {} | wc -c
14456
//将查询到的 文件删除
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} rm {}
网络
//远程登录到本机
[root@localhost /]# ssh localhost
//远程复制文件
[parallels@localhost ~]$ scp aaa.txt parallels@localhost://home/parallels/1.txt
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:bai3f25yg+BEvvOvhJ9O9Al9iTf5SuiDCuzAOJPOGyg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
parallels@localhost's password:
aaa.txt 100% 0 0.0KB/s 00:00
[parallels@localhost ~]$ ls
1.txt Desktop Downloads Music Public Videos
aaa.txt Documents fontconfig Pictures Templates
//查询ip
[parallels@localhost ~]$ ip addr
[parallels@localhost ~]$ ifconfig
//查询网络状态,socket状态
[parallels@localhost ~]$ netstat
//- n表示显示端口号 t表示tcp协议 l只显示连接中的链接 p表示显示程序名称
[parallels@localhost ~]$ netstat -ntlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN -
//
[parallels@localhost ~]$ ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data. //看到百度响应的是那个ip,这个是会进行DNS查询的,DNS是逐级缓存的结构,之后可能在本机就完成了
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=18.8 ms //使用UDP协议 发送round trip事件 即 一个来回,没有做过多事情,通过计算来回响应 获得延迟 以及丢包率
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=16.8 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=128 time=19.1 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=128 time=16.9 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=5 ttl=128 time=14.9 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=6 ttl=128 time=18.7 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=7 ttl=128 time=18.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=8 ttl=128 time=50.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=9 ttl=128 time=21.7 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=10 ttl=128 time=28.6 ms
//DNS查询
[parallels@localhost ~]$ host www.baidu.com
www.baidu.com has address 110.242.68.3
www.baidu.com is an alias for www.a.shifen.com.
www.baidu.com is an alias for www.a.shifen.com.
[parallels@localhost ~]$ host www.a.shifen.com
www.a.shifen.com has address 110.242.68.4
//dig 也可查询DNS信息
[parallels@localhost ~]$ dig www.a.shifen.com
;; Warning: Message parser reports malformed message packet.
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.a.shifen.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13549
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;www.a.shifen.com. IN A
;; ANSWER SECTION:
. 0 CLASS4096 OPT 10 8 qLP4ga+UI5Y=
;; ADDITIONAL SECTION:
www.a.shifen.com. 55 IN A 110.242.68.4
;; Query time: 14 msec
;; SERVER: 10.211.55.1#53(10.211.55.1)
;; WHEN: Sat Jun 18 10:19:39 CST 2022
;; MSG SIZE rcvd: 73
[parallels@localhost ~]$ curl www.baidu.com //会请求一次百度,并把响应内容打印出来
[parallels@localhost ~]$ curl www.baidu.com -I //获取响应的头信息
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Sat, 18 Jun 2022 02:22:11 GMT
Etag: "575e1f59-115"
Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
权限
三种权限:Read、Write、Execute (读、写、执行)
三种分组:User、Group、All(用户、组、所有人)
[parallels@localhost bin]$ ls -l
total 161180
-rwxr-xr-x. 1 root root 55040 Apr 27 2020 '[' //rwx 为当前用户 r-x为当前用户所在组 r-x为所有人
-rwxr-xr-x. 1 root root 33864 May 11 2019 ac
-rwxr-xr-x. 1 root root 25200 Jan 12 2021 aconnect
-rwxr-xr-x. 1 root root 34056 Mar 4 2021 addr2line
//r=4 w=2 x=1 rwx=4+2+1=7,该命令可以将文件权限全部放开
[parallels@localhost /]$ chmod 777 aaa.txt
//使用管理员身份创建用户
[parallels@localhost bin]$ sudo useradd test1
//使用管理员身份给用户设置密码
[parallels@localhost bin]$ sudo passwd test1
Changing password for user test1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
//切换到新用户
[parallels@localhost bin]$ su test1
//将用户test1 加入到 ramroll这个组里,我这里提示没有这个组
[parallels@localhost /]$ sudo usermod -a -G ramroll test1
usermod: group 'ramroll' does not exist
需要注意一点:删文件是 目录的权限,该文件是 文件的权限
----------------------------------------------------------v1--------------------------------------------------------------------
文件
1. vim fileName
这是⼀种最基本的⽅法,打开⽂件看⾏号
<这⾥有个快捷键 shift+g>⼀次跳到最后,同样的gg是跳到开始
**注意:**如果没有设置显⽰⾏号需要打开⽂件以后输⼊
;或者通过设置.vimrc,这种⽅式需要退出窗⼝重新
: set number<这中设置是⼀次性的>
登录⽣效。
2. cat -n fileName
[xiaodong@localhost ~]$ cat -n cat-demo
1 dsklnnsdklgh
2 dfbmnsldkgnd
3 fdsg
3. wc fimeName
$wc error.log.2022-05-07 //可空格分割查询多个文件
233919 1286288 16396952 error.log.2022-05-07
//233919:总行号; 1286288:单词数;16396952:字节数;error.log.2022-05-07:文件名
//只展示行号
$wc -l <error.log.2022-05-07
233919
关于显⽰空⾏和不显⽰空⾏
显⽰所有⾏号包括空⾏ | 显⽰所有⾏号不包括空⾏ |
---|---|
cat -n | cat -b |
nl -ba | nl -bt |
4 linux查看文件指定某行/某几行的内容
https://blog.csdn.net/HYZX_9987/article/details/122989386
5find指令
find 语法:find path [options] params ,在指定目录下查找文件
//在指定路径下搜索,全局搜索路径为 /
[parallels@localhost /]$ find usr/share/doc/python3-cryptography -name "*.java"
usr/share/doc/python3-cryptography/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java
//-iname 为忽略大小写
[parallels@localhost /]$ find usr/share/doc/python3-cryptography -iname "*.java"
usr/share/doc/python3-cryptography/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java
[parallels@localhost /]$
//在所有匹配的文件中查找 内容包含 moo关键字的 行
[parallels@localhost /]$ grep "moo" target*
//在当前标准输入流中查找,即 等待我们的输入
[parallels@localhost /]$ grep "haha"
fhksajjfhjas
fknsalfkjaks
hahahah
hahahah
hahahahahh
hahahahahh
^Z
[5]+ Stopped grep --color=auto "haha"
[parallels@localhost /]$
//列出home目录下所有的目录和文件 并 通过管道符 传给 grep 查询 包含book关键字的内容
[parallels@localhost /]$ find ~ | grep "book"
/home/parallels/.mozilla/firefox/0ukth4vr.default-default/bookmarkbackups
/home/parallels/.config/gtk-3.0/bookmarks
/home/parallels/.local/share/evolution/addressbook
/home/parallels/.local/share/evolution/addressbook/trash
/home/parallels/.local/share/evolution/addressbook/system
/home/parallels/.local/share/evolution/addressbook/system/contacts.db
/home/parallels/.local/share/evolution/addressbook/system/photos
/home/parallels/.cache/evolution/addressbook
/home/parallels/.cache/evolution/addressbook/trash
/home/parallels/.cache/mozilla/firefox/0ukth4vr.default-default/safebrowsing/social-tracking-protection-facebook-digest256.sbstore
/home/parallels/.cache/mozilla/firefox/0ukth4vr.default-default/safebrowsing/social-tracking-protection-facebook-digest256.vlpset
/home/parallels/.parallels/gtk-bookmarks.orig
/home/parallels/.parallels/gtk-bookmarks
[parallels@localhost /]$
使用管道注意要点:
1、只处理前一个命令正确输出,不处理错误输出
2、右边的命令必须要能够接收标准输入流,否则传递过程中数据会被抛弃
3、常用来接收管道数据的命令有:sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等
//grep -o 支持输入表达式 进一步进行过滤
[parallels@localhost /]$ grep "partical\[true\]" log.txt | grep -o "engine\[[0-9a-z]*\]"
//grep -v 支持过滤掉执行内容,如下为 过滤掉本身
[parallels@localhost /]$ ps -ef | grep -v "grep"
6、awk
语法:awk [options] ‘cmd’ file
一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
将切片直接保存在内建的变量中,$1,$2… ($0表示行的全部)
支持对单个切片的判断,支持循环判断,默认分隔符为空格
[root@localhost /]# cat aaa.txt
total 28
-rw-r--r--. 1 root root 0 Jun 18 12:31 aaa.txt
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
dr-xr-xr-x. 6 root root 4096 Jul 27 2021 boot
drwxr-xr-x. 20 root root 3200 Jun 18 08:28 dev
//默认分割符为空格,打印出 第一列和第四列的数据
[root@localhost /]# awk '{print $1,$4}' aaa.txt
total
-rw-r--r--. root
lrwxrwxrwx. root
dr-xr-xr-x. root
drwxr-xr-x. root
//匹配第二列为1 第六列为Nov的结果 并打印行所有内容
[root@localhost /]# awk '$2==1 && $6=="Nov" {print $0}' aaa.txt
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
//NR为换行符分割获取行信息,如下为 匹配第二列为1 第六列为Nov的结果 或者 第一行的结果 打印
[root@localhost /]# awk '($2==1 && $6=="Nov") || NR==1 {print $0}' aaa.txt
total 28
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
//定义分隔符,-F ,如下为定义 "-" 为分隔符
[root@localhost /]# awk -F "-" '{print $1}' aaa.txt
total 28
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin
dr
drwxr
//词频统计,先获取文件内容,{arr[$6]++} :定义一个数组叫arr,下标存内容 数组存次数,END表示扫描完后继续执行,for(i in arr)print i "\t" arr[i] :对arr进行遍历,打印 下标 即内容,以及 数组信息 即 词频
[root@localhost /]# cat aaa.txt | awk '{arr[$6]++}END{for(i in arr)print i "\t" arr[i]}'
Nov 1
Jul 1
Jun 2
7、sed
语法:sed [option] ‘sed command’ filename
全名:stream editor,流编辑器
适合用于对文本的行内容进行处理
[root@localhost /]# cat bbb.txt
Str a = "import com.baidu.aaa.a.java"
Str b = "import com.baidu.aaa.b.java"
Str c = "import com.baidu.aaa.c.java"
//替换匹配的内容(Str开头)为指定的内容(String),此命令只会将替换结果输出在终端,如果保存在文件需要 -i 参数
[root@localhost /]# sed 's/^Str/String/' bbb.txt
String a = "import com.baidu.aaa.a.java"
String b = "import com.baidu.aaa.b.java"
String c = "import com.baidu.aaa.c.java"
[root@localhost /]# cat bbb.txt
Str a = "import com.baidu.aaa.a.java"
Str b = "import com.baidu.aaa.b.java"
Str c = "import com.baidu.aaa.c.java"
//替换匹配的内容(Str开头)为指定的内容(String),并保存在文件
[root@localhost /]# sed -i 's/^Str/String/' bbb.txt
[root@localhost /]# cat bbb.txt
String a = "import com.baidu.aaa.a.java"
String b = "import com.baidu.aaa.b.java"
String c = "import com.baidu.aaa.c.java"
//替换文中baidu字符串为taobao,这样只会替换第一个匹配的内容,全局生效需要加上 g
[root@localhost /]# sed -i 's/baidu/taobao/' bbb.txt
//替换文中baidu字符串为taobao,并全局替换
[root@localhost /]# sed -i 's/baidu/taobao/g' bbb.txt
[root@localhost /]# cat bbb.txt
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
//插入空行
[root@localhost /]# echo " " >> bbb.txt
[root@localhost /]# echo " " >> bbb.txt
[root@localhost /]# echo " " >> bbb.txt
//插入数字
[root@localhost /]# echo "12134567" >> bbb.txt
[root@localhost /]# cat bbb.txt
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
12134567
[root@localhost /]#
//参数空行 sed -i '/^ *$/d' 文件名 d表示删除行
[root@localhost /]# sed -i '/^ *$/d' bbb.txt
[root@localhost /]# cat bbb.txt
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
12134567
[root@localhost /]#
//删除 7 所在行
[root@localhost /]# sed -i '/7/d' bbb.txt
[root@localhost /]# cat bbb.txt
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
文件编辑
vi text.txt
释义:编辑文件(不存在则创建)
vi 后 输入 i 进入编辑模式;按下 esc ,再输入 : ,再输入 wq 则可以保存并推出
vi后 输入 / 进行内容查找,按 n 键跳到下一个匹配的关键字上
vi后 先输入 / ,再输入 set nu 则可以在控制台显示 行号,输入行号可以直接到跳转到该行
vi后 在命令模式下将光标放置在要复制的那一行,然后按两下 y键,则会复制该行,然后再按 p键 则会粘贴
vi后 在命令模式下将光标放置在要删除的那一行,然后按两下 d键,则会删除该行
vi后 在命令模式下将光标放置在要删除的那一行,先按三下 9键,然后按两下 d键,则会删除该行和该行下所有行
文件远程同步SCP命令:
https://blog.csdn.net/m0_63748493/article/details/126322977