01 目录结构、基础命令的讲解、管道和重定向(讲解邮件的发送)

本文详细介绍Linux系统的目录结构及常用命令,包括查看文件、目录操作、文件操作等实用技巧。通过具体示例帮助读者掌握基本的Linux操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、目录结构(树状的目录结构,最底层为根目录/):

   bin:存放命令,普通用户命令

   sbin:、、、、,管理员命令

   usr(user):放用户数据的(编译安装的软件,用户的软件源码,等等,相当于是一个用户的根)

   dev(device):设备目录(linux下有一句话可以这样说,任何设备都是文件)

   root:超级管理员的家目录   

   home:其它普通用户的家目录

   tmp(temporary):临时目录,存放很多软件运行的一些临时文件(此目录建议新手不要去做任何的操作)

   boot:存放开机启动有关的一些文件

   etc:大部分的软件的配置文件都会存放在这

   proc: 这两个是伪文件系统,记录系统动态的一些信息

  (当前系统的各种状态:

   比如 

   cat /proc/cpuinfo查看cpu相关的信息;

   cat /proc/cpuinfo  |grep -E "vmx|svm"查看cpu是否支持vmx或svm指令集)

   var:一个比较综合的目录,存放了日志,pid文件,邮件等

   mnt
   media  
   misc  三个空目录,一般用于挂载用的

------------------------------------------------------------------------------------------------------

二、命令的讲解

(1)ls

1.ls -l或ll   详细列表形式进行查看

   ls -dl或ll -d 查看权限

2.ls -a 查看隐藏文件

特别的:# which ls ---->查看ls命令路径和适用于别名情况

which是于查看某个命令或文件的绝对路径的

文件类型:

# ls -l /etc/fstab
-rw-r--r-- 1 root root 1077 Jun  7 17:34 /etc/fstab
   

-  普通文件
d   目录
p   pipe管道文件
s   socket文件(socket是一种程序的连接方式)
l   链接文件(symbolic link,符号链接,软链接;类似windows的快捷方式)
b   block块设备文件
c   character字符型设备文件

(2)alias 取别名 (最常见的用法是用于改变颜色)

alias ls = 'ls -d --color=auto'

(3)查看文件的相关命令:cat   head  tail  more  less  tac  rev

# cat /etc/inittab  --查看文件所有内容
# head /etc/inittab   --查看文件前十行内容

# head -3 /etc/inittab --指定查看文件的前三行
# tail /etc/inittab   --查看文件后十行内容
# head -3 /etc/inittab --指定查看文件的前三行
# tail -3 /etc/inittab --指定查看文件的后三行 
# tail -f /var/log/messages    --动态监控文件的末尾(/var/log/message日志文件是系统最常见的日志文件,会记录系统大部分的通知或错误信息)
(常用于监控日志文件,因为日志文件都是从上往下记录,并且是变化的。那么动态监控文件末尾其实就是随时可以看到日志最近的变化)

# more /etc/rc.sysinit   --回车向下移一行,空格向下移一页,q键退出
# less /etc/rc.sysinit   --向上向下箭头可以移,page up 和page down键移页,q键退出

(4)文件操作的相关命令: cd    pwd  mkdir  touch  cp   mv   rm

1.cd 切换目录命令

cd ~ 或 cd    --切换到当前用户家目录
cd -      --切换到上一次的目录
.   代表当前目录
..  代表上级目录

2.pwd 查看文件的相关路径

3.touch:创建一个文件

同时创建多个文件的办法:

touch a b c        

touch {1..10}

4.cp 拷贝命令
cp 源  目标
对比下面这两条的区别更名为
# cp /etc/fstab /test:拷贝到根目录下并更名为test
# cp /etc/fstab /test/:拷贝到根目录下的test文件下

5.mv:剪切和粘贴命令

6.rm 删除命令

(5)管道:(将前面的输出结果传给后面)

# stat file1 | tail -3--查看stat file1命令的结果的后三行

