Linux语法(不完整)

Linux语法学习

工作中需要用到linux做mongodb的一些事情。学一下linux。

对服务器来说,图形界面会占用更多的系统资源,而且会安装更多的服务、开放更多的端口,这对服务器的稳定性和安全性都有负面影响。

命令提示符

[root@localhost ~]#

这是Linux系统的命令提示符。

  • []:提示符的分隔符号 root:显示的是当前的登录用户,现在使用root用户登录 @:分隔符号
  • localhost:当前系统的简写主机名(完整的主机名是localhost.localdomain)
  • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
  • #:命令提示符,Linux用这个符号标识登录的用户权限等级。如果是超级用户,提示符是#,普通用户的提示符是$.

家目录是什么? Linux 系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家:

  • 超级用户的家目录:/root/。
  • 普通用户的家目录:/home/用户名/。

命令的基本格式

[root@localhost~]# 命令[选项][参数]

选项分短格式和长格式,如-l,–all

1.IS命令:显示当前目录下的文件

[root@localhost ~]#ls [选项][文件名或目录名]
  1. -a 显示全部文件,(隐藏文件)
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# Is -a
.anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history .viminfo ...bash_history .bash_profile .cshrc install.log.syslog .tcshrc
  1. -l 选项,显示文件详细信息
[root@localhost ~]# ls -l
总用量44
-rw-------.1 root root 1207 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root 24772 1 月 14 18:17 install.log
-rw-r-r--.1 root root 7690 1 月 14 18:17 install.log.syslog
#权限 引用计数 所有者 所属组 大小 文件修改时间 文件名
  1. -d 查看某个目录的详细信息
[root@localhost ~]# ls -l /root/
总用量44
-rw-------.1 root root 1207 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root 24772 1 月 14 18:17 install.log
-rw-r-r--.1 root root 7690 1 月 14 18:17 install.log.syslog

这个命令会显示目录下的内容,而不会显示这个目录本身的详细信息。如果想显示目录本身的信息,就必须加入"-d"选项。

[root@localhost ~]# ls -ld /root/
dr-xr-x---.2 root root 4096 1 月 20 12:30 /root/
  1. -h habit
    “ls-l"显示的文件大小是字节,但是我们更加习惯的是千字节用 KB 显示,兆字节用 MB 显示,而”-h"选项就是按照人们习惯的单位显示文件大小的,例如:
[root@localhost ~]# ls -lh
总用量44K
-rw-------.1 root root1.2K 1 月 14 18:18 anaconda-ks.cfg
-rw-r-r--.1 root root25K 1 月 14 18:17 install.log
-rw-r-r--.1 root root7.6K 1 月 14 18:17 install.log.syslog

2.CD 命令

命令格式

[root@localhost ~]# cd[目录名]

基本用法

1.cd命令切换目录只需在命令后加目录名即可,

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]#
#进入/usr/local/src/目录

2.简化用法

  • ~:代表用户的家目录
  • -:代表上次所在的目录
  • .:代表当前目录
  • …:代表上级目录

绝对路径和相对路径

  • 绝对路径:从根目录开始,一级一级指定的
  • 相对路径:只从当前目录开始,切换目录。

3.mkdir 命令:创建目录(文件夹)

命令格式

[root@localhost ~]# mkdir

常见用法

  1. 建立目录
[root@localhost ~]#mkdir cangls
[root@localhost ~]#Is

我们建立一个名为 cangls 的目录,通过 ls 命令可以査看到这个目录已经建立。注意,我们在建立目录的时候使用的是相对路径,所以这个目录被建立到当前目录下。

  1. 递归建立目录
    如果需要建立一系列的新目录,则需要加入"-p"选项,递归建立才可以。例如:
[root@localhost~]#mkdir -p lm/movie/jp/cangls
[root@localhost ~]# mkdir -p lm/movie/jp/cangls
[root@localhost ~]# ls
anaconda-ks.cfg cangls install.log install.log.syslog lm
[root@localhost ~]# ls lm/
movie
#这里只査看一级子目录,其实后续的jp目录、cangls目录都已经建立

