Linux 常用指令

创建文件
touch file

进入目录
cd /etc/

查看当前所在目录
pwd

自动补全
tab

结束退出终端
ctrl+d

暂停当前程序(按任意键恢复运行)
ctrl+s

将当前程序放到后台运行(恢复前台按fg)
ctrl+z

将光标移至行头
ctrl+a

将光标移至行末
ctrl+e

删除光标到行末
ctrl+k

向前删除一个单词
alt+backspace

创建多个文件
touch service{1..4}.txt

查看指令说明
man ls

图形输出
sudo apt-get update
sudo apt-get install sysvbanner
banner wht
printerbanner -w 50 A (宽度50,打印一个A字母)

查看用户信息
who am i (第一列表示打开当前终端的用户的用户名,第二列表示终端/伪终端序号,第三列伪终端的启动时间)
who -m
打印死掉的进程
who -d
打印当前登录用户数及用户名
who -q
打印当前登录用户登录信息
who -u
打印运行等级
who -r
查看当前登录的用户的用户名
whoami

切换到用户
su username

特权级别运行cmd命令
sudo <cmd>

切换到用户,同时环境便令也会跟着改变成目标用户的环境变量
su - username

新建用户
sudo adduser user2

查看username用户属于哪些用户组
groups username (冒号后面表示该用户所属的用户组)
cat /etc/group | sort
cat /etc/group | grep -E 'shiyanlou'
展示以下内容:
shiyanlou:x:5000: (group_name:password:GID:user_list)

将user2用户加入sodu用户组
sudo usermod -G sudo user2
将user2用户加入lilei用户组
sudo usermod -G lilei user2

删除用户
sudo deluser lilei --remove-home

使用较长格式列出文件
ls -l
展示以下内容:
lrwxrwxrwx 1 shiyanlou shiyanlou 10 6月 9 21:30 anaconda3 -> /anaconda3
drwxrwxr-x 2 shiyanlou shiyanlou 4096 6月 9 21:18 Code
(文件类型和权限-链接数-所有者-所属用户组-文件大小-最后修改时间-文件名)
d:目录, l:软链接(类似于快捷方式), b:块设备, c:字符设备, s:socket, p:管道, -:普通文件
第一组rwx:所有者权限, 第二组rwx:所属用户组权限, 第三组rwx:其他用户权限
r:允许读权限, w:允许写权限, x:允许执行权限

显示所有文件大小
ls -AsSh

查看某一个目录的完整属性
ls -dl <目录名>

查看文件大小
ls -lh

查看所有文件
ls -A

变更iphone6文件所有者为shiyanlou
sudo chown shiyuanlou iphone6

修改文件权限
chmod 600 iphone6 (第一位数字表示用户, 第二位表示用户组, 第三位表示其他用户, r=4, w=2, x=1)
chmod go-rw iphone6 ( u:user, g:group, o: others, +:添加权限, -:删除权限)

useradd: 只创建用户, 创建完了用passwd lilei设置密码
adduser: 会创建用户,创建目录,创建密码

返回上一级目录
cd ..

返回上一次所在的目录
cd -

返回当前用户的home目录
cd ~

查看当前所在的路径
pwd

创建文件
touch filename

创建文件夹
mkdir dirname

创建父目录
mkdir -p father/son/grandson

复制文件到指定目录
cp test father/son

复制目录
cp -r father family

删除文件
rm test

删除文件并忽略提示
rm -f test

删除目录
rm -r father

移动文件
mv filename dirname

重命名文件
mv filename newfilename

批量重命名(把所有.txt为后缀的文件改为.text)
rename 's/\.txt/\.text' *.txt

查看文件
cat filename (正序显示)
cat -n filename (显示行号)
tac filename (倒序显示)
nl filename (显示行号打印)

