liunx命令

#创建一个名为 file 的文件,touch是一个命令
touch file

#进入一个目录,cd是一个命令
cd /etc/

#查看当前所在目录
pwd

#创建一个名为 file 的文件,touch是一个命令
touch file

#进入一个目录,cd是一个命令
cd /etc/

#查看当前所在目录
pwd


Ctrl+d	#键盘输入结束或退出终端
Ctrl+s	#暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z	#将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a	#将光标移至输入行头,相当于Home键
Ctrl+e	#将光标移至输入行末,相当于End键
Ctrl+k	#删除从光标所在位置到行末
Alt+Backspace	#向前删除一个单词
Shift+PgUp	#将终端显示向上滚动
Shift+PgDn	#将终端显示向下滚动

ls *.txt #通配符
touch love_{1..10}_shiyanlou.txt #创建多个文件
#通配符
*	                  #匹配 0 或多个字符
?	                  #匹配任意一个字符
[list]	              #匹配 list 中的任意单一字符
[^list]	              #匹配 除 list 中的任意单一字符以外的字符
[c1-c2]	              #匹配 c1-c2 中的任意单一字符 如:[0-9][a-z]
{string1,string2,...} #匹配 string1 或 string2 (或更多)其一字符串
{c1..c2}	          #匹配 c1-c2 中全部字符 如{1..10}


who am i
# 或者
who mom likes #查看当前用户

sudo adduser [用户名] #新建用户名
groups [用户] #查看所属组织
cat /etc/group | sort #查看所属组织
sudo passwd [用户] #设置用户密码
sudo deluser lilei --remove-home #删除用户
#drwxr-xr-x  2  root root  2096 11月 12:12:12 Documents
#类型与权限  连接数量 所有者  所属用户组 文件大小 最后修改日期 文件名 
#
#第一位
#d 目录,l 软连接,b 块设备,c 字符设备,s socket,p 管道,-普通文件
#后边
#r 读取权限 ,w写权限,x执行权限

sudo chown [所有人] [文件] #更改所有者
chmod go-rw [文件]# 给文件权限 g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限

#adduser 和 useradd 的区别是什么
#答:useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd <username> 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作


tree / #树状图展示目录,没有需要yum intall tree
cp [文件] [新目录] #复制 
cp -r [文件] [新目录] #复制目录
rm [文件] #删除文件
rm -r [文件] #删除目录文件
rm -rf [文件]#强制删除目录文件
mv [目录] [新目录] #移动
mv [目录] [新目名]#重命名

cat -n [文件] #可以加上 -n 参数显示行号:

nl #命令参数 
#-b : 指定添加行号的方式,主要有两种:
#    -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
#    -b t:只列出非空行的编号并列出(默认为这种方式)
#-n : 设置行号的样式,主要有三种:
#    -n ln:在行号字段最左端显示
#    -n rn:在行号字段最右边显示,且不加 0
#    -n rz:在行号字段最右边显示,且加 0
#-w : 行号字段占用的位数(默认为 6 位)

less #命令分页查看文件 less 为基于 more 和 vi开发

file [文件] # file 命令查看文件的类型

nohup [程序] &#后台执行
declare tmp #liunx创建变量 
#变量赋值 正确的赋值
tmp=s
# 错误的赋值
tmp = s
echo $tmp #打印变量
#三种环境变量相关的命令:set,env,export。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。详见下表:
#命 令	说 明
#set	显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。
#env	显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。
#export	显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。

#两个重要文件 /etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量
#用户下的 .profile 只对当前用户永久生效
shell
#变量设置方式	说明
#${变量名#匹配字串}	从头向后开始匹配,删除符合匹配字串的最短数据
#${变量名##匹配字串}	从头向后开始匹配,删除符合匹配字串的最长数据
#${变量名%匹配字串}	从尾向前开始匹配,删除符合匹配字串的最短数据
#${变量名%%匹配字串}	从尾向前开始匹配,删除符合匹配字串的最长数据
#${变量名/旧的字串/新的字串}	将符合旧字串的第一个字串替换为新的字串
#${变量名//旧的字串/新的字串}
unset [变量] #删除一个环境变量
whereis  
find  
which 

