ls 命令,用来列举目录内的文件。
ls -l 详细的列举目录内的文件,返回示例如下:
总用量 0
:表示后面所有文件的总的大小,以k为单位(后面所有文件的大小相加得到的值÷1024)。drwxr-xr-x.
:表示文件的类型和文件的权限。2
:表示文件的链接数量(也就是目录下一层的文件的数量(包括.
)和..
)。cch
:表示文件的拥有者。cch
:表示文件的组用户。6
:表示文件的大小(字节数)。月 20 2022
:文件最后一次修改的时间。Desktop
:文件名。drwxr-xr-x
chmod ‘o-w’ filename
- 常用权限位来对应权限,1表示开权限,0表示无权限,比如
rwxr-xr-x
的权限位是111101101
,再简化就是755
,如果想要修改对应的权限,比如给所有用户开全部的权限,可以使用命令:chmod 777 filename
- 修改文件权限,一般需要文件的拥有者和root用户才可以进行修改。
.
和..
;.
表示当前目录,..
表示上一级目录。ln 原文件 目标文件
ls -li
#硬链接实验:
[root@servera]# touch a1.txt #创建一个测试文件
[root@servera]# ln a1.txt hard.txt #创建a1的一个硬链接文件hard.txt
[root@servera]# ls-li #-i参数显示文件的inode值
total 24
4318232 -rw-------. 1 root root 6947 Apr 4 2019 anaconda-ks.cfg
4318268 -rw-r--r--. 2 root root 7 Jun 26 20:06 a1.txt
4318268 -rw-r--r--. 2 root root 7 Jun 26 20:06 hard.txt
4318231 -rw-------. 1 root root 6750 Apr 4 2019 original-ks.cfg
#从上面的结果可以看出,硬链接文件hard与原文件a1的inode值相等,均为4318268
[root@servera]# echo "sannet" > a1.txt #向a1写入内容为sannet
[root@servera ~]# cat a1.txt #查看a1文件的内容
sannet
[root@servera ~]# cat hard.txt #查看硬链接hard文件的内容发现是一样的
sannet
[root@servera ~]# rm -f a1.txt #将原文件删除
[root@servera ~]# cat hard.txt #查看硬链接文件内容是否存在-->发现存在
sannet
ln -s 原文件 目标文件
建立。[root@servera ~]# touch soft.txt #创建原文件
[root@servera ~]# vim soft.txt
[root@servera ~]# ln -s soft.txt abc.txt #创建软链接
[root@servera ~]# ll -li #查看inode值
total 24
4427926 lrwxrwxrwx. 1 root root 8 Jun 27 00:46 abc.txt -> soft.txt
4318232 -rw-------. 1 root root 6947 Apr 4 2019 anaconda-ks.cfg
4318268 -rw-r--r--. 1 root root 7 Jun 26 12:06 hard.txt
4318231 -rw-------. 1 root root 6750 Apr 4 2019 original-ks.cfg
4195052 -rw-r--r--. 1 root root 7 Jun 27 00:45 soft.txt
#从上面的结果可以看出,软链接文件abc.txt与原文件soft.txt的inode值不相等
修改文件的拥有者和所属组可以使用chown
# 修改文件的拥有者
chown 所有者 文件或目录
# 修改文件的所属组
chown :所属组 文件或目录
# 修改文件所属组和拥有者
chown 拥有者:所属组 文件或目录
[-R]
选项,表示连通子目录中的所有文件,都更改所有者。使用chgrp可以修改文件或者目录的用户组,一般只有超级用户或者拥有权限的用户才可以使用该命令。
chgrp 用户组名 文件名
cp命令用于复制,它可以将单个文件复制成一个指定的文件名的文件或者将单个文件复制给一个存在的目录。
cp 源文件或者目录 目标文件或者目录
# a是普通文件,b是存在的目录,下面指令把a复制到b的目录下
cp a b
# a∈b,c是存在的目录,下面指令把b以及其下的所有子文件一起复制到c
cp -r b c
mv命令可用于将文件或者目录移动到另一个目录
mv 源文件或目录 目标文件或目录
mv命令还可以用于文件改名
mv 改名前的文件名字 改名后的文件名字
显示文件使用的命令是cat;但是cat命令不支持搜索、滚动、翻页等操作,如果文件的篇幅比较长会出现一部分内容看不到的情况。
cat -n
可以显示行号。
cat filename
可以使用more命令实现文件的逐屏显示,more命令会显示文件的阅读的进度,在文件中敲回车可以阅读整个文件;一般来说more只能向下翻屏。
more filename
还可以使用less命令显示文件,less命令不仅可以实现向下翻屏(PgDn),还可以实现向上翻屏(PgUp)。
less filename
head可以实现只显示文件头的内容;tail可以实现只显示文件尾的内容
head filename
tail filename
使用rm命令删除文件;使用rmdir删除空目录;使用rm -r 删除一个目录及其下所有子文件
rm filename
rmdir emptyFile
rm -r File
linux上的压缩工具分为两种:
- 一种是
gzip
,执行命令后压缩为.gz
的文件,解压缩可以使用gzip -d
命令或者gunzip
命令;- 一种是
bzip2
命令,执行命令后压缩为.bz2
的文件,解压缩可以使用bzip2 -b
命令。
# 压缩文件
gzip filename
# 压缩目录
gzip -r filename
gzip -d filename
gunzip filename
bzip2 filename
bzip2 -d filename
linux使用
tar
命令对目录以及目录下的文件进行打包,打包与压缩的概念不同,打包是把所有的文件装到一起变成一个文件,压缩是把一个文件合理摆放腾出更多的空间。
tar有许多的参数,包括:
-c:创建压缩
-f:指定压缩包的名称
-z:使用gzip压缩工具进行压缩
-j:使用bzip2压缩工具进行压缩
-J:使用xz压缩工具进行压缩
-t:显示压缩包内容,不解压
-v:显示压缩过程
-p:允许使用绝对路口进行压缩
-x:解压
-C:指定解压路径
-h:打包软链接
--exclude:排除某一些文件
# 把a压缩成asd文件,并且显示压缩的过程(v)
tar cvf asd a
# 不解压,显示压缩包内容
tar vtf asd
# 压缩
gzip asd
# 解压缩并且解开打包
tar xvzf asd.gz
使用mount可以显示当前整个系统的文件系统,如下所示
对于这条命令sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
sysfs
:系统名字;on /sys
:表示该文件系统所在的路径/sys
为根目录下的sys目录下;type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
:表示文件系统的类型,以及信息。需要超级用户才可以使用该命令
mount 需要挂载的文件 挂载到的文件路径
mount /dev/sdb /home/stu # 把/dev下的sdb文件挂载到/home目录下的stu文件中去
挂载成功后原来home上stu上的内容会被遮盖掉,但是原来的内容还在,只是被盖住了而已
# 可以使用umount把挂载的文件卸载下来
umount /dev/sdb
常用find命令在指定目录下查找文件,其语法如下:
find 目录名 选项 匹配模式
常用的选项和匹配模式有:
-name 文件名
:按照文件名去匹配文件,可以使用通配符,如“-name ‘*.txt’ ”。-type 文件类型
:按照文件类型匹配文件,常用的文件类型包括f(普通文件)、d(目录文件)、l(符号链接文件)等。-mtime 时间
:按照文件的修改时间来匹配文件,时间可以是一个数组,表示多少天内修改过文件,也可以使用+或者-符号表示在多少天之前或者之后修改过的文件。-user 用户名
:按照文件的拥有者来匹配文件。-size 大小
:按照文件的大小匹配文件,大小可以是一个数字,表示文件大小(单位为字节),也可以使用+或者-表示比多少字节大或者小的文件。以下是一些示例的命令:
# 在当前目录及其子目录中查找所有扩展名为.txt的文件
find . -name '*.txt'
# 在根目录中查找所有类型为目录的文件
find / -type d
# 在当前目录中查找所有大小为0的文件
find . -size 0
# 在当前目录中查找所有拥有者为root的文件
find . -user root
# 在当前目录中查找所有修改时间在7天以内的文件,并且把对应得路径打印出来
find . -mtime -7 -print
grep命令可以在文件中搜索指定的文本,其语法如下:
grep 选项 匹配内容 文件
常用的选项包括:
-n
:显示匹配行的行号。-r
:递归搜索子目录。-w
:只匹配整个单词。-e 正则表达式
:按照正则表达式进行匹配。以下是一些示例命令:
# 在文件中查找"hello"关键词
grep 'hello' file.txt
# 在文件中查找"hello"关键词,并忽略大小写
grep -i 'hello' file.txt
# 在文件中查找"hello"关键词,并显示匹配行的行号
grep -n 'hello' file.txt
# 递归搜索子目录,查找所有扩展名为.c的文件,并在其中查找"main"关键词
grep -r 'main' --include='*.c' .
# 使用正则表达式进行匹配,查找所有以数字开头的行
grep -e '^[0-9]' file.txt
组合命令:
find . -name p*.c -print|xargs grep include
组合命令中的|
表示将该符号前面的执行结果,作为输入的参数传递给该符号后面的命令(管道),该命令的意思是,在当前目录中寻找所有的p开头的.c文件,并给把这些文件中的include都找到。
linux有ps命令,用于显示当前活动进程的快照。
# 显示所有用户的所有进程
ps aux
# 显示所有进程的完整信息
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:40 ? 00:00:01 /usr/lib/systemd/systemd --swi
root 2 0 0 10:40 ? 00:00:00 [kthreadd]
...
cch 2500 1 0 10:42 ? 00:00:00 /usr/libexec/gnome-terminal-se
...
cch 2507 2500 0 10:42 pts/0 00:00:00 bash
cch 2565 2500 0 10:42 pts/1 00:00:00 bash
UID
表示userID,用户的名字;PID
表示进程的ID;PPID
表示当前进程的父进程的ID;C
表示CPU的占用率;STIME
表示进程的启动时间;TTY
表示进程运行的终端号,如果是?
表示该进程是一个系统进程,不与任意终端进行关联;TIME
表示进程的直接运行时间;CMD
表示进程的命令。当运行的进程状态不对时,可以使用ps查看进程的运行情况,使用kill来杀死进程(终止进程)
# 语法
kill -信号 PID
# 强制杀死进程
kill -9 PID
进程中一共有64种信号,实际上常用的有9种,更加常用的只有两种,分别为信号9和信号15:
9 表示强制终止
15 表示终止(可以使进程在退出之前清理并且释放资源)
1 终端断线
2 中断(相当于ctrl+c)
3 退出(相当于ctrl+\)
18 继续(与19相反)
19 暂停(相当于ctrl+Z)
记不住命令,可以使用联机帮助
# 查看ls命令的参数手册
man ls
# 查c语言常用函数fgets
man fgets
常规文件的权限是什么?如何分配或修改这些权限?文件夹(目录)的权限是什么?显示常规文件和文件夹的区别
讨论:①常规的文件权限有四种,r可读、w可写、x可执行、-没有权限;②可以使用chmod命令来分配或者修改文件的权限,其语法是 chomd 权限 filename ;③linux是一个多用户多任务的操作系统,可以通过用户好用户组来更好的控制目录文件的权限,具体说来就是:每一个文件都有一个拥有者,该拥有则属于某一个用户组,每一个文件的权限可以细分为三组(拥有者权限、用户组其他用户的权限、其他用户权限),可以使用 chmod 拥有者:所属组 目录 来修改文件的权限,可以使用ls -la来查看文件的权限;④显示常规文件其第一列的第一个字母为-,而目录文件的第一列的第一个字母为d,常规来讲,一个文件的默认访问权限是 -rw-rw-rw-,一个目录的默认访问权限是drwxrwxrwx。
当无法执行命令“chown、chgrp、chmod”等,请给出可能的原因,如何保证成功执行。
讨论:linux对于文件的管理最常用的命令有“chown、chgrp和chmod”,chown用来改变文件的所有权,这个命令只有root用户可以使用;chgrp也是只有root用户可以使用;chmod对于文件的所有者和root用户都可以使用;如果无法执行以上的命令,可以切换到root用户再来执行。
怎么新建一个目录?如何复制或者删除一个非空的目录。
讨论:①可以使用mkdir新建一个空的目录;②可以使用cp -r old new 对非空目录进行复制,rm -r old 对非空目录进行删除。
当用户使用“mv a b”,请表示出b如果是一个文件、目录或者不存在时的可能性。
讨论:mv命令可以将文件或者目录移动到另一个目录,或者对文件进行改名。如果b是一个文件,系统会把a改名为b,原来的b会被覆盖;如果b是一个目录,系统会把文件a移动到b的目录下,作为b的子文件(如果b本身也有名为a的文件,原来b下的a会被覆盖);如果b不存在,系统会把a改名成b。
什么是文件系统?请举个例子。(也许你可以用闪存)
讨论:操作系统中用于负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。在linux中,文件系统必须先被挂载才能使用可以使用mount和umount去挂载或者卸载一个文件,被挂载的文件会被暂时覆盖。
什么是管道,怎么去使用管道去创建一个组合命令,请给出一个例子。
讨论:①管道是linux的一种通信机制,管道可以实现把一个程序的输出直接连接到另一个程序的输入,从本质上讲,管道是一种特殊的文件;②可以使用管道符 | 来建立管道,格式命令为 a | b,表示a的输出作为b的输入,比如可以使用组合命令 find . -name p*.c -print|xargs grep include ,这条命令的意思是把所有名字以p开头,以.c结尾的文件找到,并且把这些文件的 include 字符都找到。
假设一个人正在读取一个大型的程序的源代码,他想要检查一个函数的定义,这个函数不在当前的读取文件中,你对他有什么建议。
讨论:可以使用查找定位的方式,在linux中可以使用find进行查找文件,使用grep对文件内容进行匹配。一般来说一个函数的定义存在于头文件中,可以使用 find -e filename.h,查找文件,使用grep functionName filename.h 来查找文件内容。
组合起来可以使用以下组合命令: find -e *.h | xargs grep functionName。
如果一个人想要在网上发送一个大型的程序的所有文件给他的舍友,你可以给他一些建议吗。
讨论:可以使用打包压缩的方式对文件进行处理,方便网络上的传输。在linux上,可以使用tar对文件进行打包成一个文件,使用gzip和bzip2对文件进行压缩,可以大大节省内存。例如可以使用 tar cvf asd a把打包成asd文件,使用 gzip把asd压缩成压缩文件,再传输。
假设网下登录TTY1,但是由于某一种原因停止了,你能给出一个解决的方案吗?
讨论:可以尝试重启linux系统,具体说来就是:
具体参考网址:https://www.python100.com/html/61093.html
假设四个人(李、张、王、赵)在一个小组中开发一个系统。如何为其文件分配权限通常情况下,640是合理的。但是,如果只能使用“chmod”来修改权限,那就太天真了。您需要修改每个用户的默认设置,以确保在创建文件时拥有正确的权限。(也许你需要在互联网上搜索学习命令umask、useradd、groupadd等。)
讨论:若用户创建一个文件,则文件的默认访问权限为 -rw-rw-rw- ,创建目录的默认权限drwxrwxrwx ,而umask值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值;useradd用来添加用户;groupadd用来添加用户组。
详情可以查看:https://blog.csdn.net/weixin_45191386/article/details/123656900 和 https://blog.csdn.net/yspg_217/article/details/121900800