其它命令 #

sudo chmod 755 -R node 修改目录权限
sudo lsof -nP -iTCP -sTCP:LISTEN 查看本地服务
ps -ef | grep websocket 查看websocket进程
ps aux | grep mysql 查看mysql进程
sudo kill 443 杀掉进程

给目录权限 #

sudo chmod -R 777 目录

搜索 #

find path -option [-print] [-exec -ok command] { }\;

$ find ~ -name "*.txt"  -print   #在$HOME中查.txt文件并显示
$ find . -name "*.txt"  -print
$ find . -name "[A-Z]*" -print   #查以大写字母开头的文件
$ find /etc -name "host*"  -print  #查以host开头的文件
# 查以两个小写字母和两个数字开头的txt文件
$ find .   -name   "[a-z][a-z][0–9][0–9].txt" -print   
$ ind . -perm   755   -print
$ ind . -perm -007   -exec ls -l {} \;   #查所有用户都可读写执行的文件同-perm 777
$ ind . -type d   -print
$ ind . !  -type d   -print 
$ ind . -type l   -print

ls #

类似于dos下的dir命令

ls最常用的参数有三个: -a -l -F。

ls –a

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls - a除了显示一般文件名外,连隐藏文件也会显示出来。 ls –l 该参数显示更详细的文件信息。 ls –F 使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。

cd #

用于切换用户当前工作目录

cd aaa 进入aaa目录 cd 命令后不指定目录,会切换到当前用户的home 目录 cd ~ 作用同cd后不指定目录,切换到当前用户的home 目录 cd - 命令后跟一个减号,则会退回到切换前的目录 cd .. 返回到当前目录下的上一级目录

pwd #

用于显示用户当前工作目录

mkdir 和 rmdir #

midir:创建目录 / rmdir:删除目录

两个命令都支持-p参数,对于mkdir命令若指定路径的父目录不存在则一并创建,对于rmdir命令则删除指定路径的所有层次目录,如果文件夹里有内容,则不能用rmdir命令

如下:

mkdir -p 1/2/3
rmdir -p 1/2/3 

mkdir循环创建目录 #

How do I make multiple directories at once in a directory?

for char in {A..Z}; do
    mkdir $char
done

for num in {1..100}; do
    mkdir $num
done

cp #

复制命令

mv #

移动命令

将一个文件移动到另一个目录:mv 1.txt ../test1 将一个文件在本目录改名:mv 1.txt 2.txt 将一个文件一定到另一个目录并改名:mv 1.txt ../test1/2.txt

rm命令 #

命令用于删除文件,与dos下的del/erase命令相似,rm命令常用的参数有三个:-i,-r,-f。

  1. –i :系统在删除文件之前会先询问确认,用户回车之后,文件才会真的被删除。需要注意,linux下删除的文件是不能恢复的,删除之前一定要谨慎确认。
  2. –r:该参数支持目录删除,功能和rmdir命令相似。
  3. –f:和-i参数相反,-f表示强制删除

find #

find 查找目录和文件

-name   filename   #查找名为filename的文件
-perm              #按执行权限来查找
-user    username  #按文件属主来查找
-group groupname   #按组来查找
-mtime   -n +n     #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n    #按文件访问时间来查GIN: 0px">

-ctime    -n +n    #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup           #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser            #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2    #找文件,-n指n天以内,+n指n天以前 
-ctime    -n +n    #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-nogroup           #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser            #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2    #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p   #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]    #查长度为n块[或n字节]的文件
-depth             #使查找在进入子目录前先行查找完本目录
-fstype            #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p   #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]    #查长度为n块[或n字节]的文件
-depth             #使查找在进入子目录前先行查找完本目录
-fstype            #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount             #查文件时不跨越文件系统mount点
-follow            #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %;           #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount             #查文件时不跨越文件系统mount点
-follow            #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio              #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune             #忽略某个目录

例子:

$ find . -name '*.DS_Store' -type f -delete # 删除所有.DS_Store文件
$ find ~ -name "*.txt" -print       # 在$HOME中查.txt文件并显示
$ find . -size +1000000c -print     # 查长度大于1Mb的文件
$ find . -size 100c -print          # 查长度为100c的文件
$ find . -size +10 -print           # 查长度超过期作废10块的文件(1块=512字节)
$ find -name april*                 # 在当前目录下查找以april开始的文件
$ find -name april* fprint file     # 在当前目录下查找以april开始的文件,并把结果输出到file中
$ find -name ap* -o -name may*          # 查找以ap或may开头的文件
$ find /mnt -name tom.txt -ftype vfat   # 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
$ find /mnt -name t.txt ! -ftype vfat   # 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
$ find /tmp -name wa* -type l           # 在/tmp下查找名为wa开头且类型为符号链接的文件
$ find ~ -mtime -2                  # 在/home下查最近两天内改动过的文件
$ find ~ -atime -1                  # 查1天之内被存取过的文件
$ find ~ -mmin +60                  # 在/home下查60分钟前改动过的文件
$ find ~ -amin +30                  # 查最近30分钟前被存取过的文件
$ find ~ -newer tmp.txt             # 在/home下查更新时间比tmp.txt近的文件或目录
$ find ~ -anewer tmp.txt            # 在/home下查存取时间比tmp.txt近的文件或目录
$ find ~ -used -2                   # 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
$ find ~ -user cnscn                # 列出/home目录内属于用户cnscn的文件或目录
$ find ~ -uid +501                  # 列出/home目录内用户的识别码大于501的文件或目录
$ find ~ -group cnscn               # 列出/home内组为cnscn的文件或目录
$ find ~ -gid 501                   # 列出/home内组id为501的文件或目录
$ find ~ -nouser                    # 列出/home内不属于本地用户的文件或目录
$ find ~ -nogroup                   # 列出/home内不属于本地组的文件或目录
$ find ~ -name tmp.txt -maxdepth 4  # 列出/home内的tmp.txt 查时深度最多为3层
$ find ~ -name tmp.txt -mindepth 3  # 从第2层开始查
$ find ~ -empty                     # 查找大小为0的文件或空目录
$ find ~ -size   +512k              # 查大于512k的文件
$ find ~ -size   -512k              # 查小于512k的文件
$ find ~ -links   +2                # 查硬连接数大于2的文件或目录
$ find ~ -perm 0700                 # 查权限为700的文件或目录
$ find ~ -perm 755 -print | more    # 查找权限为755的文件
$ find /tmp -name tmp.txt -exec cat {} \;
$ find /tmp -name tmp.txt ok rm {} \;

$ find / -amin    -10      # 查找在系统中最后10分钟访问的文件
$ find / -atime   -2       # 查找在系统中最后48小时访问的文件
$ find / -empty            # 查找在系统中为空的文件或者文件夹
$ find / -group   cat      # 查找在系统中属于 groupcat的文件
$ find / -mmin   -5        # 查找在系统中最后5分钟里修改过的文件
$ find / -mtime   -1       # 查找在系统中最后24小时里修改过的文件
$ find / -nouser           # 查找在系统中属于作废用户的文件
$ find / -user    fred     # 查找在系统中属于FRED这个用户的文件

du、df命令 #

du命令可以显示目前的目录所占用的磁盘空间,df命令可以显示目前磁盘剩余空间。