zip -r -9 -q -o s9.zip /home//Desktop -x ~/*.zip 
#-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小(后面会具体说明该命令)
#这里添加了一个参数用于设置压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。
unzip -q s.zip -d ziptest #unzip -l s.zip

unzip -l shiyanlou.zip #上述指定目录不存在,将会自动创建。如果你不想解压只想查看压缩包的内容你可以使用 -l 参数
#使用 unzip 解压文件时我们同样应该注意兼容问题,不过这里我们关心的不再是上面的问题,而是中文编码的问题,通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。
#使用 -O(英文字母,大写 o)参数指定编码类型
unzip -O GBK 中文压缩文件.zip

; tar:
; 打包:tar -cf something.tar something
; 解包:tar -xf something.tar
; 指定路径:-C 参数

df #查看磁盘的容量
du -h #查看目录的容量
# 默认同样以块的大小展示
du
# 加上 `-h` 参数,以更易读的方式展示
du -h

# 只查看 1 级目录的信息 -d 参数指定查看目录的深度
du -h -d 0 ~
# 查看 2 级
du -h -d 1 ~ 


# 输出到文件
dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1
# 输出到标准输出
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
# 在打完了这个命令后,继续在终端打字,作为你的输入
#上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如 K,M,G 等单位),count 用于指定块数量。如上图所示,我指定只读取总共 10 个字节的数据,当我输入了 hello shiyanlou 之后加上空格回车总共 16 个字节(一个英文字符占一个字节)内容,显然超过了设定大小。使用 du 和 cat 10 个字节(那个黑底百分号表示这里没有换行符),而其他的多余输入将被截取并保留在标准输入。


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

sudo mkfs.ext4 [文件磁盘] #格式化
 
sudo mount #查看下主机已经挂载的文件系统

mount -o loop -t ext4 virtual.img /mnt

#如何挂载真正的磁盘到目录树呢,mount 命令的一般格式如下:
#mount [options] [source] [directory]
#一些常用操作:
#mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]

# 查看硬盘分区表信息
sudo fdisk -l

# 命令格式 sudo umount 已挂载设备名或者挂载点,如:
sudo umount /mnt

# 也可以省略挂载类型,很多时候 mount 会自动识别
mount -o loop -t ext4 virtual.img /mnt

# 以只读方式挂载
mount -o loop --ro virtual.img /mnt
# 或者 mount -o loop,ro virtual.img /mnt
# 进入磁盘分区模式
sudo fdisk virtual.img


# 如果提示设备忙你也可以使用其它的回环设备,"ls /dev/loop*"参看所有回环设备
sudo losetup /dev/loop0 virtual.img


# 解除设备关联
sudo losetup -d /dev/loop0

#####crontab  定时任务
sudo apt-get install -y rsyslog
sudo service rsyslog start
#启动定时任务
sudo cron -f &

crontab -e#添加一个计划任务
crontab -l#查看添加了那些任务
crontab -l
ps aux | grep cron / pgrep cron #查看是否启动
sudo tail -f /var/log/syslog #查看系统日志
crontab -r #删除定时任务
#crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档

#如果是系统级别的定时任务,需要 root 权限执行的任务应该怎么处理?
#只需要使用 sudo 编辑 /etc/crontab 文件就可以。
#cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的內容。
#/etc/cron.daily,目录下的脚本会每天执行一次,在每天的 6 点 25 分时运行;
#/etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的 17 分钟时运行;
#/etc/cron.monthly,目录下的脚本会每月执行一次,在每月 1 号的 6 点 52 分时运行;
#/etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的 6 点 47 分时运行;


which cowsay>/dev/null && cowsay -f head-in ohch~ #如果cowsy执行结果为1,则执行前边的,为0则整形后变得,||正好相反
echo $?#查询上一次执行命令的结果

####管道

ls -al /etc | less #通过管道将前一个命令(ls)的输出作为下一个命令(less)的输入,然后就可以一行一行地看。

