2023.5.26 Linux系统基础命令

发布时间 2023-05-25 23:46:59作者: bx_xy

系统⽬录结构
⽂件路径定位
⽬录管理命令
⽂件管理命令
⽂件查看命令
⽂件下载命令
命令查找命令
字符处理命令
练习如下命令

系统⽬录结构
⼏乎所有的计算机操作系统都是⽤⽬录结构组织⽂件。具体来说就是在⼀个⽬录中存放⼦⽬录和⽂件, ⽽在⼦⽬录
中⼜会进⼀步存放⼦⽬录和⽂件,以此类推形成⼀个树状的⽂件结构,由于其结构很像⼀棵树的分⽀, 所以该结构
⼜被称为“⽬录树”。
Linux系统中也沿⽤了这种⽂件结构, 所有⽬录和⽂件都在 "根⽬录"下, ⽬录名为"/"。FHS(⽂件系统层次标准)定
义了在根⽬录下的主要⽬录以及每个⽬录应该存放什么⽂件。

 


/etc    系统重要配置⽂件, 以及常⽤服务配置⽂件
/var    存放系统引导启动时产⽣的可变⽂件,⽂件通常动态更改的,例如: 缓存⽬录,⽇志⽂件
/run    系统启动后, 运⾏的程序产⽣的运⾏时数据, 包括进程的pid⽂件,锁⽂件等
/home    普通⽤户的主⽬录, 普通⽤户的家⽬录默认为/HOME/USERNAME
/root    超级管理员的主⽬录, 普通⽤户⽆权操作
/tmp    存放临时⽂件, ⼀般存放超过10天以上都会⾃动删除,可以更改删除临时⽂件的期限
/boot    存放系统引导时候需要的⽂件
/dev    存放设备⽂件
/usr    安装的软件, 共享库, 重要的⼦⽬录有
/usr/bin  ⽤户命令⽬录
/usr/sbin  管理员命令⽬录
/usr/local 本地⾃定义安装的软件


⽂件路径定位
路径的作⽤:定位⽂件具体位置信息
你要在那⾥创建什么⽂件?
你要将什么⽂件复制到什么地⽅?
你要删除的⽂件在什么地⽅?

 

 

1.特殊⽬录: (.)和(..)
在每个⽬录下, 都会固定存在两个特殊⽬录, 分别是⼀个点(.)和两个(..)的⽬录。⼀个点代表当的是当前⽬录, 两个点
代表的是当前⽬录的上层⽬录。注意: 在Linux下所有以点开始的⽂件都是"隐藏⽂件", 对于这类⽂件, 只使⽤命令
ls -l 是看不到的, 必须要使⽤ ls -la 才可以看到,如下所示:

2.绝对路径:
Linux系统采⽤了⽬录树的⽂件组织结构, 在Linux下每个⽬录或⽂件都可以从根⽬录处开始寻找, ⽐如: /usr/bin
⽬录。这种从根⽬录开始的全路径被称为"绝对路径", 绝对路径⼀定是以 “/” 开头的。
如何确认当前所在的⽬录, 可以使⽤ pwd 命令查看:
//注意:在Linux7系统中, /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/⽬录下,例如:
/bin --> /usr/bin
/sbin --> /usr/sbin
lib -> usr/lib
lib64 -> usr/lib64
[root@wing ~]# cd /opt/
[root@wing opt]# ls
[root@wing opt]# ls -a
. ..
[root@wing ~]# pwd
/root

