linux常用命令

Linux export

shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。
当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。是临时的。
如果要添加对所有用户生效的永久性变量(系统级)
修改/etc/profile
对单一用户生效的永久性变量(用户级)
修改~/.bash_profile

语法
export [-fnp][变量名称]=[变量设置值]
参数说明:

-f  代表[变量名称]中为函数名称。
-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p  列出所有的shell赋予程序的环境变量。

export F=a //增加F环境变量
export F=b //增加F环境变量为b
$F //获取环境变量F

at 定时任务

在一个指定的时间执行一个指定任务,只能执行一次。首先在终端运行at命令,将计划时间作为选项传递给它。然后它提示您输入要在计划时间运行的命令(或一系列命令)。完成后按Control-D,您的命令将被放入队列中。

at 9:30 PM Tue
at> echo "Well gosh golly, it's 9:30 PM on Sunday."
at> ^D
job 1 at Sun Nov 16 09:30:00 2014

echo "ls -l >> t.log " | at 07:00
参考:https://stackoverflow.com/questions/18945669/how-to-run-a-script-at-a-certain-time-on-linux

It then places us at the at> prompt. Here we type in a simple echo command, which echoes a string of text. We press enter, and we're placed at a new at> prompt. We then press Control-D, telling at we're all done with our commands. It then tells us that our job is job number 1 and that it will run next Tuesday.

up.sh改变s.sh (当前bash脚本)的变量无效
at -f ./up.sh now + 1 minutes
up.sh从s.sh (当前bash脚本)会立即执行
at -f . ./up.sh now + 1 minutes

命令参数:
-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
-I atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<列队> 使用指定的列队
-f<文件> 从指定文件读入任务而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务

参考:https://www.computerhope.com/unix/uat.htm
https://blog.csdn.net/gxiaop/article/details/55101020

here document

Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下

cmd << delimiter
  Here Document Content
delimiter

它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数。

比如在终端中输入cat << EOF ,系统会提示继续进行输入,输入多行信息再输入EOF,中间输入的信息将会显示在屏幕上。如下:

fish@mangos:~$ cat << EOF
> First Line
> Second Line
> Third Line EOF
> EOF
First Line
Second Line
Third Line EOF

注: >这个符号是终端产生的提示输入信息的标识符

这里要注意几点

EOF 只是一个标识而已,可以替换成任意的合法字符
作为结尾的delimiter一定要顶格写,前面不能有任何字符
作为结尾的delimiter后面也不能有任何的字符(包括空格)
作为起始的delimiter前后的空格会被省略掉
Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件

cat << EOF > output.sh
echo "hello"
echo "world"
EOF

使用 sh here.sh 运行这个脚本文件,会得到output.sh 这个新文件,里面的内容如下

echo "hello"
echo "world"
参考:https://blog.csdn.net/shixiaoguo90/article/details/49781971
https://www.tldp.org/LDP/abs/html/here-docs.html

here string

here string可以看成是here document的一种定制形式. 除了COMMAND <<<WORD, 就什么都没有了,WORD将被扩展并且被送入COMMAND的stdin中.

As a simple example, consider this alternative to the echo-grep construction.

if echo "$VAR" | grep -q txt   # if [[ $VAR = *txt* ]]
# etc.

# Try:
if grep -q "txt" <<< "$VAR"
then   #         ^^^
   echo "$VAR contains the substring sequence \"txt\""
fi

Or, in combination with read:

read -r -a Words <<< "$String"
#  The -a option to "read"
#+ assigns the resulting values to successive members of an array.

echo "First word in String is:    ${Words[0]}"   # This
echo "Second word in String is:   ${Words[1]}"   # is
echo "Third word in String is:    ${Words[2]}"   # a
echo "Fourth word in String is:   ${Words[3]}"   # string
echo "Fifth word in String is:    ${Words[4]}"   # of
echo "Sixth word in String is:    ${Words[5]}"   # words.
echo "Seventh word in String is:  ${Words[6]}"   # (null)
                                                 # Past end of $String.

参考:https://www.tldp.org/LDP/abs/html/x17837.html

linux 创建文件

vi
vi 1.txt 会直接创建并打开一个文件1.txt

