
1.shell启动
shell提供了对Linux系统的交互式访问,通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。
 /etc/passwd/文件包含了所有用户的基本信息配置,
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
例如上述root账户信息配置包含7个数据字段,字段之间用冒号分隔。每个字段的含义后续会展开介绍,其中最后一个字段指定了用户使用的shell程序,即/bin/bash。
2. shell提示符
登录终端后会看到shell提示符$,也是默认bash shell的提示符,它表示shell在等待用户输入命令。
3. bash手册
shell中使用man命令访问Linux系统的手册,man + [命令名]显示相应命令的手册页。
 例如:使用man查询拷贝(copy)命令的介绍
$ man cp
CP(1)                                               User Commands                                               CP(1)
#命令名加简短描述
NAMEcp - copy files and directories
#命令语法
SYNOPSIScp [OPTION]... [-T] SOURCE DESTcp [OPTION]... SOURCE... DIRECTORYcp [OPTION]... -t DIRECTORY SOURCE...
#命令一般性描述
DESCRIPTIONCopy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.Mandatory arguments to long options are mandatory for short options too.-a, --archivesame as -dR --preserve=all--attributes-onlydon't copy the file data, just the attributes--backup[=CONTROL]make a backup of each existing destination file-b     like --backup but does not accept an argument--copy-contentscopy contents of special files when recursive...#手动上下键滚动手册,h键查看帮助,空间键翻页,q键退出手册Manual page cp(1) line 1 (press h for help or q to quit)
man命令页支持关键词搜索,例如:
#我想查找renam(e)重命名命令手册
$ man -k renam
docker-container-rename (1) - Rename a container
docker-rename (1)    - Rename a container
dpkg-name (1)        - rename Debian packages to full package names
git-mv (1)           - Move or rename a file, a directory, or a symlink
lvrename (8)         - Rename a logical volume
mmove (1)            - move or rename an MSDOS file or subdirectory
mren (1)             - rename an existing MSDOS file
mv (1)               - move (rename) files
rename.ul (1)        - rename files
rename (2)           - change the name or location of a file
renameat (2)         - change the name or location of a file
renameat2 (2)        - change the name or location of a file
vgrename (8)         - Rename a volume group
zipnote (1)          - write the comments in zipfile to stdout, edit comments and rename files in zipfile
3.1 man手册解读
Linux手册页常用段名
| 段 | 描述 | 
|---|---|
| Name | 显示命令名和简短描述 | 
| Synopsis | 命令语法 | 
| Configuration | 命令配置信息 | 
| Description | 命令的一般性描述 | 
| Options | 命令选项描述 | 
| Exit Status | 命令的推出状态 | 
| Return Value | 命令的返回值 | 
| Errors | 命令的错误消息 | 
| Environment | 命令使用的环境变量 | 
| Files | 命令用到的文件 | 
| Versions | 命令的版本信息 | 
| Conforming To | 遵循的命令标准 | 
| Notes | 其他有帮助的资料 | 
| Bugs | 提交Bug的途径 | 
| Example | 命令的用法示例 | 
| Authors | 命令的开发人员信息 | 
| Copyright | 命令源码的版权信息 | 
| See Also | 与该命令类似的其他命令 | 
如上手册页左上角和右上角CP(1)表示CP命令所在Linux的手册的第一节,为可执行程序或shell命令。
 Linux手册页节
| 节号 | 所涵盖的内容 | 
|---|---|
| 1 | 可执行程序或shell命令 | 
| 2 | 系统调用 | 
| 3 | 库调用 | 
| 4 | 特殊文件 | 
| 5 | 文件格式与约定 | 
| 6 | 游戏 | 
| 7 | 概览、约定及杂项 | 
| 8 | 超级用户和系统管理员命令 | 
| 9 | 内核例程(routine) | 
man支持查看命令特定节
$ man 2 rename
RENAME(2)                                     Linux Programmer's Manual                                     RENAME(2)NAMErename, renameat, renameat2 - change the name or location of a fileSYNOPSIS#include <stdio.h>int rename(const char *oldpath, const char *newpath);#include <fcntl.h>           /* Definition of AT_* constants */#include <stdio.h>int renameat(int olddirfd, const char *oldpath,int newdirfd, const char *newpath);int renameat2(int olddirfd, const char *oldpath,int newdirfd, const char *newpath, unsigned int flags);Feature Test Macro Requirements for glibc (see feature_test_macros(7)):renameat():Since glibc 2.10:_POSIX_C_SOURCE >= 200809LBefore glibc 2.10:_ATFILE_SOURCErenameat2():_GNU_SOURCEManual page rename(2) line 1 (press h for help or q to quit)
4. 浏览Linux文件系统
Linux系统部分虚拟目录文件路径如下
 
 由根目录(/)出发,访问其他目录,如上test.txt文件路径为/home/zhangsan/Doucuments/test.txt。
 Linux文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中。Linux会将根驱动器上一些特别的目录作为挂载点(将虚拟目录中分配额外存储设备的目录),其文件结构如下:
 
 硬盘Disk2挂载在硬盘Disk1 /home目录。
 Linux常见目录(基于FHS标准)及用途如下:
| 目录 | 用途 | 
|---|---|
| / | 虚拟目录的根目录,通常不会在这里放置文件 | 
| /bin | 二进制文件目录,存放了很多用户级的GNU实用工具 | 
| /boot | 引导目录,存放引导文件 | 
| /dev | 设备目录,Linux在其中创建设备节点 | 
| /etc | 系统配置文件目录 | 
| /home | 主目录,Linux在其中创建用户目录 | 
| /lib | 库目录,存放系统和应用程序的库文件 | 
| /libname | 库目录,存放替代格式的系统和应用程序的库文件 | 
| /media | 媒介目录,可移动存储设备的常用挂载点 | 
| /mnt | 挂载目录,用于临时挂载文件系统的常用挂载点 | 
| /opt | 可选目录,存放第三方软件包 | 
| /proc | 进程目录,存放现有内核、系统以及进程相关的信息 | 
| /root | root用户的主目录 | 
| /run | 运行目录,存放系统的运行时数据 | 
| /sbin | 系统二进制文件目录,存放很多管理级的GNU实用工具 | 
| /srv | 服务目录,存放本地服务的相关文件 | 
| /sys | 系统目录,存放设备、驱动程序以及部分内核特性信息 | 
| /temp | 临时目录,可以在其中创建和删除临时工作文件 | 
| /usr | 用户目录,一个次目录层级结构 | 
| /var | 可变目录,存放经常变化的文件,比如日志文件 | 
4.1 遍历目录
Linux文件系统中,使用cd命令进行目录切换
$ cd / 或 cd		#切换到根目录
$ cd ~		#切换到当前用户目录
$ cd ..		#切换到上一级目录
$ cd -		#返回上一次目录
文件目录有两种表达方式:
- 绝对路径:定义了在虚拟目录结构中,从根目录开始的准确位置。
- 相对路径:基于当前位置的目标路径。
4.1.1 绝对路径
绝对路径总是以根目录(/)作为起始,可以准确的表明用户想切换到的确切位置,例如
$ cd /usr/bin
查看当前目录,可以使用pwd(print work direction)命令
$ pwd
/home/zhangsan
4.1.2 相对路径
相对路径不以/开头,而是以目录名或特殊字符起始,例如
$ cd bin/		#切换至当前目录下的bin文件下
bin$
$ cd ./bin		#切换当前目录(./)下的bin目录下
$ cd ..			#切换至当前目录的上一层目录
$ cd ../../test	#切换至上上一层目录下的test目录下
4.2 列出目录和文件
通过ls命令可以列出目录及文件,常见用法如下
$ ls			#ls命令基本形式显示当前目录下的文件和目录
bin  ohos$ ls -F		#以文件类型显示当前目录下的文件和目录;目录名后接/, 可执行文件名后接*
bin/  ohos/  test.txt my_script*$ ls -a		#显示当前目录下所有目录和文件,包含隐藏目录和文件
.	.bash_logout	.ccache	...
..	.cache	.config	...$ ls -R 		#显示当前目录所包含的子目录中的文件$ ls -l		#以长列表格式显示当前目录下的文件和目录
total 8	#该目录文件锁分配的总块数
drwxrwxr-x 2 zhangsan zhangsan 4096 Dec  5 09:57 bin
drwxr-xr-x 4 zhangsan zhangsan 4096 Dec  4 14:57 ohos
-rw-r--r-- 1 zhangsan zhangsan    0 Jan 14 00:48 test.txt
第一条目录信息解析如下
 
 其中文件类型包括:
- 目录:d
- 文件:-
- 链接文件:l
- 字符设备:c
- 块设备:b
文件权限:rwxrwxr-x为775
ls 后面可以根特殊字符或模式通配符进行过滤
$ ls test.txt		#显示当前目录下,文件或目录名为test.txt的文件或目录
test.txt$ ls test*			#显示当前目录下,以test开头的文件或目录
test.txt test/ test1.doc$ ls te[!s]t		#!将不需要的内容排除在外
tet/ teat.doc tebt.txt
4.3 处理文件
4.3.1创建文件
使用touch命令创建文件,文件以当前用户名作为该文件的属主
$ touch file.text
$ ls -l file.txt
-rw-r--r-- 1 zhangsan zhangsan 0 Jan 14 01:34 file.text$ touch 1.doc 2.doc			#touch支持同时创建多个文件
$ls -l *.doc
-rw-r--r-- 1 zhangsan zhangsan 0 Jan 14 01:36 1.doc
-rw-r--r-- 1 zhangsan zhangsan 0 Jan 14 01:36 2.doc
4.3.2 复制文件
使用cp命令复制/拷贝文件或目录,将文件或目录从一个路径复制到另外一个路径。
$ cp ./test.txt ../		#将当前目录下的test.txt拷贝至上一层目录
需要注意
- 新路径的文件是一个全新的文件
- 如果新路径已经存在该文件,cp会覆盖新路径的原文件,但不会提醒你,如需提醒可加上-i选项
$ cp -i ./test.txt ../test.txt
cp: overwrite '../test.txt'?		#y,覆盖;n,不覆盖
- 目标路径为目录,则需要加/,否则表示文件
$ cp test.txt ./test			#若./test不存在,则会将原文件拷贝成目标文件名的文件
$ tree
.
├── test			#创建了新的test文件,内容与test.txt一致
└── test.txt$ cp test.txt ./test/		#若./test不存在,则报错
cp: cannot create regular file './test/': Not a directory$ cp test.txt ./test		#若./test目录存在,则将test.txt拷贝至./test目录下
$ tree -a
.
├── test
│   └── test.txt
└── test.txt
cp命令的其他常见用法:
$ cp ./test/test.txt .		# 将./test/test.txt文件拷贝至当前目录$ cp -R test/ test1/		#将test目录全部文件拷贝至test1目录中$cp -rf test/ test1/		#将test目录全部文件强制拷贝至test1目录中
4.3.3 链接文件
链接:是目录中指向文件真实位置的占位符。
4.3.3.1.软链接
软件链接是一个真实存在的文件,该文件指向存放在虚拟目录结构中的另一个文件,这两个以符号方式链接在一起的文件彼此的内容并不相同。
 通过ln命令为一个文件创建链接文件
$ ln -s test.txt slink_test.txt
ls -l *test.txt
lrwxrwxrwx 1 zhangsan zhangsan 8 Jan 14 20:11 slink_test.txt -> test.txt
-rw-r--r-- 1 zhangsan zhangsan 0 Jan 14 01:45 test.txt
注意:slink_test.txt与test.txt的文件大小并不相同,着说明它们是两个完全不同的文件。
4.3.3.2 硬链接
硬链接创建的是一个独立的虚拟文件,包含了原文件的信息及位置,本质是同一个文件。
$ ln test.txt hlink_test.txt
$ ls -l *test.txt
-rw-r--r-- 2 huzhou huzhou 0 Jan 14 01:45 hlink_test.txt
-rw-r--r-- 2 huzhou huzhou 0 Jan 14 01:45 test.txt
注意硬链接不能跨文件系统,而软链接可以。
4.3.4 文件重命名
使用mv命令,进行文件重命名与文件移动相同,将文件或目录移动到另一个位置或者重新命名。
#将当前目录的test.txt重命名为test_bak.txt
$ mv ./test.txt ./test_bak.txt
$ ls -l test*.txt
-rw-r--r--  2 zhangsan zhangsan     0 Jan 14 01:45 test_bak.txt
mv命名只影响文件名
4.3.5 删除文件
使用rm命令删除文件或文件夹,常见使用方式如下:
$ rm ./test.txt			#删除当前目录下test.txt文件
$ rm -i ./test.txt		#删除文件前先询问是否真的要删除文件。
rm: remove regular empty file './test_.txt'?
$ rm -rf ./test			#强制删除当前目录下test文件夹(所有文件)
$ rm -rf test*.txt		#强制删除以test开头,.txt结尾的文件
4.3.6 创建目录
使用mkdir命令创建目录
$ mkdir test		#在当前目录下创建test文件夹
$ mkdir -p testA/testB/testC	#根据需要创建确实的父目录
4.3.7 删除目录
使用rm -r 或rm -R删除目录
$ rmdir test		# rmdir只能删除空目录
rmdir: failed to remove 'test': Directory not empty
$ rm -r test		#递归删除test目录内容
4.3.8 查看文件
4.3.8.1查看文件类型
使用file命令查看文件类型
$ file test.txt			#查看文件类型,test.txt是ASCII文本文件
test.txt: ASCII text$ file test/			#查看目录文件类型,test是目录
test/: directory$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped
4.3.8.2 查看文件内容
使用cat查看文件详细内容
$ cat test.txt			#查看test.txt文件所有内容
this is a test file$ cat -n test.txt		#查看test.txt文件所有内容,并显示行号1  this is a test file
对于大文件而言,cat在查看文件内容时会一闪而过,可以使用more命令(分页工具+),按页显示文本内容
$ more /etc/profile
more命令还有一个升级版本,即less,它比more提供了前后翻页和搜索等功能。
$ less /etc/profile
head命令,查看文件的最开始几行内容,默认10行
$ head ./test.txt		#查看./test.txt文件的前10行
$ head -n -2 ./test.txt	#查看./test.txt文件的前2行
tail命令,查看文件的最后几行内容,默认10行
$ tail /etc/profile			#查看/etc/profile文件的最后10行内容
$ tail -n 2 /etc/profile	#查看/etc/profile文件的最后2行内容