3.相对路径
相对路径, 关键点在于当前在什么路径下。假设当前⽬录在 /usr/local 下, 那么它的上层⽬录(/usr⽬录)可以
⽤ ../ 表示, ⽽ `/usr/local 的下层⽬录(src)则可以⽤ ./src 表示。所谓的(.)和(..)⽬录实际上也是属于相对路径
cd 命令常⻅⽤法:
⽬录管理命令
1.⽬录创建命令 mkdir
2.以树状显示⽬录结构命令 tree

//进⼊/opt⽬录
[root@wing ~]# cd /opt/
[root@wing opt]# ls -la
total 76
drwxr-xr-x. 2 root root 69632 Dec 4 11:00 .  #代表当前⽬录
dr-xr-xr-x. 33 root root 4096 Dec 4 10:40 .. #代表上层⽬录
//进⼊当前⽬录
[root@wing opt]# cd .
//显示当前⽬录
[root@wing opt]# pwd
/opt
//进⼊当前⽬录的上层⽬录
[root@wing opt]# cd ..
//进⼊上层⽬录,也就是/⽬录
[root@wing /]# pwd
/
. 表示⽤户所处的当前⽬录
.. 表示上级⽬录;
~ 表示当前⽤户⾃⼰的家⽬录
cd -  //切换上次所在⽬录
cd ~  //切换⾄当前⽤户家⽬录
cd    //切换⾄当前⽤户家⽬录
cd .  //.代表当前⽬录,⼀般在拷⻉、移动等情况下使⽤
cd ..  //切换⾄当前⽬录的上级⽬录
# mkdir dir1
# mkdir /home/wing/dir1 /home/wing/dir2
# mkdir /home/wing/{dir4,dir5} -v
# mkdir /home/wing/dir6/dir6-1 -pv


⽂件管理命令
Linux ⼀切皆为⽂件, 在对 Linux 进⾏配置时, 很⼤程度上就是处理⽂件的过程, 所以掌握⽂件的相关操作是⾮常有
必要的。下⾯我们介绍如何对⽂件进⾏, 创建、删除、移动、重命名, 以及查看⽂件内容, ⾄于如何编辑⽂件, 在后⾯
具体介绍编辑器的时候在做详细阐述。
1.⽂件创建命令 touch
2.⽂件时间 stat
3.⽂件⽬录复制命令 cp
-L: 显示⽬录树的层级
//显示当前⽬录下的结构
# tree
//显示⼀级⽬录
# tree -L 1 /
# touch filename
# touch filename_1 filename_2
# touch /home/wing/file5 file6
# touch file{1..10}
# touch file{a,b,c}
# touch file{a..z}
[root@test-example ~]# stat test.txt
File: 'test.txt'
Size: 2      Blocks: 8     IO Block: 4096  regular file
Device: fd00h/64768d  Inode: 67335626  Links: 1
Access: (0644/-rw-r--r--) Uid: (  0/  root)  Gid: (  0/  root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2018-01-21 12:12:48.949097044 +0800
Modify: 2018-01-21 12:12:35.243302963 +0800
Change: 2018-01-21 12:12:35.243302963 +0800
Birth: -
访问时间:atime,查看内容
修改时间:mtime,修改内容
改变时间:ctime,⽂件属性,⽐如权限
删除时间:dtime,⽂件被删除的时间
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

3.⽂件⽬录移动命令 mv

4.⽂件⽬录删除命令 rm
//将name⽂件复制⾄/tmp⽬录中
# cp name /tmp/name_copy
//如果复制过想保持原⽂件名,不修改名称
# cp name /tmp/name
//如果复制过想保持原来的属性, -p保持原⽂件或⽬录的属性
# cp -p name /tmp/name_p
//复制⽬录只需要使⽤-r参数, 递归复制
# mkdir name_name
# cp -r name_name/ /tmp/name_tmp
//将多个⽂件拷⻉同⼀个⽬录
# cp -rv /etc/hosts /etc/hostname /tmp
# cp -rv /etc/hosts /etc/hostname ./
//
# cp -rv /etc/hosts /etc/hosts.bak
# cp -rv /etc/{hosts,hosts.bak}
# cp -rv /etc/hosts{,-org}
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
//移动⽂件⾄tmp⽬录
# mv file /tmp/
//移动⽂件⾄tmp⽬录并修改名称为file_test
# mv file /tmp/file_test
//移动⽬录⾄/tmp⽬录下
# mv dir/ /tmp/
//移动多个⽂件或多个⽬录⾄同⼀个⽬录
# touch file{1..3}
# mv file1 file2 file3 /opt/
# mkdir dir{1..3}
# mv dir1/ dir2/ dir3/ /opt
rm [OPTION]... FILE...
-r 递归
vx: WingspanGo
vx: WingspanGo
⽂件查看命令
-f 强制删除
-v 详细过程
  
//删除⽂件, 默认会提醒是否删除⽂件
# rm anan
//强制删除⽂件, 不提醒
# rm anan -f
//删除⽬录,会提醒
# rm -r dir/
//强制删除⽬录,不提醒
# rm -rf dir/
//示例
# mkdir /home/dir10
# touch /home/dir10/{file2,file3,.file4}
# rm -rf /home/dir10/* //不包括隐藏⽂件
# ls /home/dir10/ -a
. .. .file4
//示例2
# touch file{1..10}
# touch {1..10}.pdf
# rm -rf file*
# rm -rf *.pdf
cat   //查看⽂件内容
示例:cat /etc/passwd
示例:cat -n /etc/passwd  //-n参数⾏号
示例:cat >> wing.txt <<EOF //追加数据
  test
  EOF
head  //查看⽂件头部内容,默认前⼗⾏
示例:head /etc/passwd  
示例:head -n5 /etc/passwd  //-n参数指定查看头⼏⾏
tail  //查看⽂件尾部内容,默认最后⼗⾏
示例:tail /etc/passwd  
示例:tail -f /var/log/messages  // -f参数跟随尾部输出⽽变化

⽂件下载命令
命令查找命令
字符处理命令
1.使⽤sort排序
很多情况下需要对⽆序的数据进⾏排序, 这时就需要⽤到 sort 排序了。
more  //按空格可翻⻚查看⽂件内容,按q可推出
示例:more /etc/passwd
less  //和more类似
示例:less /etc/passwd
wget  //⽂件下载
-O  //指定下载地址,更改名称
-T  //超时时间
-q  //安静下载(关闭wget输出)
--spider //⽹络爬⾍
示例:wget http://www.baidu.com
curl  //⽂件下载
示例:curl -o http://www.baidu.com
yum install lrzsz
rz //⽂件上传
sz //⽂件下载
示例:sz filename
locate //查找⽂件或者⽬录
示例:locate /etc/sh    //搜索etc⽬录下所有以sh开头的⽂件
示例:locate -i /etc/sh  //搜索etc⽬录下,所有以sh开头的⽂件,忽略⼤⼩写
which  //查找系统PATH变量⽬录下的命令(绝对路径)
示例:which ls
whereis //查找⽂件索引数据库下的命令、源⽂件、man⽂件。⾮PATH变量查找,所以查找的⾯⽐which要⼴ -b,-
m
示例:whereis ls
示例:whereis -b ls

 


sort [OPTION]... [FILE]...
-r:倒序
-n:按数字排序
-t:指定分隔符(默认空格)
-k:指定第⼏列, 指定⼏列⼏字符(指定1,1 3.1,3.3)
//演示soft的⽤法, ⾸先创建⼀个⽂件:
[root@wing ~]# cat >> sort.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF
//下⾯对输出的内容进⾏排序:
[root@wing ~]# sort sort.txt
a:4
b:3
c:2
d:1
e:5
f:11
//可观察到, sort⽂件具有⼀个特点, 第⼀个字符是字⺟, 第三个字符是数字, 中间是⽤冒号隔开。
//这样我们可以使⽤-t指定分隔符, 使⽤-k指定⽤于排序的列了。
[root@wing ~]# sort -t ":" -k2 sort.txt
d:1
f:11 //第⼆⾏为什么是11?不应该按照顺序排列?
c:2
b:3
a:4
e:5
//按照排序的⽅式, 只会看到第⼀个字符,11的第⼀个字符是1, 按照字符来排序确实⽐2⼩。
//如果想要按照数字的⽅式进⾏排序, 需要使⽤ -n参数。
[root@wing ~]# sort -t ":" -n -k2 p.txt
d:1
c:2
b:3
a:4
e:5
f:11
//测试案例,对下⾯内容进⾏排序
192.168.3.1 00:0F:AF:81:19:1F


2.使⽤uniq删除重复内容
如果⽂件中有多⾏完全相同的内容, 当前是希望能删除重复的⾏,同时还可以统计出完全相同的⾏出现的总次数, 那
么就可以使⽤ uniq 命令解决这个问题(但是必须配合 sort 使⽤)。
192.168.3.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.2.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.0.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.1.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.1.12 00:30:15:A2:3A:A1
192.168.1.1 00:0F:AF:81:19:1F
192.168.2.2 00:0F:AF:85:6C:25
192.168.3.3 00:0F:AF:85:70:42
192.168.2.20 00:0F:AF:85:55:DE
192.168.1.21 00:0F:AF:85:6C:09
192.168.2.22 00:0F:AF:85:5C:41
192.168.0.151 00:0F:AF:85:6C:F6
192.168.1.152 00:0F:AF:83:1F:65
192.168.0.153 00:0F:AF:85:70:03
192.168.3.10 00:30:15:A2:3B:B6
192.168.1.11 00:30:15:A3:23:B7
192.168.3.12 00:30:15:A2:3A:A1
//针对第三列的第⼀个字符,第四列的第⼀个字符到第三个字符排序才是正确
[root@student tmp]# sort -t. -k3.1,3.1nr -k4.1,4.3nr test.txt
uniq [OPTION]... [INPUT [OUTPUT]]
-c 计算重复的⾏
//演示uniq的⽤法, ⾸先创建⼀个⽂件:
[root@wing ~]# cat uniq.txt
abc
123
abc
123
//uniq需要和sort⼀起使⽤, 先使⽤sort排序, 让重复内容连续在⼀起
[root@wing ~]# cat uniq.txt |sort
123
123
abc
abc

3.使⽤cut命令截取某⼀个字段
4.使⽤wc统计
//使⽤uniq去除相邻重复的⾏
[root@wing ~]# cat uniq.txt |sort|uniq
123
abc
//使⽤-c参数, 能统计出⽂件中每⾏内容重复的次数
[root@wing ~]# cat uniq.txt |sort|uniq -c
  2 123
  2 abc
cut OPTION... [FILE]...
-d:指定分隔符
-f:数字,取第⼏列 –f3,6三列和6列
-c:按字符取(空格也算)
//测试数据, 过滤出⽂件⾥ wing以及552408925
#echo “Im wing, is QQ 552408925” >wing.com
//实践思路
# sed 's#,# #g' wing.txt | cut -d " " -f2,6
# sed 's#,# #g' wing.txt | awk -F " " '{print $2 " " $5}'
# awk -F '[, ]+' '{print $2,$5}' wing.txt
# awk '{print $2 $5}' wing.txt | awk -F "," '{print $1" " $2}'
# awk -F "[, ]" '{print $2 " " $6}' wing.txt
此类问题是运维⼯作中最常⻅的问题。可以演变成分析⽇志,查看TCP各个状态连接数,查看单IP连接数排名等
[root@student tmp]# cat web.log
http://www.wing.com/index.html
http://www.wing.com/1.html
http://post.wing.com/index.html
http://mp3.wing.com/index.html
http://www.wing.com/3.html
http://post.wing.com/2.html
[root@student tmp]# awk -F '/' '{print $3}' web.log|sort -rn|uniq –c
  3 www.wing.comwing.com
  2 post.wing.comwing.com
  1 mp3.wing.comwing.com
[root@student tmp]# cut -d / -f3 web.log|sort -rn|uniq –c
  3 www.wing.comwing.com
  2 post.wing.comwing.com
  1 mp3.wing.comwing.com


练习如下命令
⽤普通⽤户身份登陆虚拟机上完成练习
在⽤户家⽬录下创建6个⽂件 song1.mp3 ~ song6.mp3
把上出创建的songX.mp3⽂件移动到Music⽬录下(不存在则创建)
在⽤户家⽬录下创建三个⽬录,分别为 friends,family,work
切换到friends⽬录下,把Music⽬录下的song1.mp3 ~ song3.mp3 拷⻉到当前⽬录
切换到family⽬录下,把Music⽬录下的song4.mp3 ~ song6.mp3 移动到当前⽬录
切换到⽤户主⽬录
删除family⽬录
切换到friends⽬录,把⽬录下的所有⽂件删除
切换到主⽬录,把friends⽬录删除.
wc - print newline, word, and byte counts for each file显示⽂件的⾏、单词与字节统计信息
wc [OPTION]... [FILE]...
-l:显示⽂件⾏数
-c:显示⽂件字节
-w:显示⽂件单词
//统计fstab有多少⾏
[root@student ~]# wc -l /etc/fstab
15 /etc/fstab
显示/etc/services ⽂件⾏号
[root@student ~]# wc -l /etc/services
10774 /etc/services
//扩展⽅法
[root@student ~]# grep -n "." /etc/services | tail -1
[root@student ~]# awk '{print NR $0}' /etc/services | tail -1
[root@student ~]# cat -n /etc/services | tail -1
[root@student ~]# sed '=' /etc/services | tail -2