常用命令
ls -a列出目录所有文件,包括以.开始的隐藏文件
ls -r 反序排列
ls -s以文件大小排序
cd ~进入home目录
cd -进入上一次目录
pwd查看当前路径
mkdir t 在当前工作目录创建文件夹t
rm 删除文件夹或文件
rm -rf test删除test子目录及其文件
rmdir从一个目录中删除一个或多个子目录
mv移动文件或重命名文件,根据第二参数类型决定,若为目录则移动文件,若为文件名则重命名
mv test.log test1.txt 将test.log重命名为test.txt
mv llog1.txt log2.txt log3.txt /test3 将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中
cp命令将源文件复制到目标文件,或将多个源文件复制到目标目录
cat命令1:显示整个文件;2.将几个文件合成一个文件
cat file1 file2 > file
Linux的进程、线程、文件描述符
1.进程
Linux下,进程和线程几乎没有区别
编译好的程序只是一个文件,不是进程,可执行文件必须要载入内存,包装成一个进程才能真正跑起来。进程依靠操作系统创建,每个进程都有其固有属性,入进程号、进程状态、打开的文件。对于操作系统来说,进程就是一个数据结构。Linux源码如下:
struct task_struct
{
//1.进程状态
long state;
//2.虚拟内存结构体
struct mm_struct* mm;
//3.进程号
pid_t pid;
//4.指向父进程的指针
struct task_struct* parent;
//5.子进程列表
struct list_head children;
//6.存放文件系统信息的指针
struct fs_struct* fs;
//7.一个数组,包含该进程打开的文件指针
struct files_struct* files;
};
task_struct就是Linux内核对于一个进程的描述,也可以称为“进程描述符”
mm指针指向的是进程的虚拟内存,即载入资源和可执行文件的地方;
files指针指向一个数组,这个数组里装着所有该进程打开的文件的指针;
2.文件描述符
files,它是一个文件指针数组,一般来说 ,一个进程会从files[0]读取输入,将输出写入files[1],将错误信息写入files[2]。
每个进程被创建时,files的前三位被填入默认值,分别指向标准输入流、标准输出流、标准错误流。文件描述符就是指这个文件指针数组的索引,所有程序的文件描述符默认情况下0时输入,1是输出,2是错误。
输入重定向:程序想读取数据就会去files[0]读取,只需把files[0]指向一个文件,则程序就会从这个文件中读取,而不是从键盘。
输出重定向:把files[1]指向一个文件,那么程序的输出就不会写入到显示器,而是写入到文件中。
管道符其实就是把一个进程的输出流和另一个进程的输入流接起一条管道,数据在其中流通。
在Linux中不管是设备、另一个进程、socket套接字还是真正的文件,全都可以读写,同一装进一个简单的files数组,进程通过文件描述符访问相应资源。
3.线程
Linux下进程和线程基本没有区别。系统调用fork()可以创建一个子进程,函数pthread()可以创建一个线程。无论线程还是进程,都用task_struct结构表示,唯一的区别是共享的数据区域不同。线程和进程看起来没区别,只是线程的某些数据区域和其父进程是共享的,而子进程是拷贝副本,不是共享。