# tail -5 /etc/passwd  |head -1--查看此文件的倒数第五行
# head -5 /etc/passwd  |tail -1 --查看此文件的正数第五行
# cat /etc/passwd |wc -l --统计此文件有多少行
# cat /etc/passwd |grep root |wc -l --统计此文件里有root关键字的行数

# cd /etc
# grep root *   --表示在当前目录的所有文件里查找有root关键字的行
# grep root * |cut -d":" -f1 |sort|uniq -c |sort -n -r   
* 表示全局

(6)重定向



0 标准输入-----  终端  --------标准输出   1
   |
   |
错误输出
   2


标准输入:指你键盘的输入,或者敲的命令
标准输出:指结果里正确的输出,可以用> 或者 1> 来重定向
错误输出:指结果里错误的输出,可以用 2> 来重定向

&>表示错误和正确一起重定向

总结几个发邮件的方式:

(1)mail -s(subject) "文件主题"  接收人

正文

.----->表示结束

(2)echo 邮件正文 | mail -s "邮件主题"  root


实验1:手动交互式发邮件
# /etc/init.d/postfix restart --启动postfix邮件服务器(如果没有此服务文件,则yum install postfix安装就可以)
# echo > /var/mail/root         --清空root用户的邮箱(这里就是把echo得到的空行,重定向到后面的文件,覆盖后面文件的内容)

# mail -s "哈哈" root --这里表示用本机root用户给本机root用户发一封邮件,主题为哈哈
你好 --正文内容为你好
. --.号表示结束
EOT

实验2:利用重定向或管道非交互发邮件
# mail -s "邮件主题"  root  < mail.txt --把mail.txt里的内容做为邮件正文重定向给这封邮件发给root用户
# echo 邮件正文 | mail -s "邮件主题"  root --用管道的用法来实现发邮件

# cat /var/mail/root--查看是否收到了此邮件
实验3:覆盖与追加

# echo abc > 123.txt --如果123.txt不存在,则创建123.txt,并内容修改为abc;如果123.txt文件存在,则只把原内容修改为abc
# echo cba >> 123.txt --两个>符号,就是原内容不变,再追加新的内容
# cat > 123.txt << EOF --如果123.txt不存在,则创建它,并加入两行内容111 222;存在则覆盖它原来的内容
111
222
EOF
# cat >> 123.txt << HAHA --相比于上一条,这是追加内容,而且标记不一定要用EOF,只要前后一致成对出现就可以
> 333
> 444
> HAHA

------------------------------------------------------------------------



/* * 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected int size;//队列中元素的数目 //构造函数 public Deque_DLNode() { header = new DLNode(); trailer = new DLNode(); header.setNext(trailer); trailer.setPrev(header); size = 0; } //返回队列中元素数目 public int getSize() { return size; } //判断队列是否为空 public boolean isEmpty() { return (0 == size) ? true : false; } //取首元素(但不删除) public Object first() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return header.getNext().getElem(); } //取末元素(但不删除) public Object last() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); return trailer.getPrev().getElem(); } //在队列前端插入新节点 public void insertFirst(Object obj) { DLNode second = header.getNext(); DLNode first = new DLNode(obj, header, second); second.setPrev(first); header.setNext(first); size++; } //在队列后端插入新节点 public void insertLast(Object obj) { DLNode second = trailer.getPrev(); DLNode first = new DLNode(obj, second, trailer); second.setNext(first); trailer.setPrev(first); size++; } //删除首节点 public Object removeFirst() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = header.getNext(); DLNode second = first.getNext(); Object obj = first.getElem(); header.setNext(second); second.setPrev(header); size--; return(obj); } //删除末节点 public Object removeLast() throws ExceptionQueueEmpty { if (isEmpty()) throw new ExceptionQueueEmpty("意外:双端队列为空"); DLNode first = trailer.getPrev(); DLNode second = first.getPrev(); Object obj = first.getElem(); trailer.setPrev(second); second.setNext(trailer); size--; return(obj); } //遍历 public void Traversal() { DLNode p = header.getNext(); while (p != trailer) { System.out.print(p.getElem()+" "); p = p.getNex
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值