查看文件
nl -b a filename (和cat -n filename 相似,有空行也会显示行号)
nl -b t filename (空行不现实行号)
nl -n ln filename (在行号字段最左端显示)
nl -n rn filename (在行号字段最右端显示,不加0)
nl -n rz filename (在行号字段最右端显示,加0)
nl -w 4 filename (行号字段占用的位数)
more filename
less filename (enter:下滚一行, space:下滚一屏, h:帮助, q:退出)
head filename 查看文件前十行
head -n 2 filename 查看文件前2行
tail filename 查看文件后十行
tail -n 2 filename 查看文件后2行

查看文件类型
file filename

搜索文件
where指令搜索
只能搜索二进制文件(-c), man帮助文件(-m), 源代码文件(-s)
whereis -c filename

locate指令搜索
查找指定目录下的不同文件类型
sudo apt-get install locate
locate /bin/sh
查找/usr/share/下的所有jgp
locate /usr/share/\*.jpg
只统计数目加-c
忽略大小写检查-i

find指令搜索
在/etc/目录下,搜索interfaces文件或目录
find /etc/ -name interfaces
find /etc/ -name *.list
-atime 最后访问时间
-ctime 最后修改文件内容的时间
-mtime 最后修改文件属性的时间

-mtime n: n为数字,表示为在n天之前的"一天之内"修改过的文件
-mtime +n: 列出在n天之前(不包含n天本身)被修改过的文件
-mtime -n: 列出在n天之前(包含n天本身)被修改过的文件
-newer file: file为一个已存在的文件, 列出比file还要新的文件名

列出home目录中,当天(24小时之内)有该动的文件
find ~ -mtime 0
列出用户home目录比Code文件夹新的文件
find ~ -newer /home/shiyanlou/Code

sudo apt-get update
sudo apt-get install cmatrix
cmatrix

sudo apt-get install libaa-bin
aafire

文件压缩
*.zip zip 程序打包压缩的文件
*.rar rar 程序压缩的文件
*.7z 7zip 程序压缩的文件
*.tar tar 程序打包,未压缩的文件
*.gz gzip 程序(GNU zip)压缩的文件
*.xz xz 程序压缩的文件
*.bz2 bzip2 程序压缩的文件
*.tar.gz tar 打包,gzip 程序压缩的文件
*.tar.xz tar 打包,xz 程序压缩的文件
*tar.bz2 tar 打包,bzip2 程序压缩的文件
*.tar.7z tar 打包,7z 程序压缩的文件