4.rmdir 命令

命令格式

[root@localhost~]# rmdir[选项]目录名

选项:
-p:递归删除目录

常见用法

[root@localhost~]#rmdir cangls

删除目录,命令后面加目录名称即可。既然可以递归建立目录,当然也可以递归删除目录。例如:

[root@localhost ~]# rmdir -p lm/movie/jp/cangls/

但 rmdir 命令的作用十分有限,因为只能刪除空目录,所以一旦目录中有内容,就会报错。后续不论删除文件还是目录,都用rm.

5.touch 修改文件的时间戳

命令格式

[root@localhost~]# touch[选项]文件名或目录名
选项

  • -a:只修改文件的访问时间(Access Time)
  • -c:如果文件不存在,则不建立新文件
  • -d:把文件的时间改为指定的时间
  • -m:只修改文件的数据修改时间(Modify Time)

Linux 中的每个文件都有三个时间,分别是访问时间(Access Time)、数据修改时间(Modify Time)和状态修改时间(Change Time)。这三个时间可以通过 stat 命令来进行査看。

不过,touch 命令只能手工指定只修改访问时间,或是只修改数据修改时间,而不能指定只修改状态修改时间。因为不论是修改访问时间,还是修改文件的数据时间,对文件来讲,状态都会发生改变,即状态修改时间会随之改变。我们稍后讲 stat 命令时再具体举例。

注意,在Linux中,文件没有创建时间。

常见用法

[root@localhost~]#touch bols
#建立名为bols的空文件

6.stat 显示文件或文件系统的详细信息

命令格式

[root@localhost~]#stat [选项]文件名或目录名

选项:

  • -f:查看文件所在的文件系统信息,而不是查看文件的信息。

常见用法

例1 查看文件的详细信息

[root@localhost~]# stat anaconda-ks.cfg
File: "anaconda-ks.cfg"
#文件名
Size: 1170  Blocks: 8 IO Block: 4096 普通文件
#文件大小   占用的block数 块大小 文件类型
Device: 803h/2051d Inode: 130834 Links: 1
#i节点号 链接数
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
#权限 所有者 所属组
Access: 2016-05-06 23:31:41.396893415 +0800
#访问时间
Modify: 2016-05-06 23:31:41.396893415 +0800
#数据修改时间
Change: 2016-05-06 23:31:41.411006937 +0800
#状态修改时间

例2 查看文件系统信息
如果使用-f选项,就不是查看制定文件的信息,而是查看这个文件所在文件系统的信息,例如:

[root@localhost ~]#stat -f anaconda-ks.cfg
File: "anaconda-ks.cfg"
ID: c05ad05e0e3b0580 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 5045314 Free: 4356956 Available: 4100662 Inodes: Total: 1283632 Free: 1192731
  1. 三种时间的含义
    查看系统当前时间,如下:
[root@localhost~]#data
2016年05月07日星期六01:40:49 CST

再查看bds文件的三种时间,可以看到,和当前时间是有差别的,如下:

[root@localhost~]#stat bols
File: "bols"
Size: 0 Blocks: 0   IO Block: 4096 普通空文件
Device: 803h/2051d Inode: 130829 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-05-07 00:10:23.794319970 +0800
Modify: 2016-05-07 00:10:23.794319970 +0800
Change: 2016-05-07 00:10:23.794319970 +0800
#这些时间都是最后一次修改文件的时间,并不是当前时间

7. Cat 连接文件并打印输出到标准输出设备

命令格式

[root@localhost~]# cat[选项]文件名
选项:
-A:相当于 -vET 选项的整合,用于列出所有隐藏符号;
-E:列出每行结尾的回车符 $;
-n:显示行号;
-T:把 Tab 键 ^I 显示出来;
-V:列出特殊字符;

常见用法

cat 命令用于査看文件内容,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。不过 Linux 可以使用PgUp+上箭头组合键向上翻页,但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容。

