Linux系统基础命令

系统目录结构

几乎所有的计算机操作系统都是用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”。

Linux系统中也沿用了这种文件结构, 所有目录和文件都在 "根目录"下, 目录名为"/"。FHS(文件系统层次标准)定义了在根目录下的主要目录以及每个目录应该存放什么文件。

/etc        系统重要配置文件, 以及常用服务配置文件
/var        存放系统引导启动时产生的可变文件,文件通常动态更改的,例如: 缓存目录,日志文件
/run        系统启动后, 运行的程序产生的运行时数据, 包括进程的pid文件,锁文件等
/home       普通用户的主目录, 普通用户的家目录默认为/HOME/USERNAME
/root       超级管理员的主目录, 普通用户无权操作
/tmp        存放临时文件, 一般存放超过10天以上都会自动删除,可以更改删除临时文件的期限
/boot       存放系统引导时候需要的文件
/dev        存放设备文件
/usr        安装的软件, 共享库, 重要的子目录有
/usr/bin    用户命令目录
/usr/sbin   管理员命令目录
/usr/local  本地自定义安装的软件//注意:在Linux7系统中, /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下,例如:/bin  --> /usr/bin
/sbin --> /usr/sbin
lib -> usr/lib
lib64 -> usr/lib64

文件路径定位

路径的作用:定位文件具体位置信息
你要在那里创建什么文件?
你要将什么文件复制到什么地方?
你要删除的文件在什么地方?

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

[root@xuliangwei ~]# cd /opt/[root@xuliangwei opt]# ls[root@xuliangwei opt]# ls -a.  ..

2.绝对路径:

Linux系统采用了目录树的文件组织结构, 在Linux下每个目录或文件都可以从根目录处开始寻找, 比如: /usr/bin目录。这种从根目录开始的全路径被称为"绝对路径", 绝对路径一定是以 “/” 开头的。

如何确认当前所在的目录, 可以使用pwd命令查看:

[root@xuliangwei ~]# pwd/root