将目录/home/shiyanlou/Desktop 打包成一个文件
zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
-r:递归打包包含子目录的全部内容,
-q:安静模式,不向屏幕输出信息,
-o:输出文件需要在其后紧跟打包输出文件名
查看打包后文件大小
du -h shiyanlou.zip
-h:--human-readable,人类可读,
-d:--max-depth,查看文件的深度
设置压缩级别,并重新打包
zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/Desktop -x ~/*.zip
-[1-9]:设置压缩级别,9最大,1最小,1表示最快压缩但体积大,
-x:排除上一次创建的zip文件)
查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小
du -h -d 0 *.zip ~ | sort
创建加密压缩包
zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou/Desktop

windows换行符为CR+LF(回车加换行)
Linux/Unix为LF(换行)
默认linux上编辑的文本在windows上打开是没有换行,需要进行处理
zip -r -l -o shiyanlou.zip /home/shiyanlou/Desktop
-l:将LF转换为CR+LF

解压到当前目录
unzip shiyanlou.zip

使用安静模式,将文件解压到指定目录,目录不存在自动创建
unzip -q shiyanlou.zip ziptest

查看压缩包的内容
unzip -l shiyanlou.zip

Windows中文GBK编码,Linux默认UTF-8编码
unzip -O GBK 中文压缩文件名.zip

不进行压缩,只打包
tar -cf shiyanlou.tar /home/shiyanlou/Desktop
-c:表示创建一个tar包文件,
-f:指定文件名,注意文件名必须紧跟-f参数之后,
-v:以可视的方式输出打包的文件,
-P:保留绝对路径,
-x:解包一个文件,
-C:到指定路径的已存在目录

只查看不解包(-t)
tar -tf shyanlou.tar

保留文件属性和跟随链接(符号链接或软链接),有时候我们使用 tar 备份文件当你在其他主机还原时希望保留文件的属性(-p 参数)和备份链接指向的源文件而不是链接本身(-h 参数):
tar -cphf etc.tar /etc

使用gzip工具创建*.tar.gz文件(-z)
tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop

解压 *.tar.gz 文件(-x)
tar -xzf shiyanlou.tar.gz

压缩文件格式 参数
*.tar.gz -z
*.tar.xz -J
*tar.bz2 -j

查看磁盘的容量
df
展示一下内容:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 20616252 1813184 17738172 10% /
devtmpfs 238888 0 238888 0% /dev
tmpfs 249668 0 249668 0% /dev/shm
tmpfs 249668 33284 216384 14% /run
tmpfs 249668 0 249668 0% /sys/fs/cgroup
tmpfs 49936 0 49936 0% /run/user/0

/dev/vda1
1: 表示分区号
a: 表示第几块硬盘(第二块:vdb, 第三块:vdc)
查看磁盘的容量
df -h

查看目录的容量
du
du -h (以易读的方式展示)
du -h -d 0 ~ (只查看1级目录的深度)
du -h -d 1 ~ (查看二级)

从标准输入读入用户的输入到标准输出或者一个文件
dd of=test bs=10 count=1
dd if=/dev/stdin of=test bs=10 count=1
of(output file)输出文件
if(input file)输入文件
bs(block size)指定块大小
count指定块数量

将输出的英文字符转换为大写再写入文件
dd if=/dev/stdin of=test bs=10 count=1 conv=ucase

从/dev/zero设备创建一个容量为 256M 的空文件
dd if=/dev/zero of=virtual.img bs=1M count=256

查看所占容量
du -h virtual.img

查看不同的文件系统
sudo mkfs + TAB

将磁盘镜像格式化为ext4文件系统
sudo mkfs.ext4 virtual.img

mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]

进入磁盘分区模式
sudo fdisk virtual.img

查看帮助
ls --help
man ls

crontab 周期性任务
crontab 的格式
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

sudo apt-get install -y rsyslog
sudo service rsyslog start
sudo cron -f &

添加计划任务
crontab -e
选择/usr/bin/vim.basic编辑器

每分钟我们会在/home/shiyanlou目录下创建一个以当前的年月日时分秒为名字的空白文件
*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)

查看添加了哪些任务
crontab -l

查看cron的守护进程是否启动
ps aux|grep cron
pgrep cron

查看到执行任务命令之后在日志
sudo tail -f /var/log/syslog

删除crontab任务
crontab -r

每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。
如果是系统级别的定时任务,应该如何处理?只需要以 sudo 权限编辑 /etc/crontab 文件就可以。

选择执行命令
which cowsay>/dev/null && cowsay -f head-in ohch~
&&: 如果前面的命令执行结果为0则执行后面的,否则不执行,用&? 可以查看上一次命令的返回结果
||: 如果前面的命令执行结果不为0则执行后面的,

管道: |
将前面一个进程的输出(stdout)直接作为下一个进程的输入(stdin)
ls -al /etc | less

打印/etc/passwd 文件中以:为分隔符的第一个字段和第6个字段
cut /etc/passwd -d ':' -f 1,6
-d: 以''中的内容为分割符

打印/etc/passwd文件中每一行的前N个字符
前五个(包含第五个)
cut /etc/passwd -c -5
前五个之后的(包含第五个)
cut /etc/passwd -c 5-
第五个
cut /etc/passwd -c 5
2到5之间的(包含第五个)
cut /etc/passwd -c 2-5

grep [命令选项]... 用于匹配的表达式 [文件]...

搜索/home/shiyanlou目录下所有包含"shiyanlou"的文本文件
grep -rnI 'shiyanlou' ~
-r: 递归搜索子目录中的文件
-n: 打印匹配项行号
-I: 忽略二进制文件
查看环境变量中以"yanlou"结尾的字符串
export | grep ".*yanlou$"

wc 命令:统计并输出一个文件中行,单词和字节的数目
输出/etc/passwd文件的统计信息
wc /etc/passwd
输出/etc/passwd的行数
wc -l /etc/passwd
输出/etc/passwd的单词数
wc -w /etc/passwd
输出/etc/passwd的字节数
wc -c /etc/passwd
输出/etc/passwd的字符数
wc -m /etc/passwd
输出/etc/passwd的最长行字节数
wc -L /etc/passwd
统计 /etc 下面所有目录数
ls -dl /etc/*/ | wc -l