所以,cat 命令适合査看不太大的文件。当然,在 Linux 中是可以使用其他的命令或方法来査看大文件的,我们以后再来学习。cat 命令本身非常简单,我们可以直接査看文件的内容。例如:
[root@localhost~]# cat anaconda-ks.cfg #Kickstart file automatically generated by anaconda. #version=DEVEL install cdrom lang zh一CN.UTF-8 …省略部分内容...
而如果使用"-n"选项,则会显示行号。例如:
[root@localhost ~]# cat -n anaconda-ks.cfg 1 # Kickstart file automatically generated by anaconda. 2 3 4 #version=DEVEL 5 install 6 cdrom …省略部分内容...
如果使用"-A"选项,则相当于使用了"-vET"选项,可以査看文本中的所有隐藏符号,包括回车符 (KaTeX parse error: Expected 'EOF', got '#' at position 41: …ot@localhost ~]#̲ cat -A anacond…
$
$
#version=DEVEL$
install$
cdrom$
…省略部分内容…
``

8. more :分屏显示文件内容

命令格式

[root@localhost~]#more 文件名
more 命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下。
空格键:向下翻页。
b:向上翻页。
回车键:向下滚动一行。
/ 字符串:搜索指定的字符串。
q:退出。

9. head 显示文件开头的内容

命令格式

[root@localhost~]#head [选项]文件名

选项:

  • -n 行数: 从文件头开始,显示指定行数;
  • -v:显示文件名;

常见用法

[root@localhost~]# head anaconda-ks.cfg [root@localhost~]# head -n 20 anaconda-ks.cfg [root@localhost~]# head -20 anaconda-ks.cfg

10. tail 显示文件记为的内容

命令格式

[root@localhost~]#tail [选项]文件名

选项:

  • -n 行数: 从文件尾开始,显示指定行数;
  • -f: 监听文件的新增内容

常见用法

1.基本用法
[root@localhost~]# tail anaconda-ks.cfg [root@localhost~]# tail -n 20 anaconda-ks.cfg [root@localhost~]# tail -20 anaconda-ks.cfg
2.监听文件的新增内容
tail 命令有一种比较有趣的用法,可以使用"-f"选项来监听文件的新増内容,例如:
[root@localhost ~]#tail -f anaconda-ks.cfg @server-platform @server-policy pax oddjob sgpio certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %end #光标不会退出文件,而会一直监听在文件的结尾处
这条命令会显示文件的最后 10 行内容,而且光标不会退出命令,而会一直监听文件的结尾处,等待显示新増内容。这时如果向文件中追加一些数据(需要开启一个新终端),那么结果如下:
[root@localhost ~]# echo 2222222222 >> anaconda-ks.cfg [root@localhost ~]# echo 3333333333 >> anaconda-ks.cfg #在新终端中通过echo命令向文件中追加数据
在原始的正在监听的终端中,会看到如下信息。
[root@localhost ~]# tail -f anaconda-ks.cfg @server-platforin @server-policy pax oddjob sgpio certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %end2222222222 33333333333 #在文件的结尾处监听到了新増数据

11. In :在文件之间建立链接(硬链接和软连接)

http://c.biancheng.net/view/740.html

12. rm:删除文件或目录

命令格式

[root@localhost~]# rm[选项]文件或目录

选项

  • -f:强制删除
  • -i:交互删除,在删除之前会询问用户
  • -r:递归删除,可以删除目录(recursive)

常见用法

  1. 基本用法
    rm 命令如果任何选项都不加,则默认执行的是"rm -i 文件名",也就是在删除一个文件之前会先询问是否删除。例如:

[root@localhost~]# touch cangls [root@localhost~]# rm cangls rm:是否删除普通空文件"cangls"?y #删除前会询问是否删除
2. 删除目录。
如果需要删除目录,则需要使用"-r"选项。例如:

[root@localhost ~]# mkdir -p /test/lm/movie/jp/
#递归建立测试目录
[root@localhost ~]# rm /test/
rm:无法删除"/test/": 是一个目录
#如果不加"-r"选项,则会报错
[root@localhost ~]# rm -r /test/
rm:是否进入目录"/test"?y
rm:是否进入目录"/test/lm/movie"?y
rm:是否删除目录"/test/lm/movie/jp"?y
rm:是否删除目录"/test/lm/movie"?y
rm:是否删除目录"/test/lm"?y
rm:是否删除目录"/test"?y
#会分别询问是否进入子目录、是否删除子目录

大家会发现,如果每级目录和每个文件都需要确认,那么在实际使用中简直是灾难!
3. 强制删除
如果要删除的目录中有 1 万个子目录或子文件,那么普通的 rm 删除最少需要确认 1 万次。所以,在真正删除文件的时候,我们会选择强制删除。例如:

[root@localhost ~]# mkdir -p /test/lm/movie/jp/
#重新建立测试目录
[root@localhost ~]# rm -rf/test/
#强制删除,一了百了

加入了强制功能之后,删除就会变得很简单,但是需要注意,数据强制删除之后无法恢复,除非依赖第三方的数据恢复工具,如 extundelete 等。但要注意,数据恢复很难恢复完整的数据,一般能恢复 70%~80% 就很难得了。所以,与其把宝压在数据恢复上,不如养成良好的操作习惯。

虽然"-rf"选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用"-rf"选项。

13. cp:复制文件和目录

命令格式

[root@localhost~]#cp [选项] 源文件 目标文件

http://c.biancheng.net/view/746.html

14.mv:移动文件或改名

命令格式

[root@localhost ~]# mv 【选项】 源文件 目标文件

选项:

  • -f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
  • -i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
  • -n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
  • -v:显示详细信息;

常见用法

  1. 移动文件或目录
[root@localhost~]# mv canals /tmp/
#移动之后,源文件会被删除,类似剪切
[root@localhost~]# mkdir movie
[root@localhost~]# mv movie /tmp/
#也可以移动目录。和rm,cp不同的是,mv移动目录不需要加入-r选项
  1. 强制移动
    之前说过,如果目标目录下已经存在同名文件,则会提示是否覆盖,需要手工确认。这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。

如果我们确认需要覆盖已经存在的同名文件,则可以使用"-f"选项进行强制移动,这就不再需要用户手工确认了。例如:

[root@localhost~]#touch cangls
#重新建立文件
[root@localhost~]#mv -f cangls /tmp/
#就算/tmp/目录下已经存在同名文件,由于-f选项的作用,所以会强制覆盖
  1. 不覆盖移动
    既然可以强制覆盖移动,那也有可能需要不覆盖的移动。如果需要移动几百个同名文件,但是不想覆盖,这时就需要"-n"选项的帮助了。例如:
[root@localhost ~]# ls /tmp*ls
/tmp/bols /tmp/cangls
#在/tmp/目录下已经存在bols、cangls文件了
[root@localhost ~]# mv -vn bols cangls lmls /tmp/
"lmls"->"/tmp/lmls"
#再向 /tmp/ 目录中移动同名文件,如果使用了 "-n"选项,则可以看到只移动了 lmls,而同名的 bols 和 cangls 并没有移动("-v"选项用于显示移动过程)
  1. 改名
    如果源文件和目标文件在同一目录中,那就是改名。例如:
[root@localhost ~]# mv bols lmls
#把 bols 改名为 lmls

目录也可以按照同样的方法改名。
5. 显示移动过程。
如果我们想要知道在移动过程中到底有哪些文件进行了移动,则可以使用"-v"选项来査看详细的移动信息。例如:

[root@localhost ~]# touch testl.txt test2.txt test3.txt
#建立三个测试文件
[root@localhost ~]# mv -v *.txt/tmp/
"test1.txt" -> "/tmp/test1.txt"
"test2.txt" -> "/tmp/test2.txt"
"test3.txt" -> "/tmp/test3.txt"
#加入"-v"选项,可以看到有哪些文件进行了移动

查找文件路径

#查找文件路径的方法
java -version 
whereis  java
ls -l [路径]
#可能给出的是软连接,就不断ls -l 找到真实链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值