前置准备:下载安装 XShell,购买云服务器,用XShell登陆主机进行远程操作,具体教程可参考
比特Linux安装教程
概述&序言
文件和路径的认识
命令,其实就是文件!
命令的本质== 可执行文件 == 我们写的可执行文件
绝对路径(查找目标文件具有唯一性的称为绝对路径):/home/ubuntu ;
路径:Linux访问一个文件,先找到它。找到一个文件称为:路径;
相对路径(以非/为参照位置,定位一个文件):ls …/test.c ;
clear清理;
先来认识两条基本指令:
whoami → Who am I? 我是谁(用户名)
pwd → Print Working Directory 我在哪(目录)
ubuntu@VM-0-16-ubuntu:~$whoamiubuntu ubuntu@VM-0-16-ubuntu:~$pwd/home/ubuntu一、ls指令
语法: ls [选项] [⽬录或⽂件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名和其他信息。
ls当前文件名或者目录,ls-l = ll 更详细的信息(属性)+文件名;
ll就是系统默认alias取的别名,两者一个意思
alias:取别名,比如alias zhangsan=pwd(临时取别名,重登xshell会自动调回来,不认识zhangsan)
任何一个目录,即便是空的。系统也要默认给该目录自动生成.(指向自己)和…(指向上级),而根目录/ 比较特殊 /的.和…都指向自己;
文件目录就是一个多叉树
二、touch:创建一个空普通文件
touchtest.txt文件已经存在:更新文件的时间戳(默认同时更新Access、Modify)
touch-atest.txt# 只更新 Access 时间touch-mtest.txt# 只更新 Modify 时间以下了解即可
touch 不能修改 Change 时间!Change 由内核自动管理。
Access (atime) 访问时间:最后一次读取文件内容的时间
Modify (mtime) 修改时间:最后一次修改【文件内容】的时间
Change (ctime) 状态改变时间:最后一次修改【文件元数据 (inode 信息)】的时间
补充:stat命令:查看文件完整元信息(权限、大小、所有者、三个核心时间戳)
三、mkdir:语法:mkdir [选项] dirname…
功能:在当前⽬录下创建⼀个名为 “dirname”的⽬录
常用选项:-p/–parents:可以是一个路径名称,即一次性创建多个目录
mkdirmydir-pa/b/c/dtree:语法:tree a
功能:将当前名为a的目录成树状图展现出来
[whb@bite-alicloud test]$ tree path1 a └── b └── c └── d四、rmdir和rm指令
rmdir:只能删除一个空目录(知道即可)
rm(最常用的删除文件命令):
rm -f mydir(强制删除:-f不提示yes或no)
rm -r a(递归删除:文件多叉树直接删除整个a树状文件)
警告rm命令在Linux系统中使用不同于Windows,没有回收站这个东西,删了就是删了,一旦不小心执行了 rm -rf /,则需要重装系统,若是云服务器,可以在相应购买的地方进行重装较为方便
Linux Shell 中 * 通配符详解
“ * ” = 通配符(万能匹配),匹配任意长度任意字符(包括 0 个字符)
注意:默认不会匹配 . 开头的隐藏文件
ls*# 列出当前所有非隐藏文件ls*.txt# 匹配后缀 .txt → a.txtlstest*# 匹配以test开头 → test.logls*log# 匹配以log结尾 → test.logls*es*# 名字中间包含es → test.log关于tree命令安装在Ubuntu中的问题
如图则是命令行不适用,yum是CentOS/RHEL的系列包管理器
而Ubuntu则用:sudo apt install tree -y;进行安装,还有问题可根据情况通过ai工具进行查询动起手来!
如果在命令行中,出现了异常情况,统一尝试ctrl+c来终止异常
五、man 手册的章节编号(Linux 标准手册分区)
man [章节号] 命令
Linux 手册分为若干区段,不同数字代表不同类型文档
(以下先知道了解即可。最常用的是前三个)
| 编号 | 含义 | 典型例子 |
|---|---|---|
| 1 | 用户命令(shell 可直接执行的程序、指令) | ls、rm、printf(命令)、tree |
| 2 | 系统调用(内核提供 C 函数) | open()、fork()、unlink() |
| 3 | 库函数(C 标准库函数) | printf()、scanf()、strlen() |
| 4 | 设备文件 | /dev 下硬件设备说明 |
| 5 | 配置文件格式 | /etc/passwd、fstab格式说明 |
| 6 | 游戏 | |
| 7 | 杂项、协议、宏 | 正则、信号、inode 概念 |
| 8 | 管理员 (root) 系统工具 | fdisk、mount |
ubuntu@VM-0-16-ubuntu:~$manrm
补充几个 man 内常用快捷键(方便查阅文档)
q → 退出 man 页面 (当前需要)
空格 → 向下翻一页
b → 向上翻一页
补充Linux中好用的键位:方向的上下键↑↓:用来切换历史命令,上一次输入的命令,可尝试一下
Linux Shell 中的 printf
先分清两个极易混淆的东西:
C 语言 printf() 函数:代码里用的
Shell 内置命令 printf:终端直接敲的命令(你现在学的这个)
作用:格式化输出文本,不带换行意思
例子:
printfhello# 输出:helloubuntu@xxx:~$# 没有换行,文本紧贴命令提示符,一定要加 \n警告重中之重:printf 有两份文档!
① man 1 printf
打开 Shell 内置命令 printf(终端直接敲的命令)
printf"hello\n"② man 3 printf
打开 C 语言标准库函数 printf ()(写代码里面用的函数)
如果你直接输入:
manprintfman 会从小到大顺序查找章节:先找到第 1 章,所以默认展示【shell 命令 printf】。
如果你想看 C 语言函数,必须手动指定:man 3 printf
一句话区分 printf 冲突:
man 1 printf →终端指令
man 3 printf →C 代码函数
六、cp指令(重要)
语法: cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能: 复制⽂件或⽬录
说明:
• cp指令⽤于复制⽂件或⽬录
• 如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定
的所有⽂件或⽬录复制到此⽬录中
先touch(创建)hello.txt,然后nano(编辑记事本)
常⽤选项
• -f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
• -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
• -r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符
号链接,则⼀律视为普通⽂件处理
注:nano 是 Linux 终端下轻量级文本编辑器,你可以类比成终端里的「记事本」。
Ubuntu 默认自带,打开直接打字,没有复杂模式,新手首选。
ubuntu@VM-0-16-ubuntu:~$touchhello.txt ubuntu@VM-0-16-ubuntu:~$nanohello.txt在里面输入两行东西如下:
然后ctrl+x;y;回车返回指令界面
再执行
cphello.txt world.txt
就会发现新创建了一个world.txt文件,并且hello.txt里的内容都拷贝到world.txt里面了
还可以
cphello.txt../a.txt##拷贝到上级目录并创建一个上级目录的a.txt文件里cphello.txt../##直接将该文件拷贝到上级目录里最后我们看普通文件和多个文件的cp
# cp普通⽂件[whb@bite-alicloud test]$echo"你好⽐特就业课">myfile.txt[whb@bite-alicloud test]$catmyfile.txt 你好⽐特就业课[whb@bite-alicloud test]$ ll total4-rw-rw-r--1whb whb22Jan1115:47 myfile.txt[whb@bite-alicloud test]$cpmyfile.txt myfile-backup.txt[whb@bite-alicloud test]$ ll total8-rw-rw-r--1whb whb22Jan1115:47 myfile-backup.txt -rw-rw-r--1whb whb22Jan1115:47 myfile.txt[whb@bite-alicloud test]$catmyfile-backup.txt 你好⽐特就业课# 将多个⽂件拷⻉到指定路径下[whb@bite-alicloud test]$ ll total8-rw-rw-r--1whb whb22Jan1115:47 myfile-backup.txt -rw-rw-r--1whb whb22Jan1115:47 myfile.txt[whb@bite-alicloud test]$mkdirdir[whb@bite-alicloud test]$ ll total12drwxrwxr-x2whb whb4096Jan1115:48dir-rw-rw-r--1whb whb22Jan1115:47 myfile-backup.txt -rw-rw-r--1whb whb22Jan1115:47 myfile.txt[whb@bite-alicloud test]$cp*.txtdir# *表⽰通配符,匹配所有.txt结尾的⽂件名[whb@bite-alicloud test]$ ll total12drwxrwxr-x2whb whb4096Jan1115:48dir-rw-rw-r--1whb whb22Jan1115:47 myfile-backup.txt -rw-rw-r--1whb whb22Jan1115:47 myfile.txt[whb@bite-alicloud test]$ treedirdir├── myfile-backup.txt └── myfile.txt# cp如果⽬标⽂件存在,就覆盖[whb@bite-alicloud test]$echo"hello bite tech">myfile.txt[whb@bite-alicloud test]$catmyfile.txt hello bite tech[whb@bite-alicloud test]$cpmyfile.txt myfile-backup.txt[whb@bite-alicloud test]$catmyfile-backup.txt hello bite tech# 拷⻉前询问[whb@bite-alicloud test]$cp-imyfile.txt myfile-backup.txt cp: overwrite ‘myfile-backup.txt’? y# 递归强制拷⻉整个⽬录[whb@bite-alicloud ~]$ treetesttest├──dir│ ├── myfile-backup.txt │ └── myfile.txt ├── myfile-backup.txt └── myfile.txt1directory,4files[whb@bite-alicloud ~]$cp-rftesttest-backup[whb@bite-alicloud ~]$ tree test-backup test-backup ├──dir│ ├── myfile-backup.txt │ └── myfile.txt ├── myfile-backup.txt └── myfile.txt1directory,4files