Linux命令

154 阅读8分钟

路径

ls

ls # List
ls -a # all 列出目录下的所有文件,包含.开头的隐藏文件
ls -l # 除了文件名外,还将文件的权限、所有者、文件大小等信息详细列出来
ls -h # hunman readable,以容易理解的格式列出文件大小(K,M,G)ls -t # 以文件修改时间排序

cd

cd # Change Direcotry
cd / # 从当前目录进入系统根目录
cd .. # 从当目录进入父目录
cd ~ # 从当前目录进入当前用户主目录
cd - # 从当前目录进入上次所在目录

pwd

pwd # Print Working Directory
pwd -P # 显示实际物理路径,而非使用连接(link)路径
pwd -L # 当目录为连接路径时,显示连接路径

文件操作

mkdir

mkdir # make directory
mkdir # 用来创建指定名称的目录,要求创建目录的用户在当前目录中具写权限,并且指定的目录不能是当前目录中已有的目录
mkdir -m --mode=<模式> # 设定权限<模式>
mkdir -p --parents # 可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动简历好那些尚不存在的目录,即一次可以建立多个目录
mkdir -v --verbose # 每次创建新目录都显示信息
mkdir -p zhou/test # 递归创建多个目录
mkdir -m 777 zhou # 创建权限为777的zhou目录
mkdir -vp zhou/test # 创建目录并打印创建信息# eg$ 
mkdir -vp shiyanlou/{lib/,bin/,doc/{info,product}}$ tree shiyanlou/
mkdir: 已创建目录 'shiyanlou'mkdir: 已创建目录 'shiyanlou/lib/'
mkdir: 已创建目录 'shiyanlou/bin/'
mkdir: 已创建目录 'shiyanlou/doc'
mkdir: 已创建目录 'shiyanlou/doc/info'
mkdir: 已创建目录 'shiyanlou/doc/product'

rm

rm # remove
rm # 删除一个目录中的一个或多个文件或目录,可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只会删除链接,原文件均保持不变
rm -f --force # 忽略不存在的文件,不提示
rm -r --recursive # 指示rm将参数中列出的全部目录和子目录递归地删除
rm -v --verbose # 详细显示进行的步骤
# eg.
$ rm name.log  # 删除name.log,系统会先询问是否删除
$ rm -f name.log # 强行删除文件,系统不提示
$ rm *.log # 删除后缀名为.log的所有文件,删除前逐一询问
$ rm -i *.log # 同上

mv

mv # move
mv # 用来移动文件或更改文件名
mv -b --back # 若覆盖文件,则覆盖前先行备份
mv -f --force # 如果目标文件已经存在,不会询问而直接覆盖
mv -i --interactive # 若目标文件已经存在时,就会询问是否覆盖
mv -u --update # 若目标文件已经存在,且源文件比较新,才会更新
mv -t --target # 该选项适用于移动多个源文件到一个目录的情况,此时目标在前,源目录在后
# eg.
$ mv name1.log name2.log # 将name1.log文件重命名为name2.log
$ mv name1.log test      # 将name1.log文件移动到test目录下
$ mv -i a.txt test       # 将a.txt移动到test下,如果文件存在,覆盖前会询问是否覆盖

cp