sort 命令:排序命令
默认字典排序
cat /etc/passwd | sort
反转排序
cat /etc/passwd | sort -r
按特定字段排序
cat /etc/passwd | sort -t':' -k 3
-t: 指定字段的分隔符
-k: 字段号,用于指定对哪一个字段进行排序
如果要按照数字排序就要加上-n参数
cat /etc/passwd | sort -t':' -k 3 -n

history:查看最近执行过的命令(读取${SHELL}_history文件,例如~/.zsh_history)
去掉命令后面的参数然后去掉重复的命令
history | cut -c 8- | cut -d ' ' -f 1 | uniq
全文去重
history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq
history | cut -c 8- | cut -d ' ' -f 1 | sort -u
输出重复过的行(重复的只输出一个)及重复次数
history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc
输出所有重复的行w
history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -D

tr命令: 删除一段文本信息中的某些文字,或将其进行转换
tr [option]...SET1 [SET2]
-d: 删除和SET1匹配的字符
-s: 去除set1指定的输入文本中连续并重复的字符

删除 "hello shiyanlou" 中所有的'o','l','h'
echo 'hello shiyanlou' | tr -d 'olh'
将"hello" 中的ll,去重为一个l
echo 'hello' | tr -s 'l'
将输入文本,全部转换为大写或小写输出
echo 'input some text here' | tr '[:lower:]' '[:upper:]'
上面的'[:lower:]' '[:upper:]'你也可以简单的写作'[a-z]' '[A-Z]',当然反过来将大写变小写也是可以的

col命令: 将Tab换成对等数量的空格键
-x: 将Tab转换为空格
-h: 将空格转换为Tab(默认)

join命令: 将两个文件中包含相同内容的那一行合并在一起
join [option]... file1 file2
-t: 指定分割符,默认空格
-i: 忽略大小写
-1: 指定第一个文件要用哪个字段来对比,默认第一个字段
-2: 指定第二个文件要用哪个字段来对比,默认第一个字段

paste命令: 不对比数据的情况下,简单地将多个文件合并在一起
paste [option] file...
-d: 指定合并的分隔符,默认为Tab
-s: 不合并到一行, 每个文件为一行
echo hello > file1
echo shiyanlou > file2
echo www.shiyanlou.com > file3
paste -d ':' file1 file2 file3
paste -s file1 file2 file3

游戏
sudo apt-get install ninvaders
/usr/games/ninvaders

标准输入: stdin(文件描述符:0), 标准输出: stdout(1), 标准错误输出: stderr(2)

临时重定向 > >>
将cat的连续输出(heredoc方式)重定向到一个文件
$ mkdir Documents
$ cat > Documents/test.c <<EOF
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
EOF

将echo命令的输出从默认的标准输出重定向到一个普通文件
$ echo 'hello shiyanlou' > redirect
$ cat redirect

下面我们将输出重定向到一个文件
$ cat Documents/test.c hello.c > somefile

将输出重定向到文件,也需要将信息打印在终端,可以使用tee命令实现
echo 'hello shiyanlou' | tee hello

永久重定向 exec
开启一个子shell
zsh
使用exec替换当前进程的重定向,将标准输出重定向到一个文件
exec 1>somefile
之后执行的命令的输出都讲被重定向到文件中,知道退出当前的子shell,或取消exec 的重定向
ls
exit
cat somefile