如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况。

  1. du -hs 指定目录 查看指定目录的总大小
  2. du -hs ./* 查看当前目录下的所有文件夹和文件的大小

这两个命令都支持-k,-m和-h参数,-k和-m类似,都表示显示单位,一个是k字节一个是兆字节,-h则表示human-readable,即友好可读的显示方式。

cat命令 #

cat命令的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。用法如下:

  1. cat file1 显示file1文件内容
  2. cat file1 file2 依次显示file1,file2的内容
  3. cat file1 file2 > file3 把file1, file2的内容结合起来,再“重定向(>)”到file3文件中。
  4. >是右重定向符,表示将左边命令结果当成右边命令的输入,注意:如果右侧文件是一个已存在文件,其原有内容将会被清空,而变成左侧命令输出内容。如果希望以追加方式写入,请改用">>"重定向符。

如果">"左边没有指定文件,如: cat >file1,将会等用户输入,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会将用户的输入内容写入file1。

echo命令 #

echo命令的使用频率不少于ls和cat,尤其是在shell脚本编写中。 语法:echo [-ne][字符串] 功能:echo会将输入的字符串送往标准输出,输出的字符串间以空白字符隔开, 并在最后加上换行符。

参数:

示例:

kenny@jstest:~/hgd> echo "123" "456"
123 456
kenny@jstest:~/hgd> echo "123/n456"
123/n456
kenny@jstest:~/hgd> echo -e "123/n456"
123
456
kenny@jstest:~/hgd> echo -E "123/n456"
123/n456
kenny@jstest:~/hgd> echo -E "123///456"
123//456
kenny@jstest:~/hgd> echo -e "123///456"
123/456
kenny@jstest:~/hgd> echo -e "123/100456"
123@456

注意事项: 在Linux使用的bash下,单引号’’和双引号是有区别的,单引号忽略所有的转义,双引号不会忽略以下特殊字符: Dollar signs ($),Back quotes (`),Backslashes (/),Excalmatory mark(!)

示例如下:

kenny@jstest:~> echo "`TEST`"
-bash: TEST: command not found
kenny@jstest:~> echo '`TEST`'
`TEST`
kenny@jstest:~> echo "$TEST"

kenny@jstest:~> echo '$TEST'
$TEST
kenny@jstest:~> echo "//TEST"
/TEST
kenny@jstest:~> echo '//TEST'
//TEST
kenny@jstest:~> echo "Hello!"
echo "Hello"
Hello
kenny@jstest:~> echo 'Hello!'
Hello!

more,less,clear #

more,less命令

这两个命令用于查看文件,如果一个文件太长,显示内容超出一个屏幕,用cat命令只能看到最后的内容,用more和less两个命令可以分页查看。more指令可以使超过一页的文件内容分页暂停显示,用户按键后才继续显示下一页。而less除了有more的功能以外,还可以用方向键往上或往下的滚动文件,更方便浏览阅读。

less的常用动作命令:

head,tail #

wc命令 #

该命令用于统计指定文件中的字节数、字数、行数。该命令各选项含义如下:

这些选项可以组合使用。输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。 行数、字数、字节数、文件名 如果命令行中没有文件名,则输出中不出现文件名。

例如:

oracle@hjtest:~> wc 1.txt 2.txt
  460  1679 16353 1.txt
  300  1095 10665 2.txt
  760  2774 27018 总用量
oracle@hjtest:~> wc -l 1.txt
460 1.txt

缺省参数为-lcw,即wc file1 file2命令的执行结果与上面一样。

grep 命令 #

grep是(global search regular expression(RE) and print out the line的缩写,用于从文件面搜索包含指定模式的行并打印出来,它是一种强大的文本搜索工具,支持使用正则表达式搜索文本。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被””引用,模板后的所有字符串被看作文件名。搜索结果送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。 示例:

$ ls -l | grep '^a'
通过管道过滤ls -l输出的内容,只显示以a开头的行。
$ grep 'test' d*
显示所有以d开头的文件中包含test的行。
$ grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]/{5/}' aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep 'w/(es/)t.*/1' aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(/1),找到就显示该行。如果用egrep或grep -E,就不用"/"号进行转义,直接写成'w(es)t.*/1'就可以了。

man,logout命令 #

man命令,man是manual的缩写,相当于Unix/Linux的联机Help,每个系统命令和调用都有非常详细的说明,绝大多数都是英文。如:man ls即是查看ls命令的使用说明,一般还有另一种方法用来查看帮助,如:ls –help,这种方式绝大多数命令都支持。

logout命令,该命令用于退出系统,与login命令对应。

管道和xargs #

管道 #

利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。 注意:管道左边命令的输入作为管道右边命令的输入(命令的输入是一定的),不是参数,并不是所有命令都支持管道 例子:ls | grep a 查看当前目录下名称包含a的文件或文件夹

xargs #

大多数 Linux 命令都会产生输出:文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件、ascii 文本等);你能处理输出,使其仅显示文件名,目前你希望将这些名称传递给 ls -l 命令以查看时间戳记。xargs 命令就是用来完成此项工作的。 注意:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去

例子:

  1. 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
  1. 当一个目录下文件太多时,直接用rm * 命令会包参数过长,用如下方法可以全部删除
$ls | xargs rm

basename 和 dirname #

basename用于查看文件不含路径的名字,dirname则用于查看文件路径,使用效果我们测试一下便知:

> basename /home/hj/1.txt
1.txt
> dirname  /home/hj/1.txt
/home/hj
> basename 1.txt
1.txt
> dirname 1.txt
.