cp # copy
cp # 用来复制文件或者目录
cp -t --target-directory # 制定目标目录
cp -i --interactive # 覆盖前询问
cp -n --no_clobber # 不要覆盖已存在的文件
cp -s --symbolic-link # 对源文件建立符号链接,而非复制文件
cp -f --force # 强行复制文件或目录,不论目的文件或目录是否已经存在
cp -u --update # 使用这项参数之后,只会在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件
# eg.
$ cp -s test.log t.log # 对文件test.log建立一个符号链接t.log
$ cp -i test1/* test2 # 将test1目录下的所有文件复制到test2目录下,覆盖前询问
$ cp -iu test1/* test2 # 将test1目录下的最近更新的文件复制到test2目录下,覆盖前询问

cat

cat # concatenate
cat # 将文件或标准输入组合输出到标准输出。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
cat -A --show-all # 等价于 -vET
cat -b --number-nonblank # 对非空输出行编号
cat -e # 等价于 -vEcat -E --show-ends # 在每行结束处显示 $ 
cat -n --number # 对输出的所有行编号,由1开始对所有输出的行编号
cat -s --squeeze-blank # 有连续两行以上的空白行,就代换为一行的空白行
cat -t # 等价于 -vTcat -T --show-tabs # 将跳格字符显示为 ^|
cat -u # 被忽略
cat -v --show-nonprinting # 使用^和M-引用,除了LFF和TAB之外
# eg
$ cat -n test.log > new.log # 把test.log的文件内容加上行号后输入new.log这个文件里
$ cat -ns test.log > new.log # 把test.log的文件内容加上行号后输入new.log这个文件里,多行空格换成一行输出
$ tac new.log # 将new.log的文件内容反向显示(倒序)

nl

nl # number of lines
nl # 计算文件中的行号。nl可以将输出的文件内容自动加上行号,其默认的结果与cat -n有点不太一样。nl可以将行号做较多的显示设计,包括位数与是否自动补齐0等等功能
nl -b # 指定行号指定的方式,主要有两种:
nl -b a # 表示不论是否为空行,也同样列出行号(类似 cat -n)
nl -b t # 如果有空行,空的那一行不要列出行号(默认值)
nl -n # 列出行号表示的方法,主要有三种:
nl -n ln # 行号在屏幕的最左方显示
nl -n rn # 行号在自己栏位的最右方显示,且不加0
nl -n rz # 行号在自己栏位的最右方显示,且加0
nl -w # 行号栏位的占用的位数
# eg
$ nl -b t test.log # 把test.log的文件内容加上行号后显示,空行不加行号
$ nl -n rz -w 3 test.log # 把test.log的文件内容加上行号后显示,行号在屏幕最右方加0显示,行号栏目展位

more

more # 类似cat,cat命令是将整个文件的内容从上到下显示在屏幕上。more命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按空格键(space)往下一页显示,按B键就会往回(back)一页显示,而且还有搜寻字串的功能。
more +n # 从第n行开始显示
more -n # 定义屏幕大小为n行
more +/pattern # 在每个档案显示前搜寻字串(pattern),然后从该字串前两行之后开始显示
more -c # 从顶部清屏,然后显示
more -d # 提示“Press space to continue, 'q' to quiet”,禁用响铃功能
more -p # 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
more -s # 把连续的多个空行显示为一行
more -u # 把文件内容中的下划线去掉
# 操作符
= # 输出当前行的行号
q # 退出more
空格键 # 向下滚动一屏
b # 返回上一屏

less

less # 也是对文件或其他输出进行分页显示的工具,应该说是Linux正统查看文件内容的工具,功能极其强大
less -e # 当文件显示结束后,自动离开
less -f # 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
less -i # 忽略搜索时的大小写
less -m # 显示类似more命令的百分比
less -N # 显示每行的行号
less -s # 显示连续空行为一行
# 操作符
/字符串 # 向下搜索“字符串”的功能
?字符串 # 向上搜索“字符串”的功能
n # 重复前一个搜索(与/或?有关)
N # 反向重复前一个搜索(与/或?有关)
b # 向前翻一页
d # 向后翻半页
q # 退出less命令
空格键 # 向后翻一页
向上键 # 向上翻动一行
向下键 # 向下翻动一行

head

head # 显示档案的开头至标准输出中,默认打印前10行
head -q # 隐藏文件名
head -v # 显示文件名
head -c<字节> # 显示字节数
head -n<行数> # 显示的行数

tail

tail # 主要用于显示制定文件末尾内容,常用查看日志文件
tail -f # 循环读取
tail -q # 不显示处理信息
tail -v # 显示详细的处理信息
tail -c<字节> # 显示的字节数
tail -n<行数> # 显示行数
# eg
$ tail -n 5 test.log # 显示test.log的最后5行内容

查询

which

which # 在PATH变量制定的路径中搜索可执行文件的所在位置。一般用来确认系统中是否安装了指定的软件
$ which gcc # 返回gcc程序的路径
/usr/bin/gcc
$ which cd # 查看cd命令的位置路径
cd: shell built-in command

whereis

whereis # 用于定位可执行文件、源代码和帮助文件在文件系统中的位置。whereis还具有搜索源代码、指定备用搜索路径和搜索不寻常项的功能
# whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/mlocate.db)查询。这个数据库是Linux系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行updatedb命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得whereis命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到。
whereis -b # 定位可执行文件
whereis -m # 定位帮助文件
whereis -s # 定位源代码文件
whereis -u # 搜索默认路径下除可执行文件、源代码文件和帮助文件以外的其它文件
whereis -B # 指定搜索可执行文件的路径
whereis -M # 指定搜索帮助文件的路径
whereis -S # 指定搜索源代码文件的路径
# eg
$ whereis -b gcc
$ whereis -m gcc
$ whereis -s gcc

locate

locate # 跟whereis命令类似,且它们使用的是相同的数据库。但whereis命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用locate
# locate命令使用了十分复杂的匹配语法,可以使用特殊字符元(如'*'和'?')来指定需要查找的样本
locate -q # 安静模式,不会显示任何错误信息
locate -n # 至多显示n个输出
locate -r # 使用正则表达式做寻找的条件
locate -V # 显示版本信息
# eg
$ locate /etc/sh # 搜索etc目录下所有以sh开头的文件
$ locate /etc/*sh* # 搜索etc目录下文件名包含sh的文件

find

find # 沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作
find # 默认路径是当前目录,默认表达式为 -print
# 表达式可能由下列成分组成:操作符、选项、测试表达式以及动作
find -print # 将匹配的文件输出到标准输出
find -exec # 对匹配的文件执行该参数所给出的shell命令
find -name # 按照文件名查找文件
find -type # 查找某一类型的文件
find -prune # 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用 -depth选项,那么 -prune 将被find命令忽略
find -user # 按照文件属主来查找文件
find -group # 按照文件所属的组来查找文件
find -mtime -n +n # 按照文件的更改时间来查找文件,-n表示文件更改时间距现在小于n天,+n表示文件更改时间距现在大于n天
find -atime
find -ctime
# eg
$ find . -print # 打印当前目录下的文件目录列表
$ find . -name "*.txt" -print # 打印当前目录下所有以 .txt结尾的文件名
$ find . (-name "*.pdf" -or -name "*.txt") # 打印当前目录下所有以.pdf或以.txt结尾的文件名
$ find . ! -name "*.txt" # 打印当前目录下所有不以 .txt结尾的文件名
# format
b # 块设备文件
c # 字符设备文件
d # 目录
f # 普通文件
l # 符号链接
$ find . -type l -name "*.txt" -print # 打印当前目录下所有以.txt结尾的符号链接
$ find . -type f -name "*.php" -perm 777 # 打印当前目录下所有权限为777的php文件
$ find . -type f -user root # 打印当前目录下root用户拥有的所有文件