# 前五个(包含第五个)
cut /etc/passwd -c -5
# 前五个之后的(包含第五个)
cut /etc/passwd -c 5-
# 第五个
cut /etc/passwd -c 5
# 2 到 5 之间的(包含第五个)
cut /etc/passwd -c 2-5

cut /etc/passwd -d ':' -f 1,6#为分隔符的第 1 个字段和第 6 个字段分别表示用户名和其家目录:

grep -rnI "shiyanlou" ~ #搜索/home/shiyanlou目录下所有包含"shiyanlou"的文本文件,并显示出现在文本中的行号 #-r 参数表示递归搜索子目录中的文件,-n 表示打印匹配项行号,-I 表示忽略二进制文件。
# 查看环境变量中以 "yanlou" 结尾的字符串
export | grep ".*yanlou$"  #$代表末尾
wc #命令用于统计并输出一个文件中行、单词和字节的数目,比如输出
# 行数
wc -l /etc/passwd
# 单词数
wc -w /etc/passwd
# 字节数
wc -c /etc/passwd
# 字符数
wc -m /etc/passwd
# 最长行字节数
wc -L /etc/passwd

#sort 排序
cat /etc/passwd | sort -r #反转排序
cat /etc/passwd | sort -t':' -k 3 #按特定字段排序 -t参数用于指定字段的分隔符,这里是以":"作为分隔符;-k 字段号用于指定对哪一个字段进行排序。这里/etc/passwd文件的第三个字段为数字,默认情况下是以字典序排序的,如果要按照数字排序就要加上-n参数
uniq #uniq  只过滤连续的重复行
sort -u #去除所有的重复行
uniq -dc# 输出重复过的行(重复的只输出一个)及重复次数
uniq -D# 输出重复过的行(重复的只输出一个)及重复次数

#文本处理
#tr命令
# 删除 "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换成对等数量的空格键,或反转这个操作。
col -x	#将Tab转换为空格
col -h	#将空格转换为Tab(默认选项)


cat -A #查看隐藏符号

join [option]... file1 file2 #这个命令就是用于将两个文件中包含相同内容的那一行合并在一起   和去重差不多
-t	#指定分隔符,默认为空格
-i	#忽略大小写的差异
-1	#指明第一个文件要用哪个字段来对比,默认对比第一个字段
-2	#指明第二个文件要用哪个字段来对比,默认对比第一个字段

paste [option] file... #这个命令与join 命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开。
-d	#指定合并的分隔符,默认为 Tab
-s	#不合并到一行,每个文件为一行


#Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为 stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)
#0	/dev/stdin	标准输入
#1	/dev/stdout	标准输出
#2	/dev/stderr	标准错误



tee [-ai][--help][--version][文件...] #读取标准输入的数据,并将其内容输出成文件 -a或--append  附加到既有文件的后面,而非覆盖它.

exec #命令实现永久重定向 #exec 命令的作用是使用指定的命令替换当前的 Shell,即使用一个进程替换当前进程,或者指定新的重定向

···# 先开启一个子 Shell
zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向(后面将告诉你怎么做)
ls
exit
cat somefile
···

#同样使用 exec 命令可以创建新的文件描述符:
#zsh
#exec 3>somefile
## 先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
#cd /dev/fd/;ls -Al;cd -
## 注意下面的命令>与&之间不应该有空格,如果有空格则会出错
#echo "this is test" >&3
#cat somefile
#exit

#在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个 EOF。

#cat Documents/test.c 1>/dev/null 2>&1




#正则
\	        #将下一个字符标记为一个特殊字符、或一个原义字符。 例如 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 范围内的任意字符。


#优先级
#优先级为从上到下从左到右,依次降低:
#
#运算符	                        # 说明
#\	                            # 转义符
#(),(?:),(?=),[]	            # 括号和中括号
#*,+,?,{n},{n,},{n,m}	     # 限定符
#^,$,\                         # 任何元字符	定位点和序列
#|	                            # 选择

