Linux 基本的文件增删改查命令

在这里,介绍一些 Linux 系统中简单的文件增删改查命令
语法,Linux 的语法格式为:

命令   可选参数   你要操作的对象

mkdir 创建文件夹

mkdir 命令用于创建新的文件夹,可使用相对路径或绝对路径创建:

mkdir  test  # 创建名为test的文件夹,等同于 mkdir  ./test
mkdir  /tmp/linux

若要同时创建两个或多个文件夹,可以用空格分隔开,例如在 test 目录中创建 boy 和 girl 两个文件夹:

cd  test
mkdir  boy gilr
 # 另一种写法:
mkdir  /root/test/{man,woman}    # 注意不要乱加空格

mkdir 默认是无法创建多层文件夹的。若要创建多层文件夹,需要指定 -p 参数递归创建文件夹:

mkdir  -p  /root/test/男同学/豹哥

touch 创建文本文件

使用 touch 命令的可以创建普通文本文件,也就是用来存放字符串的文件:

touch 今天学Linux贼开心  # 创建一个文本文件,文件名为:"今天学Linux贼开心"

rm 删除

rm,即 remove,用来删除文件或文件夹(Linux 中一切接文件,所以文件夹也是一种文件)。其基本语法为:

rm  可选参数   文件名

例如,删除 test.txt 文件:

rm test.txt  # 默认会让用户确认是否删除,输入y删除,输入n取消

如果需要强制删除文件,不必给我们提示,可以在删除的时候加上 -f 参数:

rm -f  test.txt

注意!!rm -f 是强制删除文件,不给用户任何提示,危险慎用!!!

注意!!rm -f 是强制删除文件,不给用户任何提示,危险慎用!!!

注意!!rm -f 是强制删除文件,不给用户任何提示,危险慎用!!!

rm 命令默认只能删除文件。若要删除文件夹,需要加上 -r 参数。此时,会递归删除指定文件夹以及其中全部内容:

rm -r  /test  # 递归删除根目录下的浩哥,及其子文件夹

同样地,对于每个即将删除的文件/文件夹,系统都会向用户再次确认。只有当用户输入 y 确认后,才会删除掉。

接下来要提到的命令,很好用,但也很危险,一定要看仔细了。

危险命令!!!!!!!!!!!慎用!!!!看好了

危险命令!!!!!!!!!!!慎用!!!!看好了

危险命令!!!!!!!!!!!慎用!!!!看好了

如果文件夹中的内容过多,我们不想每个文件都确认一下,可以使用 -rf 参数,强制递归删除文件和文件夹,且不会给用户任何提示。

因为不会有提示,所以敲命令时一定要仔细,其用法为:

rm  -rf  /tmp/*  # 删除tmp下所有内容 
rm  -rf  /tmp/   # 不加*是会直接删除这个文件夹

下面这条命令,无论何时何地,断然不要用!!!

下面这条命令,无论何时何地,绝对不要用!!!

下面这条命令,无论何时何地,千万不要用!!!

rm -rf /*    # 删除所有文件

cd 切换目录

cd,即 change directory 更改目录。其用法为:

cd  /   # 切换目录到 根目录下  
cd  ./tmp   # 切换到当前目录下的tmp文件夹中

exit 退出 Linux

exit 命令用来退出 Linux 系统:

exit

clear 清空屏幕

clear 命令用来清空屏幕,删除屏幕中显示的左右内容:

clear

hostnamectl 主机名控制

hostnamectl   set-hostname  linuxlearning # 修改主机名,重新登陆生效

Linux 的特殊重定向符号

>  # 重定向输出覆盖符,类似于Python的w模式,覆盖写
>> # 重定向追加输出符,类似于Python的a模式,追加写入

<  # 重定向写入覆盖符,数据库数据导入时候用到
<< # 重定向追加写入符

我们用的比较多的是前两个符号,作用是将前一个命令输出的内容写入到文件中:

[root@localhost ~]# echo "大师兄,三师弟被妖怪抓走了~"  >  test.txt
[root@localhost ~]# echo "大师兄,师傅被妖怪抓走了~" >> test.txt
[root@localhost ~]# echo "大师兄,快来救我!!" >> test.txt
[root@localhost ~]# cat -n test.txt
     1	大师兄,三师弟被妖怪抓走了~
     2	大师兄,师傅被妖怪抓走了~
     3	大师兄,快来救我!!
[root@localhost ~]# 

cp 复制

cp,即 copy,用于复制文件或文件夹。其基本语法为:

cp  源文件  拷贝后的文件

直接使用 cp 命令可以拷贝单个的文件:

cp  test.txt   test.txt.bak  #拷贝单个文件

但是如果要拷贝文件夹,需要使用 -r 参数,进行递归拷贝:

cp -r test /tmp    # 递归拷贝当前目录下的test文件夹所有内容到/tmp目录下

mv 移动和重命名

mv,即 move,主要有两个作用:一个是移动文件的作用,另一个是重命名的作用。

mv 可以用来移动文件或文件夹的路径:

mv    /tmp/test/  /    # 移动test文件夹至根目录
mv   ./test.txt  ../   # 把当前目录下的test.txt移动到上一级目录去

mv 也可以起到重命名文件的作用

mv shi.txt  好诗.txt    # 将“shi.txt”重命名为“好诗.txt”

mv 也可以用来重命名文件夹,但是有个小小的坑:
第一种情况,新的文件夹名字不存在,则成功实现重命名:

mv test/   linuxtest

第二种情况,新的文件夹名字存在,则是移动到该文件夹的目录下:

[root@localhost test]# ls
linuxtest  test
[root@localhost test]# mv test linuxtest
[root@localhost test]# ls
linuxtest
[root@localhost test]# ls linuxtest/
test

很多信息其实直接从命令行前的提示就可以看出来:

pwd 打印工作目录

pwd,即 print working direcotry,用来打印当前所在的工作目录,也就是我在哪的意思,输出当前所处的绝对路径。

[root@localhost test]# pwd
/root/test

whoami 查看用户名

whoami,即 who am I,我是谁的意思,用来查看当前登录用户的用户名:

[root@localhost ~]# whoami
root

hostname 主机名

用来查看主机名字:

[root@localhost ~]# hostname
localhost

which 命令位置

which,哪一个,用来查看命令所处的位置。是去环境变量中查找是否有相应的命令文件:

which python  # 去环境变量中寻找是否存在python解释器,也就是PATH变量

ls 查看文件夹内容

ls,即 list,列出文件夹中所有的文件和文件夹内容的命令:

[root@localhost ~]# ls    # ls不接参数,查看当前目录中的内容
anaconda-ks.cfg  dj  test  test.py  test.txt  test.txt.bak
[root@localhost ~]# ls /usr/    # 查看指定文件夹中的内容
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

ls 可以接 -l 参数,查看文件详细信息,可简写作 ll

[root@localhost ~]# ls -l
total 16
-rw-------. 1 root root 1253 Feb  4 20:00 anaconda-ks.cfg
drwxr-xr-x. 4 root root   64 Feb  5 14:44 dj
drwxr-xr-x. 3 root root   23 Feb 10 16:24 test
-rw-r--r--. 1 root root  118 Feb  6 19:59 test.py
-rw-r--r--. 1 root root  110 Feb 10 15:53 test.txt
-rw-r--r--. 1 root root  110 Feb 10 16:06 test.txt.bak
[root@localhost ~]# ll
total 16
-rw-------. 1 root root 1253 Feb  4 20:00 anaconda-ks.cfg
drwxr-xr-x. 4 root root   64 Feb  5 14:44 dj
drwxr-xr-x. 3 root root   23 Feb 10 16:24 test
-rw-r--r--. 1 root root  118 Feb  6 19:59 test.py
-rw-r--r--. 1 root root  110 Feb 10 15:53 test.txt
-rw-r--r--. 1 root root  110 Feb 10 16:06 test.txt.bak

可以使用 -a 参数查看隐藏文件,Linux 中以 . 开头的文件夹即是隐藏文件:

[root@localhost ~]# ls -a
.                .bash_logout   .cshrc          .python_history    test          .viminfo
..               .bash_profile  dj              .rediscli_history  test.py
anaconda-ks.cfg  .bashrc        .mysql_history  .ssh               test.txt
.bash_history    .cache         .pki            .tcshrc            test.txt.bak

Linux 有几个比较特殊的文件夹,可以通过 ls 命令来查看:

ls .    # 点代表特殊文件夹,代表当前目录
ls ..   # 上级目录
ls  -   # 上一次的工作目录
ls  ~   # 当前登录用户的 家目录  

cat 查看文件内容

cat 命令用来查询文件内容的,其基本语法为:

cat  文件名

例如:

[root@localhost ~]# cat test.txt
大师兄,三师弟被妖怪抓走了~
大师兄,师傅被妖怪抓走了~
大师兄,快来救我!!

cat 后接 -n 可以显示出行号:

[root@localhost ~]# cat -n test.txt
     1	大师兄,三师弟被妖怪抓走了~
     2	大师兄,师傅被妖怪抓走了~
     3	大师兄,快来救我!!

cat 命令可以结合 [特殊重定向符号](#Linux 的特殊重定向符号) 向文件中写入内容:

[root@localhost ~]# touch first.py
[root@localhost ~]# cat >> first.py<<EOF
> #!coding:utf8
> print('来左边跟我一起画个龙,在你右边划一刀彩虹')
> EOF
[root@localhost ~]# cat first.py
#!coding:utf8
print('来左边跟我一起画个龙,在你右边划一刀彩虹')
[root@localhost ~]# python first.py 
来左边跟我一起画个龙,在你右边划一刀彩虹
[root@localhost ~]# 

echo 打印

echo 命令用于打印的内容,例如:

[root@localhost ~]# echo "大郎,起来喝药了"
大郎,起来喝药了

也可以将内容赋值给变量,然后直接打印变量名。Linux 这样定义一个变量:

name="大郎"

通过在变量名前加一个 $ 符号的形式取出变量的值:

echo $name

Linux 的命令帮助信息查看

--helpman 两种方式查看命令的帮助信息:

ls --help   # 查看简单帮助信息
man ls      # man手册,查看命令的详细说明文档
info ls    # 类似于man

find 查询

find 命令用来查询搜索,其基本语法为:

find  从哪找   -name   你要找的东西名字是什么

例如,在 Linux 下全局搜索以 .txt 结尾的文件,其中 * 为通配符,可以匹配任意内容:

find  /   -name   "*.txt"

再比如,在 /etc/ 目录下,进行局部搜索,找出网卡的文件,提示,网卡文件名字以 ifcfg 开头:

find   /etc     -name     "ifcfg*"

除了指定文件名查找,还可以附加 -type 参数查找某一类型的文件,诸如:

b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l - 符号链接文件
f - 普通文件
s - socket文件

全局搜索和 Python 相关的文件夹:

find  /  -type  d   -name "python*"

全局搜索,和 Python 相关的文件:

find  /  -type  f   -name "python*"

head 和 tail

head 命令用来显示文件开头一定行数的内容,默认看前 10 行;

tail 命令用来显示文件末尾一定行数的内容,默认倒序看后 10 行。

显示前 5 行:

head -5 file.txt

显示后 3 行:

tail -3 file.txt

tail 命令通过使用参数 -f 可以实现实时监控,是 flush 刷新的意思:

tail -f  /var/log/nginx/access.log