linux之bash命令基础

作者 BiYuqi 日期 2019-10-02
linux之bash命令基础

常见linux目录

目录 用途
/ 虚拟目录的根目录, 通常不会在这里存储文件
/bin 二进制目录, 存放许多用户级的GNU工具
/boot 启动目录, 存放启动文件
/dev 设备目录, linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录, Linux在这里创建用户
/lib 库目录, 存放系统和应用程序的库文件
/media 媒体目录, 可移动媒体设备的常用挂载点
/mnt 挂载目录, 另一个即可移动媒体设备的常用挂载点
/opt 可选目录m 常用语存放第三方软件包和数据文件
/proc 进程目录, 存放现有硬件及当前进程的相关信息
/root root用户的主目录
/sbin 系统二进制目录,存放许多[GNU]管理工具
/run 运行目录, 存放系统运作时的运行数据
/srv 服务目录, 存放本地服务的相关文件
/sys 系统目录, 存放系统硬件信息的相关文件
/tmp 临时目录, 可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录, 大量用户级的[GNU]工具和数据文件都存储在这里
/var 可变目录, 用以存放经常变化的文件,比如日志文件

文件和目录列表

显示当前文件和目录

» ls
README-zh_CN.md      commitlint.config.js example              node_modules
README.md            docs                 lerna.json           package-lock.json

ls是按字母排序的, 可以带参数 -F 用来区分文件和目录

» ls -F
README-zh_CN.md       commitlint.config.js  example/              node_modules/
README.md             docs/                 lerna.json            package-lock.json

-F参数在目录后面加了正斜线(/)

显示隐藏文件
利用参数 -a来显示隐藏文件和普通文件, 所有以点号开始的隐藏文件都显示出来了

» ls -a
.git                 README-zh_CN.md      commitlint.config.js example              node_modules
..                   .gitignore           README.md            docs                 lerna.json

显示长列表
利用ls -l产生每个文件的更多信息, 比如目录(d), 文件(-), 字符型文件(c)或者块设备(b)

» ls -l
» ls -l
total 176
-rw-r--r--  1 yuqi.bi  staff   4453 Sep 25 23:10 _config.yml
-rw-r--r--  1 yuqi.bi  staff  77732 Sep 25 23:10 package-lock.json
-rw-r--r--  1 yuqi.bi  staff    667 Sep 25 23:10 package.json
drwxr-xr-x  5 yuqi.bi  staff    160 Sep 25 23:10 scaffolds
drwxr-xr-x  9 yuqi.bi  staff    288 Sep 25 23:10 source

过滤输出列表
ls 会输出很多信息,可以针对目标文件进行过滤搜索,这里支持的是正则表达式

# 搜索以——conf开头的文件
» ls -l _confi*
» ls -l _confi*
-rw-r--r--  1 yuqi.bi  staff  4453 Sep 25 23:10 _config.yml

处理文件

创建文件

» touch test_one
» ls -l test_one

显示如下:

-rw-r--r--  1 [Here is your user name]  staff  0 Oct  3 00:06 test_one

ls -l 不会直接显示访问时间,默认是显示修改时间,如需查看需啊哟加上--time=attime

» ls -l --time=attime test_one

复制文件
cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file

基本用法: cp 命令需要两个参数--源对象和目标对象

» cp source destination

当source和destination 参数是文件名时,cp命令将源文件复制成一个新文件,并命名为destination.

eg:

» cp test_one test_two

如果目标文件已经存在,cp命令并不会提示,所以可以加-i来强制shell提示是否覆盖.

~/Desktop » cp -i test_one test_two
overwrite test_two? (y/n [n])

cp命令-R参数可以递归的复制整个目录文件

» cp -R source/ target

也可以在cp命令中使用通配符

» cp *script new_script/

该命令静所有以script结尾的文件赋值到new_script目录中,可以通过ls -l new_script查看

重命名文件

mv [-f | -i | -n] [-v] source target

mv命令可以将文件和目录移动到另一个位置或者重新命名.

Create directory linux-demo with demo file and demo dir

» ls -lF
total 0
drwxr-xr-x  2 yuqi.bi staff  64 Oct  4 15:48 demo/
-rw-r--r--  1 yuqi.bi staff   0 Oct  4 15:48 demo.txt

执行mv命令

» mv demo demo-with-mv

» ls -lF de*
total 0
drwxr-xr-x  2 yuqi.bi  staff  64 Oct  4 15:48 demo-with-mv/
-rw-r--r--  1 yuqi.bi  staff   0 Oct  4 15:48 demo.txt

也可以使用mv移动位置并修改文件名称

» mv linux-demo linux-demo2

删除文件

rm [-dfiPRrvW] file ...

» rm -i demo.txt

-i 提示是不是要真的删除文件

如果要删除很多文件不受提示干扰,可用-f 强制删除 -rf递归强制删除

» rm -rf demo.txt

处理目录

创建目录

mkdir [-pv] [-m mode] directory_name ...

» mkdir new_dir

如果想批量创建目录和子目录,需要加上-p, 可以根据需要创建缺失目录.

» mkdir -p new_dir/sub_dir_child_dir

删除目录

rmdir [-p] directory ...

默认情况下rmdir只删除非空目录, 只能先删除文件,才能删除目录

所以想要一口气删除所有文件,还是需要用到rm -rf [target dir name]

查看文件

file [-bcdDhiIkLnNprsvz] [--extension] [--mime-encoding] [--mime-type] [-f namefile] [-m magicfiles] [-P name=value]

file命令是一个能够探测文件内部的工具

查看文件类型

» file demo.text

会返回文件的类型

查看整个文件

  • cat命令
cat demo.txt

-n 可以给所有行加上行号
-b 可以只给文本行添加行号
-T 移除制表符

查看部分文件

  • tail 命令
    显示文件最后几行的内容

tail [-F | -f | -r] [-q] [-b number | -c number | -n number] [file ...]

tail -n number [file] 显示指定行数的内容

  • head 命令

head [-n count | -c bytes] [file ...]
查看文件起始内容

» head -n [number] [file]

搜索数据

grep [options] pattern [file]

grep命令会在输入或指定的文件中查找包含匹配指定模式的字符的行, 它的输出就是包含了匹配模式的行.

eg: 在demo.js文件中找到含有key的行

» grep key demo.js
  • 如果进行方向搜索(即不匹配该行), 加-v

    » grep -v key demo.js
    
  • 如果要显示匹配模式的行所在行号, 加-n

    » grep -n key demo.js
    
  • 如果想知道有多少行匹配, 加-c

    » grep -c key demo.js
    
  • 如果要制定多个匹配模式, 加-e指定每一个模式

    » grep -e key -e word demo.js
    
  • 支持正则表达式

    » grep [k-z] demo.js