# grep默认是区分大小写的,这里将匹配所有的小写字母
echo '1234\nabcd' | grep '[a-z]'
# 将匹配所有的数字
echo '1234\nabcd' | grep '[0-9]'
# 将匹配所有的数字
echo '1234\nabcd' | grep '[[:digit:]]'
# 将匹配所有的小写字母
echo '1234\nabcd' | grep '[[:lower:]]'
# 将匹配所有的大写字母
echo '1234\nabcd' | grep '[[:upper:]]'
# 将匹配所有的字母和数字,包括0-9,a-z,A-Z
echo '1234\nabcd' | grep '[[:alnum:]]'
# 将匹配所有的字母
echo '1234\nabcd' | grep '[[:alpha:]]'

#安装软件包

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

top


#F	进程的标志(process flags),当 flags 值为 1 则表示此子程序只是 fork 但没有执行 exec,为 4 表示此程序使用超级管理员 root 权限
#USER	进程的拥有用户
#PID	进程的 ID
#PPID	其父进程的 PID
#SID	session 的 ID
#TPGID	前台进程组的 ID
#%CPU	进程占用的 CPU 百分比
#%MEM	占用内存的百分比
#NI	进程的 NICE 值
#VSZ	进程使用虚拟内存大小
#RSS	驻留内存中页的大小
#TTY	终端 ID
#S or STAT	进程状态
#WCHAN	正在等待的进程资源
#START	启动进程的时间
#TIME	进程消耗 CPU 的时间
#COMMAND	命令的名称和参数
#
#
##STAT的进程状态
#R	Running.运行中
#S	Interruptible Sleep.等待调用
#D	Uninterruptible Sleep.不可中断睡眠
#T	Stoped.暂停或者跟踪状态
#X	Dead.即将被撤销
#Z	Zombie.僵尸进程
#W	Paging.内存交换
#N	优先级低的进程
#<	优先级高的进程
#s	进程的领导者
#L	锁定状态
#l	多线程状态
#+	前台进程

ps axjf #进程树状查看

ps -afxo user,ppid,pid,pgid,command #简单查看


pstree -up #树状查看
-A	#程序树之间以 ASCII 字符连接
-p	#同时列出每个 process 的 PID
-u	#同时列出每个 process 的所属账户名称


renice -5 pid #修改进程优先级 #nice 值可以调整的范围是 -20 ~ 19




liunx #系统日志文件

#/var/log/cron
#这个文件记录了系统例行性工作调度的相关信息,如你的crontab调度有没有实际被进行?进行过程中有没有发生错误?/etc/crontab是否编写正确?在这个日志文件内都可以查询。
#
#/var/log/dmesg
#该文件记录系统在开机时内核检测过程中所产生的各项信息。由于centos默认将开机时内核的硬件检测过程取消显示,因此额外将数据记录在此文件中。
#
#/var/log/lastlog
#该文件记录了系统上所有帐号最近一次登入系统时的相关信息。lastlog命令就是利用这个文件所记录的信息来显示结果。
#
#/var/log/maillog或/var/log/mail/*
#该文件或目录记录邮件的来往信息,其实主要记录SMTP和POP3(IMAP)协议提供者所产生的信息。
#
#/var/log/messages
#该文件几乎记录了系统发生的所有错误信息(或者是重要的信息),所以这个文件相当重要;如果系统发生莫名的错误时,这个文件是必查的日志文件之一。
#/var/log/secure
#基本上,只要牵扯到需要输入帐号密码的软件,当登入时(不管登入正确与否)都会被记录到这个文件中。包括系统的login程序、图形界面登入所使用的gdm程序、su、sudo等程序,还有网络联机的ssh、telnet等程序,登入信息都会被记载在这里。
#
#/var/log/wtmp,/var/log/faillog
#这两个文件可以记录正确登入系统者的账户信息(wtmp)与错误登入时所使用的账户信息(faillog)。这个文件对追踪一般帐号者的使用行为很有帮助。
#
#/var/log/httpd/,/var/log/news/,/var/log/samba/*
#不同的网络服务会使用它自己的日志文件案来记载它们自己产生的各项信息。上述的目录内则是个别服务所制定的日志文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值