前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《鸟哥的linux私房菜》基本命令笔记

《鸟哥的linux私房菜》基本命令笔记

作者头像
s1mba
发布2018-01-03 17:26:26
2.4K0
发布2018-01-03 17:26:26
举报
文章被收录于专栏:开发与安全

1.以前没注意过的,略写的命令option后面只能空格后加参数,而标准option即可以空格也可以等号后跟着参数,如date命令,date -r filename ;; date --reference filename ;; date --reference=filename 都是正确的。

如果文件以 - 开头,很多命令会失效,比如想删除可以这样:rm --  -2012.log

2.对于目录来说,即使有r,没有X,也不能进入目录。

对于文件来说,x表示这个文件可以被用户执行,但能不能执行成功,当然得看本身里面的内容了。

代码语言:javascript
复制
-bash: /dev/null: Permission denied
代码语言:javascript
复制
rm /dev/null; mknod -m 666 /dev/null c 1 3

3.文件种类:

普通文件 -

纯文本ASCII 文件,可以使用cat查看的都算

二进制文件,Linux的可执行文件,举例来说,cat命令本身就是个二进制文件,或者使用cat查看一些二进制文件时是乱码

数据格式的文件,如登录记录的数据,使用cat查看也是乱码,但可以使用last读出

目录 d

连接文件 l  硬连接与软连接

设备文件

块设备 b 如硬盘

字符设备 c 如串行接口的键盘和鼠标

套接字 s

管道 p

系统中 所有的设备要么是字符特殊文件,要么是块特殊文件。字符特殊文件针对设备是不带缓冲的访问,每次访问长度可变,而块特殊设备对于访问提供缓冲并且以固定长度为单位进行。

4.只要开头不是/ 就是相对路径的写法,相对路径是以“当前路径的相对位置”来表示的

 ./表示当前路径

../表示上一层路径

建议在写shell 时使用绝对路径,因为绝对不会出错。

5.根目录下最好不要直接有文件,只有目录,且/etc,/dev,/bin/,/sbin,/lib等5个子目录只能跟在/ 下面,不能独立分区。建议独立的分区如/home,/usr,/var,/tmp等

6.挂载的概念:物理的设备挂到目录树上,如/dev/sda2 挂载到/boot上。 另如将window 分区挂载进来时,一般挂在/media/XXX  ... 光盘呢一般在/mnt/cdrom。

7.目录的相关操作

. 表示当前目录

.. 表示上一层目录

- 表示前一个工作目录

~ 表示“当前用户”所在的家目录

~account 表示account用户的家目录

注意simba的家目录是/home/simba,root的家目录是/root

groupadd test 

useradd -g test simba -d /data/simba -s /bin/sh

passwd simba

8.pwd -P  不会以连接文件的数据显示,而是显示正确的完整路径

mkdir -p 可以递归建立目录

mkdir -m  711  test 可以设置属性,否则使用默认属性。

rmdir 只能删除空目录(即目录内不能有其他目录或者文件),即需要一层层地删除,可以加 -p 递归删除上层空目录,如果要将所有目录下的东西都删除,使用 rm -rf test (危险)

cp -a 将文件属性一起复制,且递归复制,相当于 -pdr

cp -u 在目标文件与源文件有差异时才复制,常用于备份。

9.查看文件内容

cat: 从第一行开始显示,-A 显示换行符 $ ,-T 显示tab键(^I),-n 显示行号

tac:从最后一行开始显示

nl:显示的时候,输出行号

more:一页一页地显示文件内容

less:与more类似,但可以向前翻页

shuf:打乱文件内容顺序

tail:只看最后几行

head:只看前面几行

          显示~/.bashrc 的第11到第20行

       head -n 20  | tail -n 10

sort -nr file:sort lines of text files

sort -k6nr -k5n file.txt:假设先按第6列数字倒序,在此基础上再按第5列顺序排列

od:以二进制方式读取文件内容

more,less可以使用 /字符串 进行查找

split -l $line -d $file seq_    将文件 $file 分割成 以 seq_ 为前缀的文件,-d 表示以数字为后缀,如 seq_00 

touch命令

建立一个空文件

将某个文件日期修改为当前日期(atime和mtime)

atime是访问时间,mtime是修改时间,ctime是状态改变时间(属性与权限)

10.一般用户的umask为0002,第一个数为特殊权限所用,root默认umask为0022

建立文件时默认权限为  (-rw-rw-rw-) &~ (-----w--w-)  ==> -rw-r--r--

建立目录时默认权限为(drwxrwxrwx) &~ (d----w--w-) ==> drwxr-xr-x

