用.NET Core开发也有一段时间了,可是因为工做缘由一直都是在Windows系统上进行的开发,一直想学习Linux而后把.NET Core开发的程序跑在Linux上,而后把心得体会记录一下发布再博客园,奈何拖延症泛滥,因此只写过一篇《CentOS开发ASP.NET Core入门教程》以后就继续征战Windows了!做为新年Flag之一就是学习Docker,K8S,虽然windows系统也能进行开发,可是毕竟Linux才是正途,所以这两天特意学习了一下Linux系统,并整理成这篇学习笔记,但愿对.NET Core开发者学习Linux有所帮助。html
做者:依乐祝
原文连接:http://www.javashuo.com/article/p-puoyvhdv-bb.htmllinux
另外若是你是一名.NET Core初学者,能够看一下个人《.NET Core实战项目之CMS 第一章 入门篇-开篇及整体规划 也能够加入.NET Core实战项目交流群637326624跟你们一块儿交流,共同进步!下面开始正文吧!内容有点长,但愿你有耐心看完shell
终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登录就是经过不一样的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登陆。在物理机系统上你能够经过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换。windows
一般在图形界面中对实际体验带来差别的不是不一样发行版的各类终端模拟器,而是这个 Shell(壳)。有壳就有核,这里的核就是指 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器),相似于 DOS 下的 command(命令行)和后来的 cmd.exe 。普通意义上的 Shell 就是能够接受用户输入命令的程序。它之因此被称做 Shell 是由于它隐藏了操做系统底层的细节。一样的 UNIX/Linux 下的图形用户界面 GNOME 和 KDE,有时也被叫作“虚拟 shell”或“图形 shell”。less
1) 重要快捷键:
[Tab]
使用Tab键来进行命令补全,Tab键通常是在字母Q旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时能够只输入它的开头的一部分,而后按下Tab键就能够获得提示或者帮助完成:
[Ctrl+c]
想一想你有没有遇到过这种状况,当你在 Linux 命令行中无心输入了一个不知道的命令,或者错误地使用了一个命令,致使在终端里出现了你没法预料的状况,好比,屏幕上只有光标在闪烁却没法继续输入命令,或者不停地输出一大堆你不想要的结果。你想要当即中止并恢复到你可控的状态,那该怎么办呢?这时候你就可使用Ctrl+c键来强行终止当前程序(你能够放心它并不会使终端退出)。
其余一些经常使用快捷键
按键 做用
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,至关于Home键
Ctrl+e 将光标移至输入行末,至关于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动运维
2) 学会利用历史输入命令
很简单,你可使用键盘上的方向上键↑,恢复你以前输入过的命令,你一试便知。编辑器
3) 学会使用通配符
通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(好比文件名、参数名)。当查找文件夹时,可使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,经常使用通配符代替一个或多个真正字符。
先使用 touch 命令建立 2 个文件,后缀都为 txt:工具
$ touch adsfasd.txt wergjlkas.txt
$ ls *.txt
在建立文件的时候,若是须要一次性建立多个文件,好比:“love_1_linux.txt,love_2_linux.txt,... love_10_linux.txt”。在 Linux 中十分方便:
$ touch love_{1..10}_linux.txt
Shell 经常使用通配符:
字符 含义学习
请打开终端,输入命令:
$ who am i
或者
$ who mom likes
who 命令其它经常使用参数
参数 说明
-a 打印能打印的所有
-d 打印死掉的进程
-m 同am i,mom likes
-q 打印当前登陆用户数及用户名
-u 打印当前登陆用户登陆信息
-r 打印运行等级优化
在 Linux 系统里, root 帐户拥有整个系统至高无上的权利,好比 新建/添加 用户。
su,su- 与 sudo
su
如今咱们新建一个叫 yilezhu 的用户:
$ sudo adduser yilezhu
这个命令不但能够添加用户到系统,同时也会默认为新用户建立 home 目录:
$ ls /home
如今你已经建立好一个用户,而且你可使用你建立的用户登陆了,使用以下命令切换登陆用户:
$ su -l yilezhu
退出当前用户跟退出终端同样可使用 exit 命令或者使用快捷键 Ctrl+d。
在 Linux 里面每一个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,就跟家的形式差很少,你的兄弟姐妹(不一样的用户)属于同一个家(用户组),大家能够共同拥有这个家(共享资源),爸妈对待大家都同样(共享权限),你偶尔写写日记,其余人未经容许不能查看(私有资源和权限)。固然一个用户是能够属于多个用户组的,正如你既属于家庭,又属于学校或公司。
方法一:使用 groups 命令
$ groups yilezhu
能够查看下 /etc/sudoers.d/yilezhu 文件,咱们在 /etc/sudoers.d 目录下建立了这个文件,从而给 yilezhu 用户赋予了 sudo 权限:
$sudo cat /etc/sudoers.d/yilezhu
方法二:查看 /etc/group 文件
$ cat /etc/group | sort
这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出
没找到,不要紧,你可使用命令过滤掉一些你不想看到的结果:
$ cat /etc/group | grep -E "yilezhu"
/etc/group 的内容包括用户组(Group)、用户组口令、GID 及该用户组所包含的用户(User),每一个用户组一条记录。格式以下:
group_name:password:GID:user_list
你看到上面的 password 字段为一个 x 并非说密码就是它,只是表示密码不可见而已。
将其它用户加入 sudo 用户组
默认状况下新建立的用户是不具备 root 权限的,也不在 sudo 用户组,可让其加入 sudo 用户组从而获取 root 权限:
$ su -l yilezhu
$ sudo ls
会提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用户组中,至于 sudoers 文件(/etc/sudoers)你如今最好不要动它,操做不慎会致使比较麻烦的后果。
使用 usermod 命令能够为用户添加用户组,一样使用该命令你必需有 root 权限,你能够直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。
这里我用 root 用户执行 sudo 命令将 yilezhu 添加到 sudo 用户组,让它也可使用 sudo 命令得到 root 权限:
$ su root # 此处须要输入root用户密码
$ groups yilezhu
$ sudo usermod -G sudo yilezhu
$ groups yilezhu
而后你再切换回 yilezhu 用户,如今就可使用 sudo 获取 root 权限了。
删除用户是很简单的事:
$ sudo userdel -rf yilezhu
adduser 和 useradd 的区别是什么?
答:useradd 只建立用户,建立完了用 passwd yilezhu 去设置新用户的密码。adduser 会建立用户,建立目录,建立密码(提示你设置),作这一系列的操做。其实 useradd、userdel 这类操做更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,须要你输入、肯定等一系列操做
使用较长格式列出文件:
$ ls -l
显示除了 .(当前目录)和 ..(上一级目录)以外的全部文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件)。
$ ls -A
查看某一个目录的完整属性,而不是显示目录里面的文件属性:
$ ls -dl <目录名>
显示全部文件大小,并以普通人类能看懂的方式呈现:
$ ls -AsSh
其中小 s 为显示文件大小,大 S 为按文件大小排序,若须要知道如何按其它方式排序,请使用“man”命令查询。
假设目前是 yilezhu 用户登陆,新建一个文件,命名为 “ huawei ”:
$ touch huawei
如今,换回到 root 用户身份,使用如下命令变动文件全部者为 root :
$ cd /home/yilezhu
$ ls huawei
$ sudo chown root huawei
3.3 修改文件权限
若是你有一个本身的文件不想被其余用户读、写、执行,那么就须要对文件的权限作修改,这里有两种方式:
方式一:二进制数字表示
每一个文件的三组权限(拥有者,所属用户组,其余用户,记住这个顺序是必定的)对应一个 " rwx ",也就是一个 “ 7 ” ,因此若是我要将文件“ huawei ”的权限改成只有我本身能够用那么就这样:
为了演示,我先在文件里加点内容:
$ echo "echo "hello root"" > huawei
而后修改权限:
$ chmod 700 huawei
方式二:加减赋值操做
完成上述相同的效果,你能够:
$ chmod go-rw huawei
g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增长和去掉相应的权限。
FHS 定义了两层规范,第一层是, / 下面的各个目录应该要放什么文件数据,例如 /etc 应该放置设置文件,/bin 与 /sbin 则应该放置可执行文件等等。
第二层则是针对 /usr 及 /var 这两个目录的子目录来定义。例如 /var/log 放置系统登陆文件,/usr/share 放置共享数据等等。
sudo apt-get update
sudo apt-get install tree
列出全部文件
$ tree /
路径
使用 cd 命令能够切换目录,在 Linux 里面使用 . 表示当前目录,.. 表示上一级目录(注意,咱们上一节介绍过的,以 . 开头的文件都是隐藏文件,因此这两个目录必然也是隐藏的,你可使用 ls -a 命令查看隐藏文件), - 表示上一次所在目录,~ 一般表示当前用户的 home 目录。使用 pwd 命令能够获取当前所在路径(绝对路径)。
进入上一级目录:
$ cd ..
进入你的 home 目录:
$ cd ~
或者 cd /home/ <你的用户名>
使用 pwd 获取当前路径:
$ pwd
绝对路径
关于绝对路径,简单地说就是以根" / "目录为起点的完整路径,以你所要到的目录为终点,表现形式如:
/usr/local/bin,表示根目录下的 usr 目录中的 local 目录中的 bin 目录。
相对路径
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点,表现形式如:
usr/local/bin (这里假设你当前目录为根目录)。你可能注意到,咱们表示相对路径实际并无加上表示当前目录的那个 . ,而是直接以目录名开头,由于这个 usr 目录为 / 目录下的子目录,是能够省略这个 . 的(之后会讲到一个相似不能省略的状况);若是是当前目录的上一级目录,则须要使用 .. ,好比你当前目录为 home 目录,根目录就应该表示为 ../../ ,表示上一级目录( home 目录)的上一级目录( / 目录)。
下面咱们以你的 home目录为起点,分别以绝对路径和相对路径的方式进入 /usr/local/bin 目录:
绝对路径
$ cd /usr/local/bin
相对路径
$ cd ../../usr/local/bin
提示:在进行目录切换的过程当中请多使用 Tab 键自动补全,可避免输入错误,连续按两次 Tab 能够显示所有候选结果。
新建空白文件
使用 touch 命令建立空白文件,关于 touch 命令,其主要做用是来更改已有文件的时间戳的(好比,最近访问时间,最近修改时间),但其在不加任何参数的状况下,只指定一个文件名,则能够建立一个指定文件名的空白文件(不会覆盖已有同名文件),固然你也能够同时指定该文件的时间戳
新建目录
使用 mkdir(make directories)命令能够建立一个空目录,也可同时指定建立目录的权限属性。
建立名为“ mydir ”的空目录:
$ mkdir mydir
使用 -p 参数,同时建立父目录(若是不存在该父目录),以下咱们同时建立一个多级目录(这在安装软件、配置安装路径时很是有用):
$ mkdir -p father/son/grandson
复制文件
使用 cp(copy)命令复制一个文件到指定目录。
将以前建立的“ test ”文件复制到“ /home/root/father/son/grandson ”目录中:
$ cp test father/son/grandson
复制目录
若是直接使用 cp 命令复制一个目录的话,会出现以下错误:
要成功复制目录须要加上 -r 或者 -R 参数,表示递归复制,就是说有点“株连九族”的意思:
$ cp -r father family
删除文件
使用 rm(remove files or directories)命令删除一个文件:
$ rm test
有时候你会遇到想要删除一些为只读权限的文件,直接使用 rm 删除会显示一个提示,以下:
你若是想忽略这提示,直接删除文件,可使用 -f 参数强制删除:
$ rm -f test
删除目录
跟复制目录同样,要删除一个目录,也须要加上 -r 或 -R 参数:
$ rm -r family
移动文件
使用 mv(move or rename files)命令移动文件(剪切)。将文件“ file1 ”移动到 Documents 目录:
mv 源目录文件 目的目录:
$ mkdir Documents
$ mv file1 Documents
重命名文件
将文件“ file1 ”重命名为“ myfile ”:
mv 旧的文件名 新的文件名:
$ mv file1 myfile
使用 cat,tac 和 nl 命令查看文件
前两个命令都是用来打印文件内容到标准输出(终端),其中 cat 为正序显示,tac 为倒序显示。
好比咱们要查看以前从 /etc 目录下拷贝来的 passwd 文件:
$ cat passwd
能够加上 -n 参数显示行号:
$ cat -n passwd
nl 命令,添加行号并打印,这是个比 cat -n 更专业的行号打印命令。
这里简单列举它的经常使用的几个参数:
-b : 指定添加行号的方式,主要有两种:
-b a:表示不管是否为空行,一样列出行号("cat -n"就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)
使用 more 和 less 命令分页查看文件
若是说上面的 cat 是用来快速查看一个文件的内容的,那么这个 more 和 less 就是天生用来"阅读"一个文件的内容的,好比说 man 手册内部就是使用的 less 来显示内容。其中 more 命令比较简单,只能向一个方向滚动,而 less 为基于 more 和 vi (一个强大的编辑器,咱们有单独的课程来让你学习)开发,功能更强大
使用 head 和 tail 命令查看文件
$ tail /etc/passwd
甚至更直接的只看一行, 加上 -n 参数,后面紧跟行数:
$ tail -n 1 /etc/passwd
前面我提到过,在 Linux 中文件的类型不是根据文件后缀来判断的,咱们一般使用 file 命令查看文件的类型:
$ file /bin/ls
与搜索相关的命令经常使用的有 whereis,which,find 和 locate 。
whereis 简单快速
$whereis who
locate 快而全
它能够用来查找指定目录下的不一样文件类型,如查找 /etc 下全部以 sh 开头的文件:
$ locate /etc/sh
注意,它不仅是在 /etc 目录下查找,还会自动递归子目录进行查找。
查找 /usr/share/ 下全部 jpg 文件:
$ locate /usr/share/*.jpg
注意要添加 * 号前面的反斜杠转义,不然会没法找到。
若是想只统计数目能够加上 -c 参数,-i 参数能够忽略大小写进行查找,whereis 的 -b、-m、-s 一样可使用。
which 小而精
which 自己是 Shell 内建的一个命令,咱们一般使用 which 来肯定是否安装了某个指定的软件,由于它只从 PATH 环境变量指定的路径中去搜索命令:
$ which man
find 精而细
find 应该是这几个命令中最强大的了
这条命令表示去 /etc/ 目录下面 ,搜索名字叫作 interfaces 的文件或者目录。这是 find 命令最多见的格式,千万记住 find 的第一个参数是要搜索的地方:
$ sudo find /etc/ -name interfaces
意 find 命令的路径是做为第一个参数的, 基本命令格式为 find [path] [option] [action] 。
与时间相关的命令参数:
参数 说明
-atime 最后访问时间
-ctime 最后修改文件内容的时间
-mtime 最后修改文件属性的时间
下面以 -mtime 参数举例:
-mtime n:n 为数字,表示为在 n 天以前的“一天以内”修改过的文件
-mtime +n:列出在 n 天以前(不包含 n 天自己)被修改过的文件
-mtime -n:列出在 n 天以内(包含 n 天自己)被修改过的文件
-newer file:file 为一个已存在的文件,列出比 file 还要新的文件名
列出 home 目录中,当天(24 小时以内)有改动的文件:
$ find ~ -mtime 0
列出用户家目录下比 Code 文件夹新的文件:
$ find ~ -newer /home/root/Code
文件后缀名 说明
.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 程序压缩的文件
使用 zip 打包文件夹:
$ zip -r -q -o yilezhu.zip /home/root
$ du -h yilezhu.zip
$ file yilezhu.zip
上面命令将目录 /home/root 打包成一个文件,并查看了打包后文件的大小和类型。第一行命令中,-r 参数表示递归打包包含子目录的所有内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小(后面会具体说明该命令)。
设置压缩级别为 9 和 1(9 最大,1 最小),从新打包:
$ zip -r -9 -q -o yilezhu_9.zip /home/root -x ~/.zip
$ zip -r -1 -q -o yilezhu_1.zip /home/root -x ~/.zip
这里添加了一个参数用于设置压缩级别 -[1-9],1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除咱们上一次建立的 zip 文件,不然又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,不然不起做用。
咱们再用 du 命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小:
$ du -h -d 0 *.zip ~ | sort
经过 man 手册可知:
h, --human-readable(顾名思义,你能够试试不加的状况)
d, --max-depth(所查看文件的深度)
将 yilezhu.zip 解压到当前目录:
$ unzip yilezhu.zip
使用安静模式,将文件解压到指定目录:
$ unzip -q yilezhu.zip -d ziptest
上述指定目录不存在,将会自动建立。若是你不想解压只想查看压缩包的内容你可使用 -l 参数:
$ unzip -l yilezhu.zip
使用 -O(英文字母,大写 o)参数指定编码类型:
unzip -O GBK 中文压缩文件.zip(解决中文编码问题)
rar 也是 Windows 上经常使用的一种压缩文件格式,在 Linux 上可使用 rar 和 unrar 工具分别建立和解压 rar 压缩包。
安装 rar 和 unrar 工具:
$ sudo apt-get update
$ sudo apt-get install rar unrar
从指定文件或目录建立压缩包或添加文件到压缩包:
$ rm *.zip
$ rar a yilezhu.rar .
上面的命令使用 a 参数添加一个目录 ~ 到一个归档文件中,若是该文件不存在就会自动建立。
注意:rar 的命令参数没有 -,若是加上会报错。
从指定压缩包文件中删除某个文件:
$ rar d yilezhu.rar .zshrc
查看不解压文件:
$ rar l yilezhu.rar
使用 unrar 解压 rar 文件
全路径解压:
$ unrar x yilezhu.rar
去掉路径解压:
$ mkdir tmp
$ unrar e yilezhu.rar tmp/
在 Linux 上面更经常使用的是 tar 工具,tar 本来只是一个打包工具,只是同时仍是实现了对 7z、gzip、xz、bzip2 等工具的支持,这些压缩工具自己只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,因此咱们也无需再单独去学习其余几个工具,tar 的解压和压缩都是同一个命令,只需参数不一样,使用比较方便。
下面先掌握 tar 命令一些基本的使用方式,即不进行压缩只是进行打包(建立归档文件)和解包的操做。
建立一个 tar 包:
$ tar -cf yilezhu.tar ~
上面命令中,-c 表示建立一个 tar 包文件,-f 用于指定建立的文件名,注意文件名必须紧跟在 -f 参数以后,好比不能写成 tar -fc yilezhu.tar,能够写成 tar -f yilezhu.tar -c ~。你还能够加上 -v 参数以可视的的方式输出打包的文件。上面会自动去掉表示绝对路径的 /,你也可使用 -P 保留绝对路径符。
解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):
$ mkdir tardir
$ tar -xf yilezhu.tar -C tardir
只查看不解包文件 -t 参数:
$ tar -tf yilezhu.tar
保留文件属性和跟随连接(符号连接或软连接),有时候咱们使用 tar 备份文件当你在其余主机还原时但愿保留文件的属性(-p 参数)和备份连接指向的源文件而不是连接自己(-h 参数):
$ tar -cphf etc.tar /etc
对于建立不一样的压缩格式的文件,对于 tar 来讲是至关简单的,须要的只是换一个参数,这里咱们就以使用 gzip 工具建立 *.tar.gz 文件为例来讲明。
咱们只须要在建立 tar 文件的基础上添加 -z 参数,使用 gzip 来压缩文件:
$ tar -czf yilezhu.tar.gz ~
解压 .tar.gz 文件:
$ tar -xzf yilezhu.tar.gz
如今咱们要使用其它的压缩工具建立或解压相应文件只须要更改一个参数便可:
压缩文件格式 参数
.tar.gz -z
.tar.xz -J
tar.bz2 -j
其实今天总结的内容挺多的,主要是由于对于我这个.NET Core开发者来讲Linux是一个全新的领域,因此感受须要记忆的内容太多太多了!而做为开发者,虽然不须要掌握Linux的核心优化等等内容,可是基本的操做仍是须要掌握的,毕竟公司里面基本是开发运维的工做一肩挑的,因此,Linux我来了! 后续在.net core程序进行在Linux系统上部署的话可能还须要涉及一些命令,这个后期用到了在进行记录吧!今天就先到这里了!感谢你们的阅读!