3.相对路径
相对路径, 关键点在于当前在什么路径下。假设当前目录在/usr/local下, 那么它的上层目录(/usr目录)可以用../表示, 而`/usr/local的下层目录(src)则可以用./src表示。所谓的(.)和(..)目录实际上也是属于相对路径

//进入/opt目录
[root@xuliangwei ~]# cd /opt/[root@xuliangwei opt]# ls -latotal 76drwxr-xr-x.  2 root root 69632 Dec  4 11:00 .   #代表当前目录dr-xr-xr-x. 33 root root  4096 Dec  4 10:40 ..  #代表上层目录//进入当前目录
[root@xuliangwei opt]# cd .//显示当前目录
[root@xuliangwei opt]# pwd/opt//进入当前目录的上层目录
[root@xuliangwei opt]# cd ..//进入上层目录,也就是/目录
[root@xuliangwei /]# pwd/

cd命令常见用法:

.  表示用户所处的当前目录
.. 表示上级目录;
~  表示当前用户自己的家目录cd -    //切换上次所在目录cd ~    //切换至当前用户家目录cd       //切换至当前用户家目录cd .    //.代表当前目录,一般在拷贝、移动等情况下使用cd ..   //切换至当前目录的上级目录

目录管理命令

1.目录创建命令mkdir

# mkdir dir1# mkdir /home/xuliangwei/dir1 /home/xuliangwei/dir2# mkdir /home/xuliangwei/{dir4,dir5} -v# mkdir /home/xuliangwei/dir6/dir6-1 -pv

2.以树状显示目录结构命令tree

-L: 显示目录树的层级//显示当前目录下的结构# tree//显示一级目录# tree -L 1 /

文件管理命令

Linux一切皆为文件, 在对Linux进行配置时, 很大程度上就是处理文件的过程, 所以掌握文件的相关操作是非常有必要的。下面我们介绍如何对文件进行, 创建、删除、移动、重命名, 以及查看文件内容, 至于如何编辑文件, 在后面具体介绍编辑器的时候在做详细阐述。

1.文件创建命令touch

# touch filename# touch filename_1 filename_2# touch /home/xuliangwei/file5 file6# touch file{1..10}# touch file{a,b,c}# touch file{a..z}

2.文件时间stat

[root@test-example ~]# stat test.txt
  File: 'test.txt'
  Size: 2           Blocks: 8          IO Block: 4096   regular fileDevice: fd00h/64768d    Inode: 67335626    Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Context: unconfined_u:object_r:admin_home_t:s0Access: 2018-01-21 12:12:48.949097044 +0800Modify: 2018-01-21 12:12:35.243302963 +0800Change: 2018-01-21 12:12:35.243302963 +0800
 Birth: -
 
访问时间:atime,查看内容 
修改时间:mtime,修改内容 
改变时间:ctime,文件属性,比如权限 
删除时间:dtime,文件被删除的时间

3.文件目录复制命令cp

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...//将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}

3.文件目录移动命令mv

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

4.文件目录删除命令rm

rm [OPTION]... FILE...
-r 递归
-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 >> xuliangwei.txt <<EOF  //追加数据
     test
     EOF

head    //查看文件头部内容,默认前十行示例:head /etc/passwd    
示例:head -n5  /etc/passwd    //-n参数指定查看头几行tail    //查看文件尾部内容,默认最后十行示例:tail /etc/passwd    
示例:tail -f /var/log/messages   // -f参数跟随尾部输出而变化more    //按空格可翻页查看文件内容,按q可推出示例:more /etc/passwd


less    //和more类似示例:less /etc/passwd

文件下载命令

wget    //文件下载-O   //指定下载地址,更改名称  -T   //超时时间-q   //安静下载(关闭wget输出)--spider //网络爬虫  示例:wget http://www.baidu.comcurl    //文件下载示例:curl -o http://www.baidu.comyum 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

字符处理命令

1.使用sort排序
很多情况下需要对无序的数据进行排序, 这时就需要用到sort排序了。

sort [OPTION]... [FILE]...
-r:倒序
-n:按数字排序
-t:指定分隔符(默认空格)
-k:指定第几列, 指定几列几字符(指定1,1  3.1,3.3)//演示soft的用法, 首先创建一个文件:[root@xuliangwei ~]# cat >> sort.txt <<EOFb:3c:2a:4e:5d:1f:11EOF//下面对输出的内容进行排序:[root@xuliangwei ~]# sort sort.txta:4b:3c:2d:1e:5f:11//可观察到, sort文件具有一个特点, 第一个字符是字母, 第三个字符是数字, 中间是用冒号隔开。//这样我们可以使用-t指定分隔符, 使用-k指定用于排序的列了。[root@xuliangwei ~]# sort -t ":" -k2 sort.txtd:1f:11 //第二行为什么是11?不应该按照顺序排列?c:2b:3a:4e:5//按照排序的方式, 只会看到第一个字符,11的第一个字符是1, 按照字符来排序确实比2小。 //如果想要按照数字的方式进行排序, 需要使用 -n参数。[root@xuliangwei ~]# sort -t ":" -n -k2 p.txtd:1c:2b:3a:4e:5f:11//测试案例,对下面内容进行排序192.168.3.1 00:0F:AF:81:19:1F192.168.3.2 00:0F:AF:85:6C:25192.168.3.3 00:0F:AF:85:70:42192.168.2.20 00:0F:AF:85:55:DE192.168.2.21 00:0F:AF:85:6C:09192.168.2.22 00:0F:AF:85:5C:41192.168.0.151 00:0F:AF:85:6C:F6192.168.0.152 00:0F:AF:83:1F:65192.168.0.153 00:0F:AF:85:70:03192.168.1.10 00:30:15:A2:3B:B6192.168.1.11 00:30:15:A3:23:B7192.168.1.12 00:30:15:A2:3A:A1192.168.1.1 00:0F:AF:81:19:1F192.168.2.2 00:0F:AF:85:6C:25192.168.3.3 00:0F:AF:85:70:42192.168.2.20 00:0F:AF:85:55:DE192.168.1.21 00:0F:AF:85:6C:09192.168.2.22 00:0F:AF:85:5C:41192.168.0.151 00:0F:AF:85:6C:F6192.168.1.152 00:0F:AF:83:1F:65192.168.0.153 00:0F:AF:85:70:03192.168.3.10 00:30:15:A2:3B:B6192.168.1.11 00:30:15:A3:23:B7192.168.3.12 00:30:15:A2:3A:A1//针对第三列的第一个字符,第四列的第一个字符到第三个字符排序才是正确[root@student tmp]# sort -t. -k3.1,3.1nr -k4.1,4.3nr test.txt

2.使用uniq删除重复内容

如果文件中有多行完全相同的内容, 当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq命令解决这个问题(但是必须配合sort使用)。

uniq [OPTION]... [INPUT [OUTPUT]]
-c  计算重复的行

//演示uniq的用法, 首先创建一个文件:
[root@xuliangwei ~]# cat uniq.txtabc123abc123//uniq需要和sort一起使用, 先使用sort排序, 让重复内容连续在一起
[root@xuliangwei ~]# cat uniq.txt |sort123123abc
abc

//使用uniq去除相邻重复的行
[root@xuliangwei ~]# cat uniq.txt |sort|uniq123abc

//使用-c参数, 能统计出文件中每行内容重复的次数
[root@xuliangwei ~]# cat uniq.txt |sort|uniq -c
      2 123
      2 abc

3.使用cut命令截取某一个字段

cut OPTION... [FILE]...
-d:指定分隔符
-f:数字,取第几列 –f3,6三列和6列
-c:按字符取(空格也算)//测试数据, 过滤出文件里 xuliangwei以及552408925#echo “Im xuliangwei, is QQ 552408925” >xuliangwei.com//实践思路# sed 's#,# #g' xuliangwei.txt | cut -d " " -f2,6# sed 's#,# #g' xuliangwei.txt | awk -F " " '{print $2 " " $5}'
# awk -F '[, ]+' '{print $2,$5}' xuliangwei.txt 
# awk '{print $2 $5}' xuliangwei.txt  | awk -F "," '{print $1" " $2}'
# awk -F  "[, ]" '{print $2 " " $6}' xuliangwei.txt 



此类问题是运维工作中最常见的问题。可以演变成分析日志,查看TCP各个状态连接数,查看单IP连接数排名等
[root@student tmp]# cat web.log 
http://www.xuliangwei.com/index.htmlhttp://www.xuliangwei.com/1.htmlhttp://post.xuliangwei.com/index.htmlhttp://mp3.xuliangwei.com/index.htmlhttp://www.xuliangwei.com/3.htmlhttp://post.xuliangwei.com/2.html[root@student tmp]# awk -F '/' '{print $3}' web.log|sort -rn|uniq –c
      3 www.xuliangwei.comxuliangwei.com      2 post.xuliangwei.comxuliangwei.com      1 mp3.xuliangwei.comxuliangwei.com
 [root@student tmp]# cut -d / -f3 web.log|sort -rn|uniq –c
      3 www.xuliangwei.comxuliangwei.com      2 post.xuliangwei.comxuliangwei.com      1 mp3.xuliangwei.comxuliangwei.com

4.使用wc统计

wc - print newline, word, and byte counts for each file显示文件的行、单词与字节统计信息
wc [OPTION]... [FILE]...
-l:显示文件行数
-c:显示文件字节
-w:显示文件单词


//统计fstab有多少行
[root@student ~]# wc -l /etc/fstab15 /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

练习如下命令

用普通用户身份登陆虚拟机上完成练习
在用户家目录下创建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目录删除.


Powered By Z-BlogPHP 1.7.3

 Theme By 优美模版

本博客为开源博客,本博客联系QQ:372097243