11.chattr +i 可以让一个文件不能被删除修改写入等  +a表示只能增加数据,不能被删除。

 lsattr可以查看文件的隐藏属性

12. 查找文件

which -a  执行文件

whereis -bmsu  文件名或者目录名

locate filename

find  path  -option -action

-atime n  在n天之前的“一天之内”访问过的文件

-name filename

-size  +50k    #比50k大的文件

-type  TYPE

-exec command  #处理搜索处理的结果,一定以; 结束

如find / -name simba -exec ls -l {} \  ;

不知道全名时可以使用通配符*

find . -name '*.[ch]' | xargs wc -l   统计当前目录下.c .h 文件的代码行数

find . -name '*.[ch]' -exec wc -l {} \; 

find $cgi_dir -name "luascan_cgi_after_rewrite_*" -exec 'cat' {} \; > $merged_file   将目录下所有命中特征的文件的内容输出合并到一个文件

stat cutting_board | grep Modify | awk '{print $2}'  得到目录的修改时间

cut :remove sections from each line of files

cut -d '分隔符' -f fields    cut -d ':' -f 3, 5

cut -c 字符范围   cut -c 12-20

ps aux | grep client.py | grep -v 'grep' | cut -c 9-15 | xargs kill -9  # 进程 pid 是 9 ~ 15 字符串

ps -ef | grep client.py | grep -v 'grep' | awk '{print $2 }' | xargs kill -9

13. export命令输出环境变量

无论是在系统环境变量追加路径如#export PATH=$PATH:$HOME/bin:/usr/local/mysql/bin  还是将自定义变量使用export name=simba 进行输出,注销再次登陆后这些路径和变量都将不再存在,即export只对当前登录有效。如果想永久保存路径或者变量应在文件中设置,如

系统设置文件 /etc/profile  所有用户都会使用到这个文件 个人设置值 ~/.bash_profile  只在登录时读取一次 个人设置值 ~/.bashrc 每次执行脚本都会读取 上述三个文件读取顺序由上到下,故~/.bashrc 是最终读取的设置值,可将个人设置放于此。

另外不要与/etc/bashrc混淆,这个文件是确定umask的功能。

中间一行 . ~/.bashrc    小数点表示可以将设置文件的内容读进当前的shell环境,使用source也可以实现。

若增加一个用户后,登录前缀提示符类似为 bash-4.1$,可以把 root 的 .bash_profile 和 .bashrc 拷贝到用户家目录下,并 chown 权限为用户。

14.命令的执行

执行命令无外乎两种形式,一种以绝对路径给出命令,如./name.pl ,/usr/bin/name.pl;另一种则因为设置了环境变量PATH的路径而可以在任何路径执行命令,这两种情况都需要 文件有 x 权限。当然也可以如 perl name.pl (当前目录下),  此时即告诉系统,要直接以/bin/perl 的功能来执行 name.pl 文件内的命令,此时 name.pl 只需要 r 权限即可。

15.系统和文件的编码

查看系统当前编码 locale 查看系统支持的编码 iconv -l 查看文件的编码  file -i  (注意与type不同,查看命令的类型) 如windows文件转到Linux下,如果使用dos2unix之后(一般只是去掉换行^M而已)还会乱码,则可以 iconv -f GBK -t UTF-8 file1 -o file2 出现乱码时解决思路:

系统设置的编码格式 文件创建时的编码格式 编辑器打开时使用的编码格式 终端包括连接的如putty的编码格式

16.特殊权限介绍

特殊权限介绍

名称

SUID

SGID

SBIT(粘滞位)

全称

set user id

set groud id

sticky bit

功能简述

以文件属主用户身份运行

获得文件属组权限

对于目录而言,这一位可以理解为防止删除里面的文件和目录

chmod 4551 filename // 权限: r-sr-x--x    放在数字第一位 chmod 2551 filename // 权限: r-xr-s--x chmod 1551 filename // 权限: r-xr-x--t 如果本来在x位上已经设置了x的时候,设置这些位将会显示小写的(s,s,t),否则会显示为大写的(S,S,T)。这三位如果转化为8进制表示的话,分别对应的是4(SUID),2(SGID),1(sticky bit)。

17.find 常用表达式

find命令的主要作用是对树形目录层次结构进行彻底检查。 find命令的一般格式: find pathname -expressions

-mount

选项表达式,用来防止find命令的搜索范围超出当前文件系统的边界。返回值常为真。

-group grp

条件表达式,检查当前的文件是否具有与grp相同的GID或组名。如果两者一致,返回真值,否则返回假值。

-name pattern

条件表达式,检查文件名是否和模式pattern相同。pattern可以用正则表达式给出。必要时使用引号。当文件名与pattern一致时.返回真值.否则为假。

