基本文件和目录操作
日常的文件的操作有 文件的copy, move, rename, remove 等操作。
1)复制文件目录(复制指定目录下的全部文件到另一个目录中)
$ cp -r dir1 dir2
(复制源目录为dir1, 目标目录为dir2, -r是递归把源目录下的目录递归的进行移动, dir2不存在的话自动创建)
$ cp -r dir1/* dir2
(源目录/* 中*代表源目录下的文件和文件夹, dir2存在的情况下使用)
$ cp file1 file2
2)移动文件目录
$ mv dir1 Desktop/dir1
3)重命名文件目录
$ mv file1 file2
$ mv dir1 dir2
4)删除文件目录
$ rm file
$ rm -r dir
5)创建文件目录
$ mkdir dir
$ touch file
$ >file
$ vim file
编辑模式的操作
【i】 从目前光标所在处插入
【a】 从当前光标所在的下一个字符处开始插入
【A】 从光标所在行的最后一个字符处开始插入
【o】 英文小写字母o,在目前光标所在行的下一行处插入新的一行并开始插入
【O】 英文大写字母O,在目前光标所在行的上一行处插入新的一行并开始插入
替换模式
【r】 只会替换光标所在的那一个字符一次
【R】 会一直替换光标所在字符,直到按下[ESC]键为止
【[ESC]】 退出编辑模式回到一般模式
命令行模式
【:w】 保存文件
【:w!】 若文件为只读,强制保存文件
【:q】 离开vi
【:q!】 不保存强制离开vi
【:wq】 保存后离开
【:wq!】 强制保存后离开
6)查看文件内容
$ cat file
# 适合比较短的文件
$ less file
# 有快捷键,可以看比较长的文件
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
7)查看文件类型 file
$ file file1
$ file dir1
8)查看文件大小
$ du -k file
(-k以1024 bytes为单位)
$ du -m file
(-m:多少字符)
9)文件打包(zip,tar,gzip,bzip2)
压缩
$ zip -r x.zip x/
(-r表示递归打包包含子目录的全部内容)
解压缩
$ unzip x.zip
$tar -cvf dir1.tar
. (在当前目录下压缩为dir1.tar压缩包)
$gzip dir1.tar
(压缩为dir1.tar.gz文件)
$ tar -zxvf xxx.tar.gz
(解压缩文件)
$ tar -zcvf xxx.tar.gz xxx/
$tar -cvf dir1.tar
. (在当前目录下压缩为dir1.tar压缩包)
$bzip2 dir1.tar
(压缩为dir1.tar.bz2文件)
$ tar -jxvf xxx.tar.bz2
$ tar -jcvf xxx.tar.bz2 xxx/
重定向
$cat file1 >file
(将file1中的内容添加到file文件中)
$ cat file2 >file
(file2中的内容添加到file文件中,但是file文件中以前的内容被覆盖)
$ cat file2 >> file
(以前文件里的内容不会被覆盖)
$ cat file1 file2 >>file
(将两个文件都输出到file文件中)
$ ls shit 2>output.txt
(2为标准错误输出的文件描述符)
管道线
更多的时候,我们希望把前一个程序的输出作为后一个程序的输入来使用。
$ command1 | command2 |command3
举个例子
$ cat file.txt
d.txt
a.txt
c.html
b.txt
b.txt
查看file.txt文件的内容,接着去除内容里面重复的内容(使用uniq命令),只保留txt文件 (使用grep),然后按文件名字字母顺序排序,并输出到output.txt文件。
$cat file.txt|uniq |grep txt |sort >output.txt
权限
用户对文件通常会涉及"读","写", "执行"三种权限,对ls同一文件的权限控制,是对于所有者,组,其他用户。
$ ls -l a.txt
-rw-rw-r-- 1 peter peter 0 Aug 30 11:57 a.txt
-是文件类型的,表示普通文件。接下来的rw-是只所有者对文件是否具有读,写,执行的权限,r表示有读权限,w表示有写权限,-表示没有执行权限。接下来的rw-表示组的读写执行的权限,r--表示其他用户的权限。
对目录查看权限。
$ ls -ld mydir
修改文件的权限
chmod rw-rw-rw- a.txt
(这个命令系统不认)
chmod 110110110 a.txt
(这个命令系统也不认)
chmod 666 a.txt
(成功给a.txt文件修改了权限)
所以文件的权限最后需要化为八进制表示。
同时我们也可以通过英文字符作为参数给文件赋予权限。
$ vim peter.sh
$ ./peter.sh
(执行文件)
=>Permission denied.$ chmod +x peter.sh
(赋予执行的权限)
$ ./peter.sh`
=>hello peter
$chmod -x pter.sh
(去除执行的权限)
其他形式的
$ chmod +w file
$ chmod -w file
$ chmod a+x file
(a 所有用户)
$ chmod u+x file
(u 文件的所有者)
进程
$man ps
(报告系统当前的进程状态)
$ ps aux
(查看系统当前的所有进程)
$ ps aux|less
(内容太多,用less来做分页器,从开头查看)
root 28185 0.0 0.0 102964 1580 ? Ss 18:08 0:00 /sbin/lvmetad -f
第一个字段为那个用户执行这个进程 ,第二个PID就是我们要的进程号了。
$ ps aux|grep vim
(查找vim进程)
$kill 2345
(杀死进程,2345为进程号)
后台执行
$ firefox &
(启动firefox, 直接后台启动)
$firefox
(前台启动,当前shell就会一直被占据)
如果想要程序在后台执行,先Ctrl-z将它挂起,然后
$bg
想要程序重新回到前台,就是当前的shell,
$ fg
可以用Ctrl-C 来关闭
kill进程
如果一个进程在shell的前台执行,可以直接用Ctrl-C来关闭
还可以用
$kill PID
$ killall program_name
如果程序杀不死,则可以用
$kill -9
PID强行杀死