touch
touch的作用是更改一个文件或目录的时间。touch 2.txt 如果2.txt不存在,则创建空文件2.txt

echo
echo “abcd” > 3.txt 可以直接创建文件3.txt并将abcd写入。
参考:https://blog.csdn.net/xyw_blog/article/details/16861263

linux 查看文件内容的命令

cat 由第一行开始显示档案内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
more 一页一页的显示档案内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
nl 显示的时候,顺道输出 行号!
od 以二进制的方式读取档案内容!

把cat file 当做变量,varFile的命名如果为f.var,就什么都不会打印出来。f.var改成f.txt就可以。可能是后缀名称不支持。 echo "inside(cat $varFile)"

rmdir删除空目录

  1. Linux mv命令用来为文件或目录改名、或将文件或目录移入其它位置。
    mv 文件名 文件名 将源文件名改为目标文件名
    mv 文件名 目录名 将文件移动到目标目录
    mv 目录名 目录名 目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名
    mv 目录名 文件名 出错
    将文件 aaa 更名为 bbb :
    mv aaa bbb
    将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
    mv info/ logs

rm命令用于删除一个文件或者目录

rm [options] name...
参数:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。

清空文件夹
rm -rf /path/to/directory/*

删除文件的内容

filename
cat /dev/null > filename
cp /dev/null filename
3.mkdir命令用于建立名称为 dirName 之子目录。
mkdir [-p] dirName
在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。 若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。)
mkdir -p BBB/Test

vi删除多行

dd 删除一行
d删除以当前字符开始的一行字符 ndd 删除以当前行开始的n行 dw 删除以当前字符开始的一个字 ndw 删除以当前字符开始的n个字 D 与d同义
d) 删除到下一句的开始
d} 删除到下一段的开始
d回车 删除2行

ps

Linux ps命令用于显示当前进程 (process) 的状态。
ps -A 显示进程信息
ps -u root //显示root进程用户信息
ps -ef //显示所有命令,连带命令行
ps -x 显示没有控制终端的进程,同时显示各个命令的具体路径。(守护进程)
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。
pgrep inotify

查看守护进程
ps -eo 'tty,pid,comm' | grep ^?
参考:https://unix.stackexchange.com/questions/175380/how-to-list-all-running-daemons

kill

Linux kill命令用于删除执行中的程序或工作。
杀死进程
kill 12345
强制杀死进程
kill -KILL 123456
彻底杀死进程
kill -9 123456
改进pkill和killall:
看到pkill想到了什么?没错pgrep和kill!pkill=pgrep+kill。
pkill -9 firefox
killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。
killall -9 firefox

守护进程

图下所示为使用ps命令查看Linux系统进程的情况。从图中可以看到守护进程的一些特点:所有的守护进程都是以超级用户启动的(UID为0);没有控制终端(TTY为?);终端进程组ID为-1(TPGID表示终端进程组ID,该值表示与控制终端相关的前台进程组,如果未和任何终端相关,其值为−1)。

所有的守护进程的父进程都为init进程(PID为1的进程),如图8.2所示。可以使用pstree命令列出Linux系统中进程树的结构来进行验证。

参考:https://blog.csdn.net/u012317833/article/details/39342389

4.rsync
参考:https://wiki.archlinux.org/index.php/Rsync_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
http://man.linuxde.net/rsync
http://roclinux.cn/?p=2643
参数:
--v 详细模式输出。
-q, --quiet 精简输出模式。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, --recursive 对子目录以递归模式处理。
-R, --relative 使用相对路径信息。
-l, --links 保留软链结。
-L, --copy-links 想对待常规文件一样处理软链结。
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
--safe-links 忽略指向SRC路径目录树以外的链结。
-H, --hard-links 保留硬链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
--delete 删除那些DST中SRC没有的文件。
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
--force 强制删除目录,即使不为空。
--timeout=time ip超时时间,单位为秒。
-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
-P 等同于 --partial。
--progress 显示备份过程。
-z, --compress 对备份的文件在传输时进行压缩处理。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--version 打印版本信息。
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
--progress 在传输时现实传输过程。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 从FILE中得到密码。
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
-h, --help 显示帮助信息。</pre>

rsync 可以作为 cp 命令的高级替代品,特别在复制较大的文件的场景中:
rsync -P source destination 其中 -P 与 --partial --progress 选项的作用是相同的,该选项使得文件可以分块传输并显示传输过程中的进度。 您可能需要使用 -r --recursive 选项使目录被递归地传输。 通过 cp 命令,可以本地复制文件,但 rsync 令人激动的一个特性是可以远程复制文件,例如,在两个不同的主机之间。远程位置可以用主机加冒号进行指定: rsync source host:destination
或者
$ rsync host:source destination
网络文件传输默认使用SSH协议。

注意尾随下划

Arch 默认使用 GNU cp (part of GNU coreutils). 然而,rsync 遵循 BSD cp 的约定, 源目录后面带有一个斜杠“/”有着特定的处理。比如:

$ rsync -r source destination
创建一个有着 "source"内容的 "destination/source"目录,命令:

rsync -r source/ destination 把"source/"目录下的所有文件全部复制到"destination"目录下,而没有中间的子目录 - 就像你调用了: rsync -r source/. destination

vi操作

u 撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作

Vim快速移动光标至行首和行尾
需要按行快速移动光标时,可以使用键盘上的编辑键Home,快速将光标移动至当前行的行首。除此之外,也可以在命令模式中使用快捷键"^"(即Shift+6)或0(数字0)。

如果要快速移动光标至当前行的行尾,可以使用编辑键End。也可以在命令模式中使用快捷键""(Shift+4)。 与快捷键"^"和0不同,快捷键""前可以加上数字表示移动的行数。例如使用"1"表示当前行的行尾,"2"表示当前行的下一行的行尾。
vim一个文件,如果不正常退出,再次编辑时是会提示一些信息的,并且有一个隐藏的文件.xxx.swp
swp先产生,如果swp存在就产生第二个swx。

参考:https://www.codetd.com/article/1020806

Shell 注释

以"#"开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号。只能像这样:
多行注释
多行注释还可以使用以下格式:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

linux系统目录:

/bin:
bin是Binary的缩写, 这个目录存放着最经常使用的命令。比如/bin/sh
/dev :
dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备。比如/dev/null 表示不存在的设备
/home:
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/opt:
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/root:
该目录为系统管理员,也称作超级权限者的用户主目录。
/usr:
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:
系统用户使用的应用程序。
/var:
这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

linux日志文件

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息

linux 布尔类型

linux没有布尔类型,可以转成字符再比较

first=true
# ...do something interesting...
if [ "$first"  =  true ] ; then
    echo 'Be careful not to fall off!'
fi

if [ "first" = true ] 中=左右必须有空格,否则报错command is not found

重新设置变量
first=false
拼接字符串
greeting="hello, "first" !" greeting_1="hello,{first} !"

查找子字符串
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo expr index "$string" io # 输出 4

提取子字符串
从字符串第 2 个字符开始截取 4 个字符:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

linux中 vi / vim显示行号或取消行号命令

显示行号
:set number
或者
:set nu

取消行号显示
:set nu!

每次打开都显示行号
修改vi ~/.vimrc 文件,添加:set number

参考:https://www.cnblogs.com/davidwang456/p/3895251.html

linux shell日期赋值给一个变量

d=(date +%Y-%m-%d) echo "d"

字符串查找

有个version.json文件,取出当前的版本号
{"prev":{"version":10080,"build_timestamp":1523500949,"value":"1523500949_10080"},"version":10081,"build_timestamp":1523504202,"value":"1523504202_10081"}

grep -Po ","version":(\d+)" .json -o | cut -d: -f2
或者用sed
echo '{"prev":{"version":10080,"build_timestamp":1523500949,"value":"1523500949_10080"},"version":10081,"build_timestamp":1523504202,"value":"1523504202_10081"}' | sed -n 's/.
"version":([0-9]+).*/\1/p'

grep 命令
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-i 忽略字符大小写的差别。
-o 只输出文件中匹配到的部分。
-P perl正则表达式

在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test *file

cut 命令
Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。
语法
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]

使用说明:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

参数:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

参考:https://stackoverflow.com/questions/8602848/grep-group-capturing

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容