-type t

条件表达式,检查当前文件的类型是否是t。对目录讲,t值可以是d。对普通文件讲,t值可以是f,对连接讲,t值可以是l 等等。如果当前的文件的类型是t,返回真值,否则为假。

-user usr

条件表达式,检查当前的文件的所有者或UID是否是usr。如果两者一致,返回真值,否则为假。

-exec cmd

操作表达式,用来执行cmd命令。如果要将当前的文件名传送给命令,应该加{}标记,分号用来表示cmd的结束,并和后面可能出现的表达式分开。如果成功地执行了cmd命令,返回真值,否则为假。

-print

操作表达式,将当前的文件名送到标准输出设备显示,返回值常为真。

find .  -name ‘abc*’-print

find .  -user root -print

find .  -group root -exec echo {} \; -print

find .  -type f -group root -exec rm -f  {} \; -print

find .  -type f -mtime 4 –print

find .  -size +5000k -exec ls -lh {} \;

find .  \( -name  "[Aa]*"-o -name "*[Aa]"\)  -print  //  -o   -a

统计在/etc/为起点的目录树中,文件中包含字符串“telnet”(不区分大小写)的文件的数目。请写出这条命令 find /etc –type f  -exec grep  -il  ‘telnet’ {} \; | wc -l

18.grep 搜索指定字符串

grep是通用正则表达式分析程序(General Regular Expression Parser)的缩写。  grep命令可以在它的输入中搜索指定的字符串模式(Pattern)。grep命令的输出是包含输入中指定的字符串模式的行。 grep命令的一般格式:                 grep [option] pattern file

-E

用扩充正则表达式进行模式匹配

-i

不区分大小写

-n

在每一输出行前显示文件内的行号

-q

与其他命令一起使用时,抑止输出显示

-s

抑止文件的出错信息

-v

反向匹配

-l

返回匹配到的文件名称

-r

递归搜索

grep ^public t1.txt grep public$ t1.txt grep -n ^$ t1.txt   //查找空行

grep -n '\.$' t1.txt  // 查找以小数点结束的那一行 grep -n \<public t1.txt //查找存在 <public 的行 grep -n ‘\<public’ t1.txt  // 查找存在 public是单词开头的  行 grep -n ‘public\>’ t1.txt grep -n “\\\\” t1.txt // 查找存在 \ 的行 grep -n ‘\\’ t1.txt    // 查找存在 \ 的行

grep -E go+d t1.txt grep -En 10\{2,4\}A t1.txt

grep -En '10{2,4}A' t1.txt grep -En '11A|11B' t1.txt

egrep -n 'g(la|oo)d' t1.txt  // glad 或 good grep -En net\(works\)* t1.txt

egrep 'A(xyz)+C'  t1.txt   // () 中表示成为一个表达式整体

grep public  *.txt  // *是通配符

ps aux | grep "ssh" | grep –v "grep"  //反向匹配

grep -rn   telnet  /etc  // 递归搜索目录中的所有文件

注意:grep表达式先给shell处理再给grep处理,而双引号能够阻止shell对大部分特殊字符进行解析,但不会阻止对\, $, ` 等的解析,

单引号可以阻止shell对所有特殊字符进行解析。

此外,如果shell变量值中出现空格,可以使用双引号或单引号将变量内容括起来,但要注意,双引号内的特殊字符可以保持变量特性,但单引号内的特殊字符则仅为一般字符。

很常见的一个组合是grep -oP-o是只输出正则匹配部分的字符,-P(大写)则是启用PCRE兼容的正则表达式,两者结合起来使用往往事半功倍(grep -oE 也不错,-E 支持扩展的正则表达式,比如 [:space:] 表示空格),再巧妙利用正则表达式去做日志分析、文本处理,基本上工作中遇到的类似需求不会有什么大问题,善用shell里面的awk,grep,sed,find几个神器,会对很多linux批量处理任务大有帮助。

有时它也会把txt文件误当做二进制文件,这时如果匹配成功,grep或许只给你一个“Binary file XXX matches”的信息,而你明明知道这是个txt文件,这时就可以用-a选项,或--binary-files=text.

19. 正则表达式

^

在每行的开始进行匹配

$

在每行的末尾进行匹配

\<

在单词的开始进行匹配

\>

在单词的末尾进行匹配

.

对单个任意字符进行匹配(除换行符)

[str]

对str中的任意单个字符进行匹配

[^str]

对任意不在str中的单个字符进行匹配

[a-b]

对a到b之间的任何字符进行匹配

\

抑止后面的一个字符的特殊含义

*

对前一项(item)进行0次或多次重复匹配

+

对前一项进行1次或多次重复匹配

?

对前一项进行0次或1次重复匹配

{j}

对前一项进行j次重复匹配

{j,}

对前一项进行j次或更多次重复匹配

{,k}

对前一项最多进行k次重复匹配

{j,k}

对前一项进行j到k次重复匹配

s|t

匹配s项或t项中的一项

(exp)

将exp作为单项处理

\w

匹配字母或数字或下划线或汉字

\s

匹配任意的空白符,包括换行

\d

匹配数字

\b

匹配单词的开始或结束

\W

匹配任意不是字母,数字,下划线,汉字的字符

\S

匹配任意不是空白符的字符

\D

匹配任意非数字的字符

\B

匹配不是单词开头或结束的位置

单行模式

更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配)。

多行模式

更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。

忽略大小写

指定不区分大小写的匹配。

注:正则表达式与通配符与特殊字符是不同的,有些工具如ls 是不支持正则表达式的。下面列举:

(1)通配符和特殊字符中! 表示逻辑上的非;而正则表达式中使用 ^ 表示。

(2) $ 表示变量引用;表示行尾。

(3)* 表示任意0或多个字符;表示重复0个或多个字符。

(4)?表示一定有一个字符;表示重复0次或1次。

(5)需要注意的是#,! 在正则表达式中没有特殊的含义,故在vim 中当做字符查询时无需使用转义字符\ 进行转义, $ 需要转义。

grep ‘^#'  t1.txt  // 查找行首以 # 开始的一行 grep '!$'  t1.txt  // 搜索行尾为!的一行

(6)[ ] 行为一致

正则表达式在vi 中的使用:

在当前行中删除从aa到zz的所有字符。 :s/aa.*zz// 在整个文件用and代替所有的&字符。 :1,$s/&/and/g   // g是全局替换,也就是一行中多次出现都要替换

:1,$s/\$/and/ // $是特殊字符 在每一行的行首插入字符串new :1,$s/^/new/ 在第2行到第5行的行尾插入字符串@@ :2,5s/$/@@/g    

去掉行首的所有数字字符 :s/^[0-9][0-9]*//

:1,$s/?.*//  只保留 url 中的 uri 部分

:g!/dd/d 删除不含字符串'dd'的行

代码语言:javascript
复制
:g!/\<dd/d 删除不含以'dd'开头字符串的行
代码语言:javascript
复制
:g/^$/d  删除空白行

提取分组 \1, \2 ...

20. 命令重定向

比如./tesh.sh > output,其中> file  等价于 1> file,就是把输出重定向到文件中。 对应的,2>&1 是把标准错误重定向到标准输出 而 &> file 是把标准输出和标准错误重定向到file

注意 : 即使是后台进程,如果没有重定向输出且没有将日志打印在 log ,那还是会将输出和错误打印在标准输出.

./run.sh > run.log  2>&1 // 前台进程,重定向输出

./run.sh > run.log 2 > &1 & // 后台进程,重定向输出

./run.sh & // 后台进程,里面可以将日志打印在 log.

21 . UNIX时间戳与时间字符串的转换命令

#UNIX的时间戳转换为时间字符串

SELECT FROM_UNIXTIME( 1317030898, '%Y-%m-%d' );  date -d '1970-01-01 UTC 1317030898 seconds' 

date -d @1317030898

date -d +10hour +"%Y-%m-%d %H:%M:%S"

date -d +1day +"%Y%m"

#时间字符串转换为UNIX的时间戳

date -d "2010-10-18 00:00:00" +%s

#转化为天

date -d '1970-01-01 UTC 15988 days'

Thu Oct 10 08:00:00 CST 2013

#计算距离1970-01-01到现在的天数

echo $(($(date +%s)/86400))   16407

22. 数据同步、自动登录

rsync/scp/ftp( Add /usr/sbin/nologin in the /etc/shells/)、expect 脚本

23. crontab 需要注意的一些问题

脚本中涉及文件路径时全部写绝对路径; 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如: $ cat start_cbp.sh  #!/bin/bash source /etc/profile        # 引入 profile环境变量 export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf /usr/local/jboss-4.0.5/bin/run.sh -c mev & 当手动执行脚本OK,但是crontab 不执行时或者执行失败(如 python import module 失败)。这时可以大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如: 0 * * * * . /etc/profile; /bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

24. 通过端口号查询监听的进程

lsof -Pnl +M -i4 | grep 2222

-i4 表示ipv4

参考:http://deerchao.net/tutorials/regex/regex.htm

《鸟哥的linux私房菜》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-04-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档