查看当前 Shell 进程中打开的文件描述符
cd /dev/fd/;ls -Al

创建新的文件描述符
zsh
exec 3>somefile
cd /dev/fd/;ls -Al;cd -
echo 'this is test' >&3
cat somefile
exit
关闭新的操作符
exec 3>&-
cd /dev/fd;ls -Al;cd -

sudo apt-get install caca-utils
cacaview <pic_file>
cacademo
cacafire

选择: |
boy|girl 可以匹配boy或girl
数量限定: * + ?
+: 表示前面的字符必须出现至少一次(1次或N次),例如: goo+gle 可匹配gooogle,goooogle等
?: 表示前面的字符最多出现一次(0次或1次),例如: colou?r 可匹配color或者colour
*: 代表前面的字符可以不出现,也可以出现一次或多次(0次,1次,多次)
范围和优先级: ()
(): 定义模式字符串的范围和优先级,例如: "gr(a|e)y"等价于"gray|grey", "(grand)?father"可匹配father和grandfather

语法:
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
* 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”、“zo”以及“zoo”。*等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
. 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
(pattern) 匹配pattern并获取这一匹配的子字符串。该子字符串用于向后引用。要匹配圆括号字符,请使用“\(”或“\)”。
x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
[xyz] 字符集合(character class)。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。其中特殊字符仅有反斜线\保持特殊含义,用于转义字符。其它特殊字符如星号、加号、各种括号等均作为普通字符。脱字符^如果出现在首位则表示负值字符集合;如果出现在字符串中间就仅作为普通字符。连字符 - 如果出现在字符串中间表示字符范围描述;如果如果出现在首位则仅作为普通字符。
[^xyz] 排除型(negate)字符集合。匹配未列出的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[^a-z] 排除型的字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
[:alnum:] 代表英文大小写字母及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字母,亦即 A-Z, a-z
[:blank:] 代表空白键与 [Tab] 按键两者
[:cntrl:] 代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已,亦即 0-9
[:graph:] 除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字母,亦即 a-z
[:print:] 代表任何可以被列印出来的字符
[:punct:] 代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...
[:upper:] 代表大写字母,亦即 A-Z
[:space:] 任何会产生空白的字符,包括空白键, [Tab], CR 等等
[:xdigit:] 代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

-b: 将二进制文件作为文本来进行匹配
-c: 统计以模式匹配的数目
-i: 忽略大小写
-n: 显示匹配文本所在行的行号
-v: 反选,输出不匹配行的内容
-r: 递归匹配查找
-A n: n为正整数,表示after的意思,除了列出匹配行之外,还列出后面的n行
-B n: n为正整数,表示before的意思,除了列出匹配行之外,还列出前面的n行
--color=auto: 将输出中的匹配项设置为自动颜色显示


grep -c shiyanlou 0test

grep -i -n c test
grep -v shell test

将匹配以'z'开头以'o'结尾的所有字符串
echo 'zero\nzo\nzoo' | grep 'z.*o'
将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
echo 'zero\nzo\nzoo' | grep 'z.o'
将匹配以'z'开头,以任意多个'o'结尾的字符串
echo 'zero\nzo\nzoo' | grep 'zo*'

通过grep使用扩展正则表达式需要加上-E参数,或使用egrep
只匹配"zo"
echo 'zero\nzo\nzoo' | grep -E 'zo{1}'
匹配以"zo"开头的所有单词
echo 'zero\nzo\nzoo' | grep -E 'zo{1,}'

匹配"www.shiyanlou.com"和"www.google.com"
echo 'www.shiyanlou.com\nwww.baidu.com\nwww.google.com' | grep -E 'www\.(shiyanlou|google)\.com'
或者匹配不包含"baidu"的内容
echo 'www.shiyanlou.com\nwww.baidu.com\nwww.google.com' | grep -Ev 'www\.baidu\.com'

