一、Linux文件管理
元字符
* 匹配一个或多个字符
? 匹配一个字符
注释:含有文件/目录的项都可以以绝对路径或者相对路径的形式表示。
文件操作命令
mv:移动/重命名文件或者目录
cp:复制文件
ls:列出文件或者目录信息(-l 详细信息)
wc:统计当前文件的行数、单词数和字符数
rm:删除文件
文件查看命令
cat:连接(concatenate)文件不打印;打印到标准输出设备(-n 显示行号;-A 显示不可打印字符,如$等)
tac:连接文件;以行倒序打印到标准输出设备
more:查看长文件(空格:下页; B:上页)
head:显示文件开头内容(-n 前n行; -c 开始的字符个数)
tail:显示文件末尾内容(-n 后n行;-c 末尾的字符个数)
标准的Linux流
一般情况下,每个Linux程序运行时都会创建三个文件流(三个文件):- 标准输入流(stdin):stdin的文件描述符为0,Linux程序默认从stdin读取数据。
- 标准输出流(stdout):stdout 的文件描述符为1,Linux程序默认向stdout输出数据。
- 标准错误流(stderr):stderr的文件描述符为2,Linux程序会向stderr流中写入错误信息。
二、Linux目录
/ 表示根目录
~ 表示主目录
. 表示当前目录
.. 表示上级目录
- 在当前和上一个进入目录之间切换
以 / 开头——绝对路径
不以 / 开头——相对路径(与当前目录的关系)
pwd:显示绝对路径
mkdir:创建目录(+绝对路径或者相对路径; 同时创建多个目录;)——创建父目录(多级目录):-p(适用于上级目录不存在的情况)
rmdir:删除目录(目录必须为空)
注释:含有文件/目录的项都可以以绝对路径或者相对路径的形式表示。
三、Linux文件属性
Linux中的所有数据都被保存在文件中,所有的文件被分配到不同的目录。目录是一种类似于树的结构,称为文件系统。
Linux中的文件类型:
- 普通文件(regular file):是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本文件(ASCII)和二进制文件(binary)对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行——可以用cat、more等命令直接查看文本文件的内容;
- 目录文件(directory):类似于Windows的文件夹;
- 链接文件(软链接,link):类似于Windows的快捷方式;
- 设备文件:Linux 与外部设备(例如光驱,打印机,终端,modern等)通过设备文件进行通信。例如,每一个终端都有自己的设备文件来供 Linux 写数据(出现在终端屏幕上)和读取数据(用户通过键盘输入)。
特别:设备文件和普通文件不一样,设备文件中并不包含任何数据。
设备文件的类型:
- 字符设备文件:以字母"c"开头。字符设备文件向设备传送数据时,一次传送一个字符。典型的通过字符传送数据的设备有终端、打印机、绘图仪、modern等。
- 块设备文件:以字母"b"开头。块设备文件向设备传送数据时,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘。
查看Linux文件属性:
ls -l 查看当前目录下文件
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
第1列:文件类型;所属主、所属组和其他用户的权限、
第1位为文件类型:
前缀 | 描述 |
---|---|
- | 普通文件。如文本文件、二进制可执行文件、源代码等。 |
b | 块设备文件。通过内存中的buffer |
c | 字符设备文件。硬盘也可以使用字符设备文件。 |
d | 目录文件。目录可以包含文件和其他目录。 |
l | 链接文件(软链接)。可以链接任何普通文件,类似于 Windows 中的快捷方式。 |
p | 管道。管道是进程间的一种通信机制。 |
s | 用于进程之间通信的套接字。 |
第2列:链接占用的节点
第3列:所属主
第4列:所属组
第5列:文件大小
第6/7/8列:最后修改时间/创建时间
第9列:文件名
更改文件权限:
chgrp:改变文件和目录(只是该目录)的所属组(group)——chgrp [-R] group file/dir(list)
若要修改目录及之下的目录和文件,递归(recursive)修改 -R ;
大多数命令可以作用于 多个文件/目录;
chown:改变文件或目录的所属者(owner)——chown [-R] user file/dir(list)
chmod:改变文件或目录权限
注释:
1)目录权限:r 可读即可看见,x 可执行即打开目录;
2)Linux下,目录的默认权限为755(rwxr-xr-x,),文件的默认权限为644(rw-r--r--,)。
- chmod num file/dir(list)
- chmod [u/g/o/a][+/-/=][r/w/x/a] file/dir(list)
umask:修改文件或目录的默认权限
注释:
1)建立普通文件,预设没有可执行权限,即666(-rw-rw-rw-);建立目录,预设所有权限开放,即777(drwxrwxrwx)。
2)umask值为默认差值,即默认权限值=预设(666/777)-umask值(默认022)。因此,普通文件默认权限为644,目录默认权限为755
注意:umask的计算方法,换算成数字做减法,有时会出错。如666-033=633,实则为“-rw-rw-rw-”-“-----wx-wx”=“-rw-r--r--”=644
chattr:修改文件或目录的特殊权限
lsattr:读取文件或目录的特殊权限
set uid、set gid、sticky bit:
- chmod [u/g/o/a][+s] file/dir(list)
四、Linux环境变量
同时,在Linux中断中输入命令时,只是打出命令,而不使用命令的绝对路径,就是因为环境变量PATH起作用。
例如:echo $PATH
即可以看到PATH环境变量的值。
在Linux中,环境变量是一个很重要的概念。环境变量可以由系统、用户、Shell以及其他程序来设定。
变量就是一个可以被赋值的字符串,赋值范围包括数字、文本、文件名、设备以及其他类型的数据。
下面的例子,我们将为变量 TEST 赋值,然后使用 echo 命令输出:
$ TEST="Linux Programming"
$ echo $TEST
Linux Programming
注意:变量赋值时前面不能加 $ 符号,变量输出时必须要加 $ 前缀。退出 Shell 时,变量将消失。PS1和PS2变量
PS1变量用来保存命令提示符,可以随意修改,如果你不习惯使用 $ 作为提示符,也可以改成其他字符。PS1变量被修改后,提示符会立即改变。
例如,把命令提示符设置成'=> ':
$PS1='=> '
=>
=>
也可以将提示信息设置成当前目录,例如:
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/Linux]$
[root@ip-72-167-112-17 /var/www/tutorialspoint/Linux]$
命令提示信息包含了用户名、主机名和当前目录。
下表中的转义字符可以被用作PS1的参数,丰富命令提示符信息。
转义字符 | 描述 |
---|---|
\t | 当前时间,格式为 HH:MM:SS |
\d | 当前日期,格式为Weekday Month Date |
\n | 换行 |
\W | 当前所在目录 |
\w | 当前所在目录的完整路径 |
\u | 用户名 |
\h | 主机名(IP地址) |
# | 输入的命令的个数,每输入一个新的命令就会加1 |
\$ | 如果是超级用户 root,提示符为#,否则为$。 |
你可以在每次登录的时候修改提示符,也可以在 .profile 文件中增加 PS1 变量,这样每次登录时会自动修改提示符。
PS2 变量:如果用户输入的命令不完整,Shell还会使用第二提示符来等待用户完成命令的输入。默认的第二命令提示符是 >,保存在 PS2 变量,可以随意修改。
下面的例子使用默认的第二命令提示符:
$ echo "this is a
> test"
this is a
test
$
下面的例子通过PS2变量改变提示符:
$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$
常用环境变量
下表列出了部分重要的环境变量,这些变量可以通过上面提到的方式修改。变量 | 描述 |
---|---|
DISPLAY | 用来设置将图形显示到何处。 |
HOME | 当前用户的主目录。 |
IFS | 内部域分隔符。 |
LANG | LANG可以让系统支持多语言。例如,将LANG设为pt_BR,则可以支持(巴西)葡萄牙语。 |
PATH | 指定Shell命令的路径。 |
PWD | 当前所在目录,即 cd 到的目录。 |
RANDOM | 生成一个介于 0 和 32767 之间的随机数。 |
TERM | 设置终端类型。 |
TZ | 时区。可以是AST(大西洋标准时间)或GMT(格林尼治标准时间)等。 |
UID | 以数字形式表示的当前用户ID,shell启动时会被初始化。 |
下面的例子中使用了部分环境变量:
$ echo $HOME
/root
]$ echo $DISPLAY
$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$
五、Linux下搜索文件
*** ls 等命令时按条件显示或输出???1、which
查找可执行文件的绝对路径。(注:只能查找PATH环境变量中出现的路径下的可执行文件)
2、whereis
3、locate
4、find
find [选项] [参数]
find命令链接:http://man.linuxde.net/find
-name:文件名匹配
find /usr/bin/ -name v*——搜索以v 开头的文件
-iname:文件名匹配且忽略大小写
find /usr/bin/ -name v*——即搜索以v开头的文件且忽略大小写
-o:同时满足选项
find /usr/bin/ -name v* -o -name h*——搜索以v 和h 开头的文件
-type:类型匹配搜索(f:普通文件;d:目录文件;c:字符设备文件;b:块设备文件)
find /usr/bin/ -type l——搜索 l 类型的文件
-maxdepth:基于目录深度搜索
find /usr/bin/ -maxdepth 3 -name v*——基于三层目录以文件名匹配搜索
-size:文件大小匹配(b:块512字节;c:一字节;w:2字节;k:千字节;M;G)
find /usr/bin/ -size +5M -type f——搜索目录下 大于5M字节 的普通文件。(-5k 即小于; 5k 即等于)
-empty:列出所有长度为0的相关文件
find /usr/bin/ -empty -name h*——搜索以h 开头的长度为0的文件