sed命令格式
sed [参数]... [执行命令] [输入文本]...
-n: 安静模式,只打印受影响的行,默认打印输出数据的全部内容
-e: 用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
-f filename: 指定执行filename文件中的命令
-r: 使用扩展正则表达式,默认为标准正则表达式
-i: 将直接修改输入文件内容,而不是打印到标准输出设备
[n1][,n2]command: 从n1到n2行
[n1][~step]command: 从n1开始以step为步进的所有行,command为执行动作
s: 行内替换
c: 整行替换
a: 插入到指定行的后面
i: 插入到指定行的前面
p: 打印指定行,通常与-n参数配合使用
d: 删除指定行


将test文件中的sad替换为happy
sed -i 's/sad/happy/' test

全局范围替换
sed -i 's/sad/happy/g' test
指定行中的第四个匹配字符串
sed -i 's/sad/happy/4' test
打印2-5行
nl passwd | sed -n '2,5p'
打印奇数行
nl passwd | sed -n '1~2p'
将文本中的shiyanlou替换为hehe,并只打印替换的那一行
sed -n 's/shiyanlou/hehe/gp' passwd

awk命令:
awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]
-F参数用于预先指定前面提到的字段分隔符(还有其他指定字段的方式)
-v用于预先为awk程序指定变量
-f参数用于指定awk命令要执行的程序文件,或者在不加-f参数的情况下直接将程序语句放在这里
最后为awk需要处理的文本输入,且可以同时输入多个文本文件

vim test
包含如下内容:
I like linux
www.shiyanlou.com

$ awk '{
> if(NR==1){
> print $1 "\n" $2 "\n" $3
> } else {
> print}
> }' test

$ awk '{
> if(NR==1){
> OFS="\n"
> print $1, $2, $3
> } else {
> print}
> }' test

NR表示当前读入的记录数,你可以简单的理解为当前处理的行数
OFS表示输出时的字段分隔符,默认为" "空格,如上图所见,我们将字段分隔符设置为\n换行符,所以第一行原本以空格为字段分隔的内容就分别输出到单独一行了
然后是$N其中N为相应的字段号,这也是awk的内建变量,它表示引用相应的字段,因为我们这里第一行只有三个字段,所以只引用到了$3。除此之外另一个这里没有出现的$0,它表示引用当前记录(当前行)的全部内容

将test的第二行的以点为分段的字段换成以空格为分隔

$ awk -F'.' '{
> if(NR==2){
> print $1 "\t" $2 "\t" $3
> }}' test

# 或者
$ awk '
> BEGIN{
> FS="."
> OFS="\t" # 如果写为一行,两个动作语句之间应该以";"号分开
> }{
> if(NR==2){
> print $1, $2, $3
> }}' test

变量名 说明
FILENAME 当前输入文件名,若有多个文件,则只表示第一个。如果输入是来自标准输入,则为空字符串
$0 当前记录的内容
$N N表示字段号,最大值为NF变量的值
FS 字段分隔符,由正则表达式表示,默认为" "空格
RS 输入记录分隔符,默认为"\n",即一行为一个记录
NF 当前记录字段数
NR 已经读入的记录数
FNR 当前输入文件的记录数,请注意它与NR的区别
OFS 输出字段分隔符,默认为" "空格
ORS 输出记录分隔符,默认为"\n"

在文件data中匹配数字开头的行,结果写入/home/shiyanlou/num文件
cat data2 | grep -E '^[:digit:].*' > num
在文件data中匹配出正确格式的邮箱,结果写入一个名为/home/shiyanlou/mail的文件
cat data2 | grep -E '^[[:alnum:]].*@[[:alnum:]]\.[[:lower:]]' > mail


Ubuntu下安装软件的几种方式:apt/dpkg
Linux上软件安装的四种方式:
在线安装
从磁盘安装deb软件包
从二进制软件包安装
从源代码编译安装

apt-get 工具
install 其后加上软件包名,用于安装一个软件包
update 从软件源镜像服务器上下载/更新用于更新本地软件源的软件包列表
upgrade 升级本地可更新的全部软件包,但存在依赖问题时将不会升级,通常会在更新之前执行一次update
dist-upgrade 解决依赖关系并升级(存在一定危险性)
remove 移除已安装的软件包,包括与被移除软件包有依赖关系的软件包,但不包含软件包的配置文件
autoremove 移除之前被其他软件包依赖,但现在不再被使用的软件包
purge 与remove相同,但会完全移除软件包,包含其配置文件
clean 移除下载到本地的已经安装的软件包,默认保存在/var/cache/apt/archives/
autoclean 移除已安装的软件的旧版本软件包

下面是一些apt-get常用的参数:
参数 说明
-y 自动回应是否安装软件包的选项,在一些自动化安装脚本中使用这个参数将十分有用
-s 模拟安装
-q 静默安装方式,指定多个q或者-q=#,#表示数字,用于设定静默级别,这在你不想要在安装软件包时屏幕输出过多时很有用
-f 修复损坏的依赖关系
-d 只下载不安装
--reinstall 重新安装已经安装但可能存在问题的软件包
--install-suggests 同时安装APT给出的建议安装的软件包

重新安装:
sudo apt-get --reinstall install w3m
更新软件源
sudo apt-get update
升级没有依赖问题的软件包
sudo apt-get upgrade
升级并解决依赖关系
sudo apt-get dist-upgrade
卸载:
sudo apt-get remove w3m
不保留配置文件的移除
sudo apt-get purge w3m
或者 sudo apt-get --purge remove
移除不再需要的被依赖的软件包
sudo apt-get autoremove

确认软件仓库是否有软件
sudo apt-cache search softname1

dpkg常用参数介绍:
参数 说明
-i 安装指定deb包
-R 后面加上目录名,用于安装该目录下的所有deb安装包
-r remove,移除某个已安装的软件包
-I 显示deb包文件的信息
-s 显示已安装软件的信息
-S 搜索已安装的软件包
-L 显示已安装软件包的目录信息

从二进制包安装
将从网络上下载的二进制包解压后放到合适的目录,然后将包含可执行的主程序文件的目录添加进PATH环境变量即可

sudo apt-get install bb
/usr/games/bb

ps aux
ps axjf
ps -l

查看物理CPU的个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
每个cpu的核心数
cat /proc/cpuinfo |grep "physical id"|grep "0"|wc -l
通过 pstree 可以很直接的看到相同的进程数量

kill -9 PID

ps aux | grep gedit

ll /var/log/
日志名称 记录信息
alternatives.log 系统的一些更新替代信息记录
apport.log 应用程序崩溃信息记录
apt/history.log 使用 apt-get 安装卸载软件的信息记录
apt/term.log 使用 apt-get 时的具体操作,如 package 的下载、打开等
auth.log 登录认证的信息记录
boot.log 系统启动时的程序服务的日志信息
btmp 错误的信息记录
Consolekit/history 控制台的信息记录
dist-upgrade dist-upgrade 这种更新方式的信息记录
dmesg 启动时,显示屏幕上内核缓冲信息,与硬件有关的信息
dpkg.log dpkg 命令管理包的日志。
faillog 用户登录失败详细信息记录
fontconfig.log 与字体配置有关的信息记录
kern.log 内核产生的信息记录,在自己修改内核时有很大帮助
lastlog 用户的最近信息记录
wtmp 登录信息的记录。wtmp可以找出谁正在进入系统,谁使用命令显示这个文件或信息等
syslog 系统信息记录

这是本人学习笔记,供大家参考学习,如内容有误欢迎大家批评指正,共同进步!

该内容来自实验楼免费课程,不做任何商业用途, 如有侵权请及时联系本人删除!!!

 

posted @ 2019-06-10 23:54  W-it-H-ou-T  阅读(578)  评论(0编辑  收藏  举报