From 909e0b39653de8a6bee6f9b36f8ef65673bb841d Mon Sep 17 00:00:00 2001 From: ZhanTianYou Date: Tue, 18 Sep 2018 15:50:49 +0800 Subject: [PATCH] add linux --- "Linux/001-\350\256\244\350\257\206Linux.md" | 149 +++ ...57\345\242\203\351\205\215\347\275\256.md" | 220 +++++ ...07\344\273\266\346\235\203\351\231\220.md" | 57 ++ ...67\345\217\226\345\270\256\345\212\251.md" | 74 ++ ...70\347\224\250\345\221\275\344\273\244.md" | 550 +++++++++++ Linux/006-vim.md | 110 +++ ...41\345\231\250\346\220\255\345\273\272.md" | 106 ++ ...8-\345\214\205\347\256\241\347\220\206.md" | 70 ++ Linux/009-Shell.md | 925 ++++++++++++++++++ Linux/010-make.md | 230 +++++ ...46\344\271\240\350\265\204\346\226\231.md" | 8 + ...21\351\227\256\350\256\260\345\275\225.md" | 57 ++ Linux/README.md | 0 .../0ab2d71b-ddd3-471d-9133-5b1ec930be08.jpg | Bin 0 -> 71732 bytes .../1a98b4de-a72b-453c-b540-6fd92daa640b.jpg | Bin 0 -> 23538 bytes .../4ca9cec4-5bab-4209-ad14-ba28469df87d.jpg | Bin 0 -> 53414 bytes .../e4099b48-8722-4998-9dd7-0ce9fa824b35.jpg | Bin 0 -> 26041 bytes ...00\345\217\221\347\216\257\345\242\203.md" | 115 +++ README.md | 17 + 19 files changed, 2688 insertions(+) create mode 100644 "Linux/001-\350\256\244\350\257\206Linux.md" create mode 100644 "Linux/002-ubuntu\345\256\211\350\243\205\344\270\216\347\216\257\345\242\203\351\205\215\347\275\256.md" create mode 100644 "Linux/003-Linux\346\226\207\344\273\266\347\263\273\347\273\237\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" create mode 100644 "Linux/004-Linux\345\221\275\344\273\244\350\216\267\345\217\226\345\270\256\345\212\251.md" create mode 100644 "Linux/005-Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" create mode 100644 Linux/006-vim.md create mode 100644 "Linux/007-Linux\345\270\270\347\224\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272.md" create mode 100644 "Linux/008-\345\214\205\347\256\241\347\220\206.md" create mode 100644 Linux/009-Shell.md create mode 100644 Linux/010-make.md create mode 100644 "Linux/Linux\345\255\246\344\271\240\350\265\204\346\226\231.md" create mode 100644 "Linux/Linux\347\226\221\351\227\256\350\256\260\345\275\225.md" delete mode 100644 Linux/README.md create mode 100644 Linux/index_files/0ab2d71b-ddd3-471d-9133-5b1ec930be08.jpg create mode 100644 Linux/index_files/1a98b4de-a72b-453c-b540-6fd92daa640b.jpg create mode 100644 Linux/index_files/4ca9cec4-5bab-4209-ad14-ba28469df87d.jpg create mode 100644 Linux/index_files/e4099b48-8722-4998-9dd7-0ce9fa824b35.jpg create mode 100644 "Linux/ubuntu\344\270\213\346\220\255\345\273\272Android\345\274\200\345\217\221\347\216\257\345\242\203.md" diff --git "a/Linux/001-\350\256\244\350\257\206Linux.md" "b/Linux/001-\350\256\244\350\257\206Linux.md" new file mode 100644 index 00000000..22fec729 --- /dev/null +++ "b/Linux/001-\350\256\244\350\257\206Linux.md" @@ -0,0 +1,149 @@ +--- +## 1 Linux发展 + +0. Unix宣布私有化 +1. Andrew S. Tanenbau教授参考UNIX设计开发了Minix +2. Linus Torvalds 根据Minix开发了Linux根发布 +3. 用芬兰吉祥物**企鹅**作为Linux标志 + +--- +## 2 版本 + +Linux版本分为内核版本和发行版本 + +- Linux内核版本是Linux的核心版本,是官方的发布的,官网为:`http://www.kernel.org/` +- Linux发行版本是由各个厂商基于内核开发并发布的,主要包括: + - redhat 服务器,没有图形界面 + - centOS 和redhat一致,完全免费 + - ubuntu 有图形界面,个人版本 + - fedora 有redhat公司开发,个人版本 + +--- +## 3 开源软件 + +开放源代码的软件,比如 + +- PHP +- python +- apache +- nginx +- MySQL +- Ruby +- MongoDB + +--- +## 4 Linux的应用领域 + +### 企业服务器 + +www.netcraft.com 网站可以查看目前服务器的市场占比 + +### 嵌入式开发 + +- Android就是基于Linux +- 机顶盒 + +--- +## 5 Linux与Windows的不同 + +- Linux严格区分大小写 +- Linux中所有内容以文件的形式保存,包括硬件 +- Linux不靠扩展名区分文件类型,但是有一些约定俗成的扩展名,可以帮助管理员更好的区分文件类型,让Linux更高效率的处理文件,比如下面扩展名(需要注意的是,这些扩展名不是必须的) + - 压缩包:`*.gz、*.bz2、*.tar.bz2、*.tgz`等 + - 二进制软件包:`*.rpm` + - 网页文件:`*.html、*.php` + - 脚本文件:`*.sh` + - 配置文件:`*.conf` + +--- +## 6 字符界面的优势 + +一般用于企业服务器的Linux版本不会有推行界面,只有字符界面,为什么呢? + +1. 字符界面占用系统资源更少 +2. 安全性更高,做的事越少,犯错的几率也就越小 + + +--- +## 7 使用虚拟机安装Linux + +对于初学者推荐优先使用虚拟机模拟Linux系统,因为Linux相对于Windows上手难度较高。 + +虚拟机推荐: + +- VMware +- VirtualBox + +**安装时的网卡设置:** + + - 桥接网卡 虚拟机与真机通信利用真实的本地网卡,配置简单,虚拟机会占用真实网段的IP + - NAT 虚拟机上网,不能跟其他真机通讯 + - HOST-ONLY 不能上网,不能通讯。 + +**技巧** +- 创建快照,保存状态,方便恢复 +- 克隆系统 + +--- +## 8 系统分区 + +- 主分区:最多四个 +- 扩展分区 + - 最多只能有一个 + - 主分区+扩展分区最多能有4个 + - 不能写入数据,只能包含逻辑分区 +- 逻辑分区 + +**格式化:** + +- 格式化不是为了清空数据,而是为了写入文件系统。 + +格式化做的事: + +- 把磁盘分成一个一个的数据块(block),默认为`4kb` +- 文件列表 + + + +--- +## 9 Linux系统各文件夹作用 + +``` +/bin 二进制可执行命令 + +/dev 设备特殊文件 + +/etc 系统管理和配置文件 + +/etc/rc.d 启动的配置文件和脚本 + +/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 + +/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 + +/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 + +/tmp 公用的临时文件存储点 + +/root 系统管理员的主目录(特权阶级) + +/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。 + +/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里 + +/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 + +/var 某些大文件的溢出区,比方说各种服务的日志文件 + +/usr 即unix system resource最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含: + |---/usr/x11r6 存放x window的目录 + |---/usr/bin 众多的应用程序 + |---/usr/sbin 超级用户的一些管理程序 + |---/usr/doc linux文档 + |---/usr/include linux下开发和编译应用程序所需要的头文件 + |---/usr/lib 常用的动态链接库和软件包的配置文件 + |---/usr/man 帮助文档 + |---/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 + |---/usr/local/bin 本地增加的命令 + |---/usr/local/lib 本地增加的库 +``` \ No newline at end of file diff --git "a/Linux/002-ubuntu\345\256\211\350\243\205\344\270\216\347\216\257\345\242\203\351\205\215\347\275\256.md" "b/Linux/002-ubuntu\345\256\211\350\243\205\344\270\216\347\216\257\345\242\203\351\205\215\347\275\256.md" new file mode 100644 index 00000000..07e24fbc --- /dev/null +++ "b/Linux/002-ubuntu\345\256\211\350\243\205\344\270\216\347\216\257\345\242\203\351\205\215\347\275\256.md" @@ -0,0 +1,220 @@ +## 1 安装 ubuntu(双系统) + +预备设置:windiws关闭快速启动,bios关闭安全启动。 + +1. U盘启动 +2. uefi警告时选择`后退` +3. 分区为: + - `/Boot`(引导分区) ,1000M ,主分区 + - `/`(根分区) ,30760M ,这里不要设置的太小,毕竟可能安装许多软件 + - 交换分区,8000M。 + - `/home`(用户目录), 剩余所有容量 +4. 安装完毕 +5. 进入windows10,使用easyBCD添加引导项:`grub2-自动选择` + + +--- +## 2 ubuntu环境搭建与相关配置 + +### install unity tools + +``` + sudo add-apt-repository ppa:freyja-dev/unity-tweak-tool-daily + sudo apt-get update + sudo apt-get install unity-tweak-tool +``` + +### install aptitude + +aptitude工具是基于apt的一款安装工具,优点是可以自动解决安装和卸载时候的依赖关系。 + +``` + sudo apt install aptitude +``` + +### 安装工具 + +``` + sudo aptitude install shutter//安装截屏软件shutter + sudo apt install docky//docky工具栏:使用 apt/apt-get 可能需要重启才能生效,用aptitude安装后可以直接使用 +``` + +### 安装主题 + +``` + //主题 + sudo add-apt-repository ppa:noobslab/themes + sudo apt-get update + sudo apt-get install flatabulous-theme + //配套图标 + sudo add-apt-repository ppa:noobslab/icons + sudo apt-get update + sudo apt-get install ultra-flat-icons +``` + +### install jdk + +``` + //首先安装软件包管理工具 + sudo apt-get install python-software-properties + sudo apt-get install software-properties-common + //Oracle + sudo add-apt-repository ppa:webupd8team/java + sudo apt-get update + sudo apt-get install oracle-java8-installer + //open jdk + sudo apt-get update + sudo apt-get install openjdk-8-jdk +``` + +### wiznote + +``` + sudo add-apt-repository ppa:wiznote-team //添加官方源 + sudo apt-get update //更新源 + sudo apt-get install wiznote //安装为知笔记 +``` + +### oh-my-zsh + +``` + sudo apt-get install zsh +``` + +### vim + +``` +sudo apt-get install vim-gtk +vim /etc/vim/vimrc #编辑配置文件,加入以下配置 + + set nu + set tabstop + set cursorline + set ruler +``` + +### dos2unix + +``` + sudo apt-get install dos2unix +``` + +### Tomcat + +从官网下载tomcat,然后解压即可,远程连接时要开放对应的端口。 + +```shell +# 创建tomcat存放目录,比如 /usr/local 目录下 +cd /usr/local +mkdir tomcat + +# 下载tomcat +wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.31/bin/apache-tomcat-8.5.31.tar.gz + +# 解压 +tar -xvf apache-tomcat-8.5.31.tar.gz + +# 启动tomcat(记得开放8080端口) +./startup.sh +./shutdown.sh +``` + + +### MySQL + +``` +apt-get update +apt-get install mysql-server mysql-client +测试是否安装成功:netstat -tap | grep mysql + +启动MySQL服务:service mysql start +停止MySQL服务:service mysql stop +服务状态:service mysql status +修改 MySQL 的管理员密码:mysqladmin -u root password newpassword + +正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问(通过netstat可以查看到)取消本地监需要修改 my.cnf 文件: + + 1 vim /etc/mysql/my.cnf,把 bind-address = 127.0.0.1注释掉,如果配置文件中没有bind-address = 127.0.0.1,则添加下面内容: + [mysqld] + bind-address = 0.0.0.0 + 2 重启MySQL服务器 + 3 重新登录 mysql -uroot -p + 4 在mysql命令行中运行下面两个命令 + grant all privileges on *.* to 'root'@'%' identified by '远程登录的密码'; + flush privileges; + 5 检查MySQL服务器占用端口 netstat -nlt|grep 3306 + +数据库存放目录: /var/lib/mysql/ +相关配置文件存放目录:/usr/share/mysql +相关命令存放目录:/usr/bin(mysqladmin mysqldump等命令 +启动脚步存放目录:/etc/rc.d/init.d/ +``` + +sql授权说明 + +语法:`grant 权限1,权限2, ... 权限n on 数据库名称.表名称 to 用户名@用户地址 identified by '连接口令';` + +- `权限1,权限2,... 权限n` 代表 `select、insert、update、delete、create、drop、index、alter、grant、references、reload、shutdown、process、file` 等14个权限。 +- 当`权限1,权限2,... 权限n` 被 `all privileges` 或者 `all` 代替时,表示赋予用户全部权限。 +- 当 `数据库名称.表名称` 被 `*.*` 代替时,表示赋予用户操作服务器上所有数据库所有表的权限。 +- 用户地址可以是localhost,也可以是IP地址、机器名和域名。也可以用 `'%'` 表示从任何地址连接。 +- '连接口令',远程连接时使用的密码,不能为空,否则创建失败。 + +>privileges 即特权的意思。 + +### Nginx + + +```shell +# 先下载安装 nginx 和 nginx-rtmp 编译依赖工具 +sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev + +# 下载 nginx 和 nginx-rtmp源码(wget是一个从网络上自动下载文件的自由工具) +wget http://nginx.org/download/nginx-1.7.5.tar.gz + +# 解压 nginx +tar -zxvf nginx-1.7.5.tar.gz + +# 切换到 nginx-目录 +cd nginx-1.7.5 + +# 编译安装nginx +make +sudo make install + +# 安装nginx init脚本 +sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx +sudo chmod +x /etc/init.d/nginx + +# 开启启动nginx +sudo update-rc.d nginx defaults + +# 启动和停止nginx 服务,生成配置文件 +sudo service nginx start +sudo service nginx stop +sudo service nginx restart +``` + + +### 开放端口号 + +``` +查看哪些端口被打开 netstat -anp +关闭端口号:iptables -I INPUT -p tcp --drop 端口号 -j DROP +  iptables -I OUTPUT -p tcp --dport 端口号 -j DROP + +打开端口号:iptables -I INPUT -ptcp --dport 端口号 -j ACCEPT +将修改永久保存到防火墙中:iptables-save + +关闭/打开防火墙(需要重启系统) +开启: chkconfig iptables on +关闭: chkconfig iptables off +``` + +--- +## 引用 + +- [Ubuntu 16.04安装Java JDK](http://topspeedsnail.com/ubuntu16-install-java-jdk/) +- [Windows10+Ubuntu双系统安装[多图]](http://www.jianshu.com/p/2eebd6ad284d) +- [Ubuntu 16.04主题美化和软件推荐(oh-my-zsh)](http://www.linuxidc.com/Linux/2016-09/135165p2.htm) +- [Ubuntu美化系列文章](http://www.jianshu.com/u/b3288a70ead9) diff --git "a/Linux/003-Linux\346\226\207\344\273\266\347\263\273\347\273\237\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" "b/Linux/003-Linux\346\226\207\344\273\266\347\263\273\347\273\237\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" new file mode 100644 index 00000000..be31a69f --- /dev/null +++ "b/Linux/003-Linux\346\226\207\344\273\266\347\263\273\347\273\237\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" @@ -0,0 +1,57 @@ +# Linux文件系统与文件权限 + +--- +## 1 Linux文件系统 + + +**Unix Like**的文件系统包括两个概念:根文件系统和存储类文件系统 + +**根文件系统**(rootfs:`root file system`),其并不是用于存储实际的文件 +有如下特点: +- **文件**不仅仅是硬盘上的数据,还包括任何设备资源,**Unix Like**系统中所有的硬件都被看做式文件,文件是内核范畴的概念,内存、网络、U盘、甚至CPU都被内核抽象为文件,为了区别一般意义上的文件,内核级别的文件称为**设备文件**或者**设备虚拟文件**,这些设备文件都可以在rootfs中被看到,表面上就像windows系统中的磁盘文件一样。 +- 并不是所有的命令或者文件都对应磁盘上的存储空间,比如`sys,proc,dev`三个目录对应的就不是存储空间,而是设备文件。这三个目录中的内容由内核及相应的驱动程序维护。 +- **存储类文件系统**不能和rootfs并列的存在,而只能挂着到rootfs下的一个子目录上 +- **存储类文件系统**内部等同于windows中的文件系统。 + +**Unix Like**系统存储类文件系统⽬录结构,没有盘符这个概念,只有⼀个根⽬录`/`,所有⽂件都在它下⾯: + +![](index_files/e4099b48-8722-4998-9dd7-0ce9fa824b35.jpg) + +### 用户目录 + +位于`/home/user`,称之为⽤户⼯作⽬录或家⽬录 + +--- +## 2 文件权限 + +⽂件权限就是⽂件的访问控制权限,即哪些⽤户和组群可以访问⽂件以及可以执⾏什么样 的操作。 Unix/Linux系统是⼀个典型的多⽤户系统,不同的⽤户处于不同的地位,对⽂件和⽬录有 不同的访问权限。为了保护系统的安全性,Unix/Linux系统除了对⽤户权限作了严格的界 定外,还在⽤户身份认证、访问控制、传输安全、⽂件读写权限等⽅⾯作了周密的控制。在 Unix/Linux中的每⼀个⽂件或⽬录都包含有访问权限,这些访问权限决定了谁能访问和 如何访问这些⽂件和⽬录。 + +### 访问⽤户 + +通过设定权限可以从以下三种访问⽅式限制访问权限: + +- 只允许⽤户⾃⼰访问(所有者) 所有者就是创建⽂件的⽤户,⽤户是所有⽤户所创 建⽂件的所有者,⽤户可以允许所在的⽤户组能访问⽤户的⽂件。 +- 允许⼀个预先指定的⽤户组中的⽤户访问(⽤户组) ⽤户都组合成⽤户组,例如, 某⼀类或某⼀项⽬中的所有⽤户都能够被系统管理员归为⼀个⽤户组,⼀个⽤户能够 授予所在⽤户组的其他成员的⽂件访问权限。 +- 允许系统中的任何⽤户访问(其他⽤户) ⽤户也将⾃⼰的⽂件向系统内的所有⽤户 开放,在这种情况下,系统内的所有⽤户都能够访问⽤户的⽬录或⽂件。在这种意义 上,系统内的其他所有⽤户就是 other ⽤户类 + +### 访问权限 + +⽤户能够控制⼀个给定的⽂件或⽬录的访问程度,⼀个⽂件或⽬录可能有读、写及执⾏权限: + +- 读权限(r) 对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览⽬录的 权限。 +- 写权限(w) 对⽂件⽽⾔,具有新增、修改⽂件内容的权限;对⽬录来说,具有删 除、移动⽬录内⽂件的权限。 +- 可执⾏权限(x) 对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录了来说该⽤户具有进⼊ ⽬录的权限。 注意:通常,Unix/Linux系统只允许⽂件的属主(所有者)或超级⽤户改变⽂件的读写权 + +![](index_files/0ab2d71b-ddd3-471d-9133-5b1ec930be08.jpg) + +第1个字⺟代表⽂件的类型: + +`d` 代表⽂件夹、 +`-` 代表普通⽂件、 +`c` 代表硬件字符设 备、 +`b` 代表硬件块设备、 +`s` 表示管道⽂件、 +`l` 代表软链接⽂件。 + +后面9个字⺟分别代表三组权限:`文件所有者、用户组、其他用户拥有的权限`。 + diff --git "a/Linux/004-Linux\345\221\275\344\273\244\350\216\267\345\217\226\345\270\256\345\212\251.md" "b/Linux/004-Linux\345\221\275\344\273\244\350\216\267\345\217\226\345\270\256\345\212\251.md" new file mode 100644 index 00000000..d7519bf9 --- /dev/null +++ "b/Linux/004-Linux\345\221\275\344\273\244\350\216\267\345\217\226\345\270\256\345\212\251.md" @@ -0,0 +1,74 @@ +# 获取命令帮助 + +--- +## 1 获取命令帮助 + +### 1.1 help + +比如`ls --help` + +### 1.2 man + +使用man命令获取帮助,man指的是manual,比如`man ls 或者 man 2 printf` + +man中各个section意义如下: + +1. Standard commands(标准命令) +2. System calls(系统调⽤,如open,write) +3. Library functions(库函数,如printf,fopen) +4. Special devices(设备⽂件的说明,/dev下各种设备) +5. File formats(⽂件格式,如passwd) +6. Games and toys(游戏和娱乐) +7. Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、⽹络协定、ASCII 码;environ全局变量) +8. Administrative Commands(管理员命令,如ifconfig) + +`man`是按照⼿册的章节号的顺序进⾏搜索的。man设置了如下的功能键: + +功能键 | 功能 +---|--- +空格键|显示⼿册⻚的下⼀屏 +Enter键|⼀次滚动⼿册⻚的⼀⾏ +b |回滚⼀屏 +f |前滚⼀屏 +q |退出man命令 +h |列出所有功能键 +/word |向下搜索word字符串 +?word |向上查询字符串 + +另外使用`man -f command`可以查询该命令有哪些说明文件。 + +### 1.3 info + +使用info也可以获取命令帮助:`info info` + +### 1.4 自动补全 + +使用tab键 + +### 1.5 历史命令 + +当系统执⾏过⼀些命令后,可按上下键翻看以前的命令,`history`将执⾏过的命令列举出来 + +--- +## 2 X Window与命令行模式切换 + +快捷键:`Ctrl + Alt + F1-F7`,如果以纯文本环境启动linux的话,使用`start x`命令启动X窗口界面,修改`/ect/inittab`这个文件的内容,可以配置启动时使用的环境。 + +### 重要的热键 + +`Ctrl + C `用于终止命令 +`Ctrl + D `表示键盘输入的结束 + +--- +## 3 正确的关机方法 + +``` + shutdown [-t 秒] + reboot + poweroff + run level0 关机 + run level3 纯命令模式 + run level5 图形界面模式 + run level6 重启 + init 0 关机 +``` \ No newline at end of file diff --git "a/Linux/005-Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/Linux/005-Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 00000000..3f2ce283 --- /dev/null +++ "b/Linux/005-Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,550 @@ +--- +## 1 文件管理 + +### 查看文件信息:ls + +Linux文件或者目录名称最⻓可以有265个字符,`.`代表当前目录,`..`代表上一级目录,以`.`开头的文件为隐藏文件,需要用`-a`参数才能显示。 + + -a 显示指定⽬录下所有⼦⽬录与⽂件,包括隐藏⽂件 + -l 以列表⽅式显示⽂件的详细信息 + -h 配合 -l 以⼈性化的⽅式显示⽂件⼤⼩ + +linux还支持通配符 + +通配符|含义 +---|--- +`*` | 文件代表文件名中所有字符 +`ls te*` | 查找以te开头的文件 +`ls *html` | 查找结尾为html的文件 +`?` | 代表文件名中任意一个字符 +`ls ?.c` | 只找第一个字符任意,后缀为.c的文件 +`ls a.?` | 只找只有3个字符,前2字符为a.,最后一个字符任意的文件 +`[][”和“]”` | 将字符组括起来,表示可以匹配字符组中的任意一个。“-”用于表示字符范围。 +`[abc]` | 匹配a、b、c中的任意一个 +`[a-f]` | 匹配从a到f范围内的的任意一个字符 +`ls [a-f]*` | 找到从a到f范围内的的任意一个字符开头的文件 +`ls a-f` | 查找文件名为a-f的文件,当“-”处于方括号之外失去通配符的作用 +`\` | 如果要使通配符作为普通字符使用,可以在其前面加上转义字符。 +`“?”和“*”` | 处于方括号内时不用使用转义字符就失去通配符的作用。 +`ls \*a` | 查找文件名为*a的文件 + + +### 输出重定向命令:> + +Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件 +中。 + + ls > test.txt ( test.txt如果不存在,则创建,存在则覆盖其内容) + >输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。 + + + +### 分屏显示:more + +查看内容时,在信息过⻓无法在一屏上显示时,会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用more命令,每次只显示一⻚,按下空格键可以显示下一⻚,按下q键退出显示,按下h键可以获取帮助。 + + +### 管道:| + +管道:⼀个命令的输出可以通过管道做为另⼀个命令的输⼊。 + + +### 清屏:clear + +`clear` + +### 重置:reset + +`reset` + +### 切换工作目录:cd + + cd ~ 切换到当前⽤户的主⽬录(/home/用户目录) + cd . 切换到当前⽬录 + cd .. 切换到上级⽬录 + cd - 可进⼊上次所在的⽬录 + +### 显示当前路径:pwd + +### 创建目录:mkdir + +通过mkdir命令可以创建一个新的目录。参数-p可递归创建目录。需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。 + +### 删除目录:rmdir + +可使用rmdir命令删除一个目录。必须离开目录,并且目录必须为空目录,不然提示删除失败。 + +### 删除文件:rm + +可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。 + + -i以进行交互式方式执行 + -f强制删除,忽略不存在的文件,无需提示 + -r递归地删除目录下的内容,删除文件夹时必须加此参数 + +### 用来设置限制新建文件权限的掩码:umask + +``` +#则在此目录常见的文件的权限为555 +umask 222 +``` + +### 建立链接文件:ln + +Linux链接文件类似于Windows下的快捷方式。链接文件分为软链接和硬链接。软链接:软链接不占用磁盘空间,源文件删除则软链接失效。硬链接:硬链接只能链接普通文件,不能链接目录 + + ln 源文件链接文件 + ln -s 源文件链接文件 + +### 查看或者合并文件内容:cat和tac + + cat a.txt 查看 + cat a.txt b.txt > c.txt 合并文件内容 + tac 用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示。 + +### 创建文件:touch + +**touch命令** 有两个功能: + +- 一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来; +- 二是用来创建新的空文件。 + +实例: +``` +#在当前目录下建立一个空文件ex2 +touch ex2 +``` + + +### 文本搜索:grep + +grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。 + + grep [-选项] ‘搜索内容串’文件名 + + 选项 + -v显示不包含匹配文本的所有行(相当于求反) + -n显示匹配行及行号 + -i忽略大小写 + +grep搜索内容串可以是正则表达式。 + +参数|含义 +---|--- +`^a` | 行首,搜寻以 m 开头的行;grep -n '^a' 1.txt +`ke$` | 行尾,搜寻以 ke 结束的行;grep -n 'ke$' 1.txt +`[Ss]igna[Ll]` | 匹配 [] 里中一系列字符中的一个;搜寻匹配单词signal、signaL、Signal、SignaL的行;grep -n '[Ss]igna[Ll]' 1.txt +`.` | (点)匹配一个非换行符的字符;匹配 e 和 e 之间有任意一个字符,可以匹配 eee,eae,eve,但是不匹配 ee,eaae;grep -n 'e.e'1.txt课程介绍49Linux命令-文件、磁盘管理 + +### 查找文件:find + +find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。 + +常用用法: + +命令|含义 +---|--- +find ./ -name test.sh | 查找当前目录下所有名为test.sh的文件 +find ./ -name '*.sh' | 查找当前目录下所有后缀为.sh的文件 +find ./ -name "[A-Z]*" | 查找当前目录下所有以大写字母开头的文件 +find /tmp -size 2M | 查找在/tmp 目录下等于2M的文件 +find /tmp -size +2M | 查找在/tmp 目录下大于2M的文件 +find /tmp -size -2M | 查找在/tmp 目录下小于2M的文件 +find ./ -size +4k -size -5M | 查找当前目录下大于4k,小于5M的文件 +find ./ -perm 0777 | 查找当前目录下权限为 777 的文件或目录 + +### 拷⻉文件:cp + +cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令 + + 选项 + -a该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。 + -f已经存在的目标文件而不提示 + -i交互式复制,在覆盖目标文件之前将给出提示要求用户确认 + -r若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。 + -v显示拷⻉进度课程介绍51Linux命令-文件、磁盘管理 + +实例 +``` +# 将文件file复制到目录`/usr/men/tmp`下,并改名为file1 +cp file /usr/men/tmp/file1 +#将目录`/usr/men`下的所有文件及其子目录复制到目录`/usr/zh`中 +cp -r /usr/men /usr/zh +``` + +### 移动文件:mv + +用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名 + + + 选项 + -f禁止交互式操作,如有覆盖也不会给出提示 + -i确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件 + -v显示移动进度 + +### 归档管理:tar + +计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。 + +tar命令很特殊,其参数前面可以使用“-”,也可以不使用 + + tar使用格式 tar [参数] 打包文件名文件 + + 常用参数: + -c生成档案文件,创建打包文件 + -v列出归档解档的详细过程,显示进度 + -f指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后 + -t列出档案中包含的文件 + -x解开档案文件 + + tar -cvf xxx.tar file1 file2 //归档 + tar -xvf xxx.tar //解开归档 + +### 文件压缩解压:gzip + +tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz + + gzip [选项] 被压缩文件 + + 常用参数: + -d解压 + -r压缩所有子目录 + +tar这个命令并没有压缩的功能,它只是一个打包的命令,但是在tar命令中增加一个选项(-z)可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。 + + 压缩用法:tar -zcvf xxx.tar.gz 文件1 文件2 ... + 解压用法:tar -zxvf xxx.tar.gz + 解压到指定目录:-C (大写字母“C”) + +### 文件压缩解压:bzip2 + +将文件压缩成bz2格式 + + 压缩用法:tar -jcvf 压缩包包名文件...(tar jcvf bk.tar.bz2 *.c) + 解压用法:tar -jxvf 压缩包包名 (tar jxvf bk.tar.bz2) + +### 文件压缩解压:zip、unzip + +通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。 + + 压缩文件:zip [-r] 目标文件(没有扩展名) + 源文件解压文件:unzip -d 解压后目录文件压缩文件 + +### 查看命令位置:which + + which ls + +--- +## 2 用户、权限管理 + +用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理。在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。Unix/Linux系统中的root账号通常用于系统的维护和管理,它对Unix/Linux操作系统的所有部分具有不受限制的访问权限。在Unix/Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。在大多数版本的Unix/Linux中,都不推荐直接使用root账号登录系统。 + +### 查看系统信息 + + uname -a + +### 查看发行版本 + + lsb_release -a + +### 查看当前用户:whoami + +whoami该命令用户查看当前系统当前账号的用户名。可通过`cat /etc/passwd`查看系统用户信息。 + +### 查看登录用户:who + +who命令用于查看当前所有登录系统的用户信息 + + 选项 + -m 或 am i 只显示运行who命令的用户名、登录终端和登录时间 + -q 或 --count 只显示用户的登录账号和登录用户的数量 + -u 或 --heading 显示列标题 + +### 退出登录账户: exit + +- 如果是图形界面,退出当前终端; +- 如果是使用ssh远程登录,退出登陆账户; +- 如果是切换后的登陆用户,退出则返回上一个登陆账号。 + +### 添加用户账号:useradd + +在Unix/Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样 + + 参数 + -d 指定用户登录系统时的主目录,如果不使用该参数,系统自动在/home目录下建立与用户名同名目录为主目录 + -m 自动建立目录 + -g 指定组名称 + +相关说明: + +- Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户); +- 每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录; +- 用户的主目录一般要放到根目录的home目录下,用户的主目录和用户名是相同的; +- 如果创建用户的时候,不指定组名,那么系统会自动创建一个和用户名一样的组名。 + + + useradd -d/home/abc abc -m创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组 + + useradd -d/home/a a -g test-m创建一个用户名字叫a,主目录在/home/a,如果主目录不存在,就自动创建主目录,同时用户属于test组 + + cat /etc/passwd查看系统当前用户名 + +### 设置用户密码:passwd + +超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名 + + passwd username + +### 删除用户:userdel + + userdel abc(用户名)删除abc用户,但不会自动删除用户的主目录 + userdel -r abc(用户名)删除用户,同时删除用户的主目录 + +### 切换用户:su + +可以通过su命令切换用户,su后面可以加“-”。su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录: + + +注意:如果是ubuntu平台,需要在命令前加“sudo”,如果在某些操作需要管理员才能操作,ubuntu无需切换到root用户即可操作,只需加“sudo”即可。sudo是ubuntu平台下允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,减少了root 用户的登陆和管理时间,提高了安全性。 + + + su 切换到root用户su root切换到root用户 + su - 切换到root用户,同时切换目录到/root + su - root 切换到root用户,同时切换目录到/root + su 普通用户切换到普通用户 + su - 普通用户切换到普通用户,同时切换普通用户所在的目录 + sudo -s 切换到root用户(ubantu) + +### 查看有哪些用户组 + + 方法一 cat /etc/group + 方法二 groupmod +二次tab键 + +### 添加、删除组账号:groupadd、groupdel + + groupadd 新建组账号 + groupdel 组账号 + cat /etc/group 查看用户组 + +### 修改用户所在组:usermod + + usermod -g 用户组用户名 + +为创建的普通用户添加sudo权限,新创建的用户,默认不能sudo,需要进行一下操作 + + sudo usermod -a -G adm 用户名 + sudo usermod -a -G sudo 用户名 + + usermod -g 与 -G的区别: + -g用来制定这个用户默认的用户组 + -G一般配合'-a'来完成向其它组添 + + +### 查看用户在哪些组 + + groups username + +### 修改文件权限:chmod + +chmod 修改文件权限有两种使用格式:字母法与数字法 + +字母法:`chmod u/g/o/a +/-/= rwx 文件` + + u: user 表示该文件的所有者 + g: group 表示与该文件的所有者属于同一组( group )者,即用户组 + o: other 表示其他以外的人 + a: all 表示这三者皆是 + [ +-= ]的含义:+增加权限、-撤销权限、=设定权限 + r:read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。 + w:write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。 + x:excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。 + +数字法:`“rwx” 这些权限也可以用数字来代替` + + r读取权限,数字代号为 "4" + w写入权限,数字代号为 "2" + x执行权限,数字代号为 "1" + -不具任何权限,数字代号为 "0" + + 执行:chmod u=rwx,g=rx,o=r filename 就等同于:chmod u=7,g=5,o=4 filename 或者 chmod 754 filename + + 如果想递归所有目录加上相同权限,需要加上参数“ -R ”。如:chmod 777 test/ -R递归 test 目录下所有文件加 777 权限 + +### 修改文件所有者:chown + + sudo chown username filename + sudo chown username:group filename #将这个目录的所有者和组分别改为xxx和组xxx + + +### 修改文件所属组:chgrp + + sudo chgrp username filename + +--- +## 3 系统管理 + +### 查看当前日历:cal + + cal + call 2017 + +### 显示或设置时间:date + +### 查看进程信息:ps + +进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。ps命令可以查看进程的详细状况, + + 常用选项(选项可以不加“-”) + -a显示终端上的所有进程,包括其他用户的进程 + -u显示进程的详细状态 + -x显示没有控制终端的进程 + -w显示加宽,以便显示更多的信息 + -r只显示正在运行的进程 + + +### 动态显示进程:top + + +top命令用来动态显示运行中的进程。top命令能够在运行后,在指定的时间间隔更新显示信息。可以在使用top命令时加上-d 来指定显示信息更新的时间间隔。 + + 在top命令执行后,可以按下按键得到对显示的结果进行排序: + M根据内存使用量来排序P根据CPU占有率来排序 + T根据进程运行时间的⻓短来排序 + U可以根据后面输入的用户名来筛选进程 + K可以根据后面输入的PID来杀死进程。 + q退出 + h获得帮助 + +### 终止进程:kill + +kill命令指定进程号的进程,需要配合`ps`使用 + + kill [-signal] pid + + signal值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。 + +### 关机重启:reboot、shutdown、init + + reboot重新启动操作系统 + shutdown –r now重新启动操作系统, + shutdown会给别的用户提示 + shutdown -h now立刻关机,其中now相当于时间为0的状态 + shutdown -h 20:25系统在今天的20:25 会关机 + shutdown -h +10系统再过十分钟后自动关机 + init 0关机 + init 6重启 + +### 检测磁盘空间:df + +df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。 + + 选项 + -a显示所有文件系统的磁盘使用情况 + -m以1024字节为单位显示 + -t显示各指定文件系统的磁盘空间使用情况 + -T显示文件系统 + +### 检测目录所占磁盘空间:du + +du命令用于统计目录或文件所占磁盘空间的大小,该命令的执行结果与df类似,du更侧重于磁盘的使用状况。 + + 选项 + -a递归显示指定目录中各文件和子目录中文件占用的数据块 + -s显示指定文件或目录占用的数据块 + -b以字节为单位显示磁盘占用情况 + -l计算所有文件大小,对硬链接文件计算多次 + + +### 查看或配置网卡信息:ifconfig + + ifconfig,它会显示所有网卡的信息 + sudo ifconfig ens33 192.168.0.1 修改ens33的ip地址 + +### 测试远程主机连通性:ping + + ping www.baidu.com + + +### 获取root权限 + +Ubuntu的默认root密码是随机的,即每次开机都有一个新的root密码。 + +我们可以在终端输入命令` sudo passwd`,然后根据提示设置设置root密码。修改成功后,输入命令` su root`,再输入新的密码就ok了。 + +--- +## 4 其他 + +### echo + +echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 + +命令的一般格式为:` echo [ -n ] 字符串`,其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。 + + 功能说明:显示文字。 + 语   法:echo [-ne][字符串]或 echo [--help][--version] + 补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。 + 参   数:-n 不要在最后自动换行 + -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般 + 文字输出: + \a 发出警告声; + \b 删除前一个字符; + \c 最后不加上换行符号; + \f 换行但光标仍旧停留在原来的位置; + \n 换行且光标移至行首; + \r 光标移至行首,但不换行; + \t 插入tab; + \v 与\f相同; + \\ 插入\字符; + \nnn 插入nnn(八进制)所代表的ASCII字符; + –help 显示帮助 + –version 显示版本信息 + +示例 +``` + echo $PATH 查看执行文件路径 + echo $PATH >> path.txt 查看执行文件路径,但是重定向到path.txt中去 +``` + +### export + +功能:设置或显示环境变量。 + + 语  法: export [-fnp][变量名称]=[变量设置值] + 补充说明: 在shell中执行程序时,shell会提供一组环境变量。 export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。 + + 参  数: + -f  代表[变量名称]中为函数名称。 +  -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 +  -p  列出所有的shell赋予程序的环境变量。 + +示例 +``` + PATH = "$PATH":/root 将root加入PATH,但是只针对与当前shell + export PATH = "$PATH":/root 将root加入PATH,其实是设置到etc/改profile中 +``` + + +### 创建可执行文件 + +- 如果是一个普通的文件(没有执行权限),比如当前目录下有一个`studio.sh`,那么使用`. studio.sh`执行该文件 +- 如果要创建一个可执行文件,比如创建一个`studio.sh`文件,那么使用`chmod a+x studio.sh`来修改权限,然后可以使用`./studio.sh`来执行改文件 + + +### 其他 + +- nl 顺便显式行号 +- more 一页一页查看 +- less 与more类似 +- head 只看头几行 +- tail 只看末尾几行 +- od 已二进制形式读取文件内容 +- file 查看文件类型 +- type 查看命令目录 +- whereis 文件护照目录名查找 +- fdisk 磁盘分区 +- mkfs 磁盘格式化 +- fsck 磁盘检查 +- mount 挂载 +- dump 备份 +- basename /ect/sysconfig/network 获取路径的文件名 +- dirname /ect/sysconfig/network 获取路径的目录名称 diff --git a/Linux/006-vim.md b/Linux/006-vim.md new file mode 100644 index 00000000..ed6deba6 --- /dev/null +++ b/Linux/006-vim.md @@ -0,0 +1,110 @@ +# VIM + +--- +## 1 VIM介绍 + +vi是Visual interface的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。 vi没有菜单,只有命令,且命令繁多。 + +Vi有三种基本工作模式: + +- 命令模式 +- 文本输入模式 +- 末行模式 + +![](index_files/1a98b4de-a72b-453c-b540-6fd92daa640b.jpg) + + +### 命令行模式 + +任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。 + +### 文本输入模式 + +在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。 + + +### 末行模式 + +末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。 + +--- +## 2 命令 + +### 进入插入模式 + +``` + i: 插入光标前一个字符 + I: 插入行首 + a: 插入光标后一个字符 + A: 插入行未 + o: 向下新开一行,插入行首 + O: 向上新开一行,插入行首 +``` + +### 命令模式 + +``` + h: 左移 + j: 下移 + k: 上移 + l: 右移 + yy:复制光标所在行 + 4yy:复制从光标所在行开始四行 + dd:剪切光标所在行 + d0:从当前光标开始剪切到行首 + 4dd:剪切从光标所在行开始四行 + dw:删除光标开始位置的字,包含关闭所在字符 + x:剪切当前的光标所在字符 + X:剪切当前的光标所在字符的前一个 + D:从当前光标开始剪切到行末 + p:黏贴 + H:当前屏幕的上方 + M:当前屏幕的中间 + L:当前屏幕的下方 + Ctrl+b :上一页;Ctrl+f:下一页 + Ctrl+u :上半一页;Ctrl+d:下半一页 + G:回到整个代码的最后一行 + 20G:快速定位的18行 + gg:回到整个代码的最一行 + w:向后跳一个单词的长度,调到下一个单词的第一位 + b:向前跳一个单词的长度,调到上一个单词的第一位 + u:撤销刚刚的操作 + Ctrl+r:反撤销 + .:重复执行上一次的操作 + + 选择一片代码: + - v:基于当前光标 + - V:当前光标的整行 + - >>:整体向右缩进 + - <<:整体向左 + + (:上一段代码 + ):下一段代码 + + + 替换: + r:替换一个字符 + R:从当前光标开始替换 + 末行模式下:%s/world/hello/g (所有world替换成hello) + 11,16s/world/hello/g(11行到16行的world替换成hello) + + 搜索: + /hello:搜索,搜一个不存在的即消除高亮 + N:上一个 + n:下一个 +``` + +### 末行模式 + +``` + w:保存 + q:退出 + q!:强制退出 + wq:保存+退出 + shift+zz相当于wq +``` + +--- +## 教程 + +- [Linux vi/vim](http://www.runoob.com/linux/linux-vim.html) diff --git "a/Linux/007-Linux\345\270\270\347\224\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272.md" "b/Linux/007-Linux\345\270\270\347\224\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272.md" new file mode 100644 index 00000000..1415715b --- /dev/null +++ "b/Linux/007-Linux\345\270\270\347\224\250\346\234\215\345\212\241\345\231\250\346\220\255\345\273\272.md" @@ -0,0 +1,106 @@ +# 常用服务器搭建 + +--- +## 1 ftp + +FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷⻉文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷⻉至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。 + +**安装vsftpd服务器** `sudo apt-get install vsftpd` + +### 1.1 配置ftp + +- 配置ftp,`/etc/vsftpd.conf` +``` +anonymous_enable=NO //不允许匿名登录 +local_enable=YES //允许本地用户登录 +local_root=/home/ztiany/ftp //指定上传下载的目录 +chroot_list_enable=YES //允许vsftpd.chroot_list文件中的用户登录FTP服务器 +chroot_list_file=/etc/vsftpd.chroot_list //记录可以登录的用户 +write_enable=YES //允许用户上传文件 +``` + +- 添加用户 +```shell +mkdir -p /home/ztiany +useradd ztiany -g ftp -d /home/ztiany -s /sbin/nologin #添加用户,-s表示指定用户登入后所使用的shell +passwd ztiany #设置密码 +chmod 777 -R /home/ztiany +``` + +- 设置`etc/shells`,如果没有则加上下面两项 +``` +# 命令 vim /etc/shells +/usr/sbin/nologin +/sbin/nologin +``` + +- 创建并编辑`/ect/vsftpd.chroot_list`文件,加入刚刚创建的用户 +```shell +ztiany #此时表示ztiany可以登录ftp服务器 +``` + +- 配置好后需要重启vsftpd服务 +``` +service vsftp restart +``` + +### 1.2 远程登录ftp服务器 + +``` + ftp ipAddress + put localfile targetFile 上传文件 + get targetFile localFile 拉取文件 +``` + +--- +## 2 SSH + +SSH为Secure Shell的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷⻉。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是 UNIX 系统上的一个程序,后来又迅速扩展到其他操作平台。SSH 在正确使用时可弥补网络中的漏洞。SSH 客户端适用于多种平台。几乎所有 UNIX 平台—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。 + +### 2.1 安装ssh + +``` + sudo apt-get install openssh-server//安装ssh(Secure Shell)服务 +``` + +### 2.2 远程登录ssh + +``` + ssh 用户名@IP使用 +``` + +![](index_files/4ca9cec4-5bab-4209-ad14-ba28469df87d.jpg) + +### 2.3 SCP + +远程拷⻉文件,scp -r 的常用方法: + +本地文件复制到远程: + +``` + scp FileName RemoteUserName@RemoteHostIp:RemoteFile + scp FileName RemoteHostIp:RemoteFolder + scp FileName RemoteHostIp:RemoteFile + scp -r FolderName RemoteUserName@RemoteHostIp:RemoteFolder + scp -r FolderName RemoteHostIp:RemoteFolder +``` + +远程文件复制到本地: + +``` + scp RemoteUserName@RemoteHostIp:RemoteFile FileName + scp RemoteHostIp:RemoteFolder FileName + scp RemoteHostIp:RemoteFile FileName + scp -r RemoteUserName@RemoteHostIp:RemoteFolder FolderName + scp -r RemoteHostIp:RemoteFolder FolderName +``` + +--- +## 3 samba + +Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,能够完成在windows、mac操作系统下访问linux系统下的共享文件 + + + + + diff --git "a/Linux/008-\345\214\205\347\256\241\347\220\206.md" "b/Linux/008-\345\214\205\347\256\241\347\220\206.md" new file mode 100644 index 00000000..d6fcb7ad --- /dev/null +++ "b/Linux/008-\345\214\205\347\256\241\347\220\206.md" @@ -0,0 +1,70 @@ +# 包管理 + +--- +## 1 rpm与yum + +rpm由RedHat公司开发,Fedora、CentOS、SuSe等Linux发行版使用其管理软件安装。yum是基于rpm的在线升级机制。 + +--- +## 2 dpkg与apt + +dpkg机制最早由DebianLinux社区开发出来,派生于Debian的Linux发行版本大多使用dpkg这个机制来管理软件,比如ubantu、B2D等。apt是基于dpkg的在线升级机制。 + +--- +## 3 apt使用 + +### 配置源 + + 首先备份原始的文件 + sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup + 配置镜像 + https://mirrors.tuna.tsinghua.edu.cn/ //清华大学的镜像 + 选择好对应的平台和版本,覆盖/etc/apt/sources.list中的文件即可 + + spt-get常用命令: + sudo apt-get update 更新源 + sudo apt-get install package 安装包 + sudo apt-get remove package 删除包 + sudo apt-cache search package 搜索软件包 + sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等 + sudo apt-get install package --reinstall 重新安装包 + sudo apt-get -f install 修复安装 + sudo apt-get remove package --purge 删除包,包括配置文件等 + sudo apt-get build-dep package 安装相关的编译环境 + sudo apt-get upgrade 更新已安装的包 + sudo apt-get dist-upgrade 升级系统 + sudo apt-cache depends package 了解使用该包依赖那些包 + sudo apt-cache rdepends package 查看该包被哪些包依赖 + sudo apt-get source package 下载该包的源代码 + sudo apt-get clean && sudo apt-get autoclean 清理无用的包 + sudo apt-get check 检查是否有损坏的依赖 + + +--- +## 4 软件安装位置 + +apt-get 下载后,软件所在路径是什么:`/var/cache/apt/archives` + +ubuntu 默认的PATH为:`PATH=/home/brightman/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games` + +**apt-get install安装目录是包的维护者确定的,不是用户** + +`dpkg -L +软件包的名字`,获取这个软件包包含了哪些文件 + +``` +系统安装软件一般在/usr/share,可执行的文件在/usr/bin,配置文件可能安装到了/etc下等。 +文档一般在 /usr/share +可执行文件 /usr/bin +配置文件 /etc +lib文件 /usr/lib +``` + +--- +## 5 wget下载软件 + +使用wget可以下载软件,然后手动解压。 + +--- +## 引用 + +- [Ubuntu(Debian)的aptitude与apt-get的区别和联系](http://www.cnblogs.com/yuxc/archive/2012/08/02/2620003.html) \ No newline at end of file diff --git a/Linux/009-Shell.md b/Linux/009-Shell.md new file mode 100644 index 00000000..568d3e5a --- /dev/null +++ b/Linux/009-Shell.md @@ -0,0 +1,925 @@ +# Shell + +Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 +Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 + +- Shell脚本(shell script)是一种为shell编写的脚本程序 +- Shell环境: +- Bourne Shell (/usr/bin/sh或/bin/sh) +- Bourne Again Shell (/bin/bash) +- C Shell (/usr/bin/csh) +- K Shell (/usr/bin/ksh) + +Bash是大多数Linux 系统默认的 Shell。 + +--- +## 1 运行 Shell 脚本 + +```Shell +#!/bin/bash +echo "Hello World !" +``` + +>"#!"是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。 + +- 方法1:作为可执行程序 + +```Shell +chmod +x ./test.sh #使脚本具有执行权限 +./test.sh #执行脚本 +``` + +- 方法2:作为解释器参数 + +```Shell +/bin/sh test.sh +/bin/php test.php +``` + +--- +## 2 变量 + +### 定义变量 + +```Shell +your_name="runoob.com" +name=abc +``` + +- 变量名和等号之间不能有空格 +- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头 +- 中间不能有空格,可以使用下划线`_` +- 不能使用标点符号 +- 不能使用bash里的关键字(可用help命令查看保留关键字) +- 已定义的变量,可以被重新定义 + +除了显式地直接赋值,还可以用语句给变量赋值: + +```Shell +#将 /etc 下目录的文件名循环出来。 +for file in `ls /etc` +``` + +### 使用变量 + +使用一个定义过的变量,只要在变量名前面加美元符号即可,建议给所有变量加上花括号 + +```Shell +#使用变量 +your_name="qinjx" +echo $your_name +echo ${your_name} + +# for循环中skill被赋值为被遍历的项 +for skill in Ada Coffe Action Java; do + echo "I am good at ${skill}Script" +done +``` + +### 只读变量 + +使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 + +```Shell +#!/bin/bash +abc=123 +readonly abc +``` + +### 删除变量 + +```Shell +unset variable_name +``` + +### 变量类型 + +1. 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。 +2. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。 +3. shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行 + +--- +## 3 字符串 + +字符串可以用单引号,也可以用双引号,也可以不用引号 + +单引号字符串的限制: + +- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的; +- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。 + +双引号的优点: + +- 双引号里可以有变量 +- 双引号里可以出现转义字符 + +常见字符串操作: + +```Shell +str='this is a string' + +your_name='qinjx' +str="Hello, I know your are \"$your_name\"! \n" + +#拼接字符串 +your_name="qinjx" +greeting="hello, "$your_name" !" +greeting_1="hello, ${your_name} !" + +#获取字符串长度 +string="abcd" +echo ${#string} + +#提取子字符串 +tring="runoob is a great site" +echo ${string:1:4} + +#查找子字符串,查找字符 "i 或 s" 的位置 +string="runoob is a great company" +echo `expr index "$string" is` +``` + +--- +## 4 数组 + +bash支持一维数组,并且没有限定数组的大小。 + +- 定义数组:`数组名=(值1 值2 ... 值n)` +- 读取数组:`${数组名[下标]}` + +```Shell +#定义数组 +array_name=(value0 value1 value2 value3) + +#单独赋值 +array_name[0]=value0 +array_name[1]=value1 +array_name[n]=valuen + +#使用@符号可以获取数组中的所有元素 +echo ${array_name[@]} + +#获取数组的长度 +length=${#array_name[@]} +length=${#array_name[*]} + +#取得数组单个元素的长度 +lengthn=${#array_name[n]} +``` + +--- +## 5 Shell参数 + +在执行Shel 脚本时,可以向脚本传递参数(参数以空格隔开),脚本内获取参数的格式为:`$n` + +其他参数: +参数名|说明 +---|--- +`$#` | 传递到脚本的参数个数 +`$*` | 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 +`$$` | 脚本运行的当前进程ID号 +`$!` | 后台运行的最后一个进程的ID号 +`$@` | 与`$*`相同,但是使用时加引号,并在引号中返回每个参数。如`$@`用引号`"`括起来的情况、以`"$1" "$2" … "$n"` 的形式输出所有参数。 +`$-` | 显示Shell使用的当前选项,与set命令功能相同。 +`$?` | 显示最后命令的退出状态。**0表示没有错误**,其他任何值表明有错误。比如:127表示没有找到命令;126表示命令不可执行 + +`$*` 与 `$@` 区别: + +- 相同点:都是引用所有参数。 +- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数`1、2、3`,则 `" * "` 等价于 `"1 2 3"`(传递了一个参数),而 `"@"` 等价于 `"1" "2" "3"`(传递了三个参数)。 + +```Shell +#!/bin/bash + +echo "-- \$* 演示 ---" +for i in "$*"; do + echo $i #这里只输出一次 +done + +echo "-- \$@ 演示 ---" +for i in "$@"; do + echo $i #这里有几个参数就输出几次 +done +``` + +--- +## 6 运算符 + +Shell包括以下运算符: + +- 算数运算符 +- 关系运算符 +- 布尔运算符 +- 字符串运算符 +- 文件测试运算符 + +原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 `awk,expr`: + +```Shell +#!/bin/bash + +#expr的一个例子:求和 +val=`expr 2 + 2` +echo "两数之和为 : $val" +``` + +- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成` 2 + 2 `。 +- 完整的表达式要被 \` \`符号 包含,这个字符不是常用的单引号,在数字键1的左边 + +### 6.1 算术运算符 + +假定变量 a 为 10,变量 b 为 20: + +运算符|说明|示例 +---|---|--- +`+` | 加法 | `expr $a + $b` 结果为 30。 +`-` | 减法 | `expr $a - $b` 结果为 -10。 +`*` | 乘法 | `expr $a \* $b` 结果为 200。 +`/` | 除法 | `expr $b / $a` 结果为 2。 +`%` | 取余 | `expr $b % $a` 结果为 0。 +`=` | 赋值 | `a=$b` 将把变量 b 的值赋给 a。 +`==` | 相等。用于比较两个数字,相同则返回 true。| `[ $a == $b ]` 返回 false。 +`!=` | 不相等。用于比较两个数字,不相同则返回 true。 | `[ $a != $b ]` 返回 true。 + +- 乘号`*`前边必须加反斜杠`\`才能实现乘法运算; +- 在 MAC 中 shell 的 expr 语法是:`$((表达式))`,此处表达式中的 `*` 不需要转义符号 `\` 。 +- 条件表达式要放在方括号之间,并且要有空格,例如: `[$a==$b]` 是错误的,必须写成 `[ $a == $b ]` + +### 6.2 关系运算符 + +假定变量 a 为 10,变量 b 为 20: + +运算符 | 说明 | 示例 +---|---|--- +-eq | 检测两个数是否相等,相等返回 true。 | `[ $a -eq $b ]` 返回 false。 +-ne | 检测两个数是否相等,不相等返回 true。 | `[ $a -ne $b ]` 返回 true。 +-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | `[ $a -gt $b ]` 返回 false。 +-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | `[ $a -lt $b ]` 返回 true。 +-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | `[ $a -ge $b ]` 返回 false。 +-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | `[ $a -le $b ]` 返回 true。 + +- 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。 + +### 6.3 布尔运算符 + +假定变量 a 为 10,变量 b 为 20: + +运算符 | 说明 | 示例 +---|---|--- +! | 非运算,表达式为 true 则返回 false,否则返回 true。 | `[ ! false ]`返回 true。 +-o | 或运算,有一个表达式为 true 则返回 true。 | `[ $a -lt 20 -o $b -gt 100 ]` 返回 true。 +-a | 与运算,两个表达式都为 true 才返回 true。 | `[ $a -lt 20 -a $b -gt 100 ]` 返回 false。 + +### 6.4 逻辑运算符 + +假定变量 a 为 10,变量 b 为 20: + +运算符 | 说明 | 示例 +---|---|--- +`&&` | 逻辑的 AND | `[[ $a -lt 100 && $b -gt 100 ]]` 返回 false +`||` | 逻辑的 OR | `[[ $a -lt 100 || $b -gt 100 ]]` 返回 true + +注意上面是**双方括号** + +### 6.5 字符串运算符 + +假定变量 a 为 "abc",变量 b 为 "efg": + +运算符 | 说明 | 示例 +---|---|--- += | 检测两个字符串是否相等,相等返回 true。 | `[ $a = $b ]` 返回 false。 +!= | 检测两个字符串是否相等,不相等返回 true。 | `[ $a != $b ]` 返回 true。 +-z | 检测字符串长度是否为0,为0返回 true。 | `[ -z $a ]` 返回 false。 +-n | 检测字符串长度是否为0,不为0返回 true。 | `[ -n $a ]` 返回 true。 +str | 检测字符串是否为空,不为空返回 true。 | `[ $a ]` 返回 true。 + +### 6.6 文件测试运算符 + +文件测试运算符用于检测 Unix 文件的各种属性。 + +加上`file="/var/www/runoob/test.sh"` + + +操作符 | 说明 | 举例 +---|---|--- +-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | `[ -b $file ]` 返回 false。 +-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | `[ -c $file ]` 返回 false。 +-d file | 检测文件是否是目录,如果是,则返回 true。 | `[ -d $file ]` 返回 false。 +-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | `[ -f $file ]` 返回 true。 +-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | `[ -g $file ]` 返回 false。 +-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | `[ -k $file ]` 返回 false。 +-p file | 检测文件是否是有名管道,如果是,则返回 true。 | `[ -p $file ]` 返回 false。 +-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | `[ -u $file ]` 返回 false。 +-r file | 检测文件是否可读,如果是,则返回 true。 | `[ -r $file ]` 返回 true。 +-w file | 检测文件是否可写,如果是,则返回 true。 | `[ -w $file ]` 返回 true。 +-x file | 检测文件是否可执行,如果是,则返回 true。 | `[ -x $file ]` 返回 true。 +-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | `[ -s $file ]` 返回 true。 +-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | `[ -e $file ]` 返回 true。 + + +--- +## 7 命令 + +### 7.1 echo + +用于字符串的输出,常用用法如下: + +```Shell +#显示普通字符串 +echo "It is a test" +echo It is a test + +#显示转义字符 +echo "\"It is a test\"" + +#显示变量,read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 +read name +echo "$name It is a test" + +#显示换行 +echo -e "OK! \n" # -e 开启转义 +echo "It it a test" + +#显示结果定向至文件 +echo "It is a test" > file + +#原样输出字符串,不进行转义或取变量(用单引号) +echo '$name\"' + +#显示命令执行结果,这里的符号是反引号 ` +echo `date` +``` + +总结: + +- | 能否引用变量 | 能否引用转移符 | 能否引用文本格式符(如:换行符、制表符) +--- | --- | --- | --- +单引号 | 否 | 否 | 否 +双引号 | 能 | 能 | 能 +无引号 | 能 | 能 | 否 + +### 7.2 printf + +printf 命令模仿 C 程序库(library)里的 printf() 程序。printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加 `\n`。 + +```Shell +printf format-string [arguments...] +#format-string: 为格式控制字符串 +#arguments: 为参数列表。 +``` + +示例: + +```Shell +printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg +``` + +### 7.3 test + +Shell中的 test 命令用于检查某个条件是否成立,它可以进行**数值、字符和文件**三个方面的测试。 + +- 数值测试,使用关系运算符 +- 字符串测试,使用字符串运算符 +- 文件测试,使用文件测试运算符 + +示例: + +```Shell +#数字 +num1=100 +num2=100 +if test $num1 -eq $num2 +then +echo '两个数相等!' +else +echo '两个数不相等!' +fi + +#字符串 +str1="ru1noob" +str2="runoob" +if test $str1 = $str2 +then +echo '两个字符串相等!' +else +echo '两个字符串不相等!' +fi + +#文件 +if test -e ./bash +then +echo '文件已存在!' +else +echo '文件不存在!' +fi + +#多个条件使用( -a )、或( -o )、非( ! ) +if test -e ./notFile -o -e ./bash +then +echo '至少有一个文件存在!' +else +echo '两个文件都不存在' +fi +``` + +## 8 流程控制 + +sh的流程控制不可为空,比如如果else分支没有语句执行,就不要写这个else + +### if + +```Shell +#语法 +if condition1 +then +command1 +elif condition2 +then +command2 +else +commandN +fi + +#示例 +a=10 +b=20 +if [ $a == $b ] +then +echo "a 等于 b" +elif [ $a -gt $b ] +then +echo "a 大于 b" +elif [ $a -lt $b ] +then +echo "a 小于 b" +else +echo "没有符合的条件" +fi +``` + +if的条件必须是命令,只有命令的退出状态码为0,then才会执行。 + +### for循环 + +for循环一般格式为: + +```Shell +#多行 +for var in item1 item2 ... itemN +do +command1 +command2 +... +commandN +done + +#单行 +for var in item1 item2 ... itemN; do command1; command2… done; +``` + +示例: + +```Shell +#一般用法 +for loop in 1 2 3 4 5 +do +echo "The value is: $loop" +done + +#类似其他语言的用法,通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要 +for((i=1;i<=5;i++));do +echo "这是第 $i 次调用"; +done; + +#设置for的分隔符,IFS字段分隔符 +list="windows--linux--macos" +IFS=$-- +for item in $list +do +echo $item +done +``` + +### while 语句 + +```Shell +# 语法 +while condition +do +command +done + +#无效循环1 +while : +do +command +done + +#无效循环2 +while true +do +command +done + +# 示例 +int=1 +while(( $int<=5 )) +do +echo $int +let "int++" +done +``` + +### until 循环 + +until循环执行一系列命令直至条件为真时停止。until循环与while循环在处理方式上刚好相反。 + +```Shell +until condition +do +command +done +``` + +### case + +case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令 + +```Shell +#每一模式必须以右括号结束。取值可以为变量或常数,也可以是多个数的组合 +#如果没有匹配模式,使用星号 * 捕获该值,再执行后面的命令 +#每个模式已;;介绍,整个case以esac结束 + +#语法 +case 值 in +模式1) +command1 +command2 +... +commandN +;; +模式2) +command1 +command2 +... +commandN +;; +*) +command1 +;; +esac + +# 示例: +echo -n "输入 1 到 5 之间的数字:" +read aNum +case $aNum in +1|2|3|4|5) echo "你输入的数字为 $aNum!" +;; +*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" +;; +esac +``` + +### 跳出循环 + +- break +- continue + +--- +## 9 函数 + +shell中可以定义函数,然后在shell脚本中可以调用。 + +格式: + +```Shell +[ function ] funname [()] + +{ + +action; + +[return int;] + +} +``` + +- 可以带`function fun()` 定义,也可以直接`fun()` 定义,不带任何参数。 +- 参数返回可以显式加:`return` 返回,如果不加,将以最后一条命令运行结果,作为返回值。 +- 调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数... + +示例: + +```Shell +function fun(){ +echo "这是我的第一个 shell 函数!" +} + +funWithReturn(){ +echo "这个函数会对输入的两个数字进行相加运算..." +echo "输入第一个数字: " +read aNum +echo "输入第二个数字: " +read anotherNum +echo "两个数字分别为 $aNum 和 $anotherNum !" +return $(($aNum+$anotherNum)) +} + +funWithParam(){ +echo "第一个参数为 $1 !" +echo "第二个参数为 $2 !" +echo "第十个参数为 $10 !" +echo "第十个参数为 ${10} !" +echo "第十一个参数为 ${11} !" +echo "参数总数有 $# 个!" +echo "作为一个字符串输出所有参数 $* !" +} +funWithParam 1 2 3 4 5 6 7 8 9 34 73 +``` + +--- +## 10 输入输出重定向 + +大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。 + +符号 | 说明 +--- | --- +`command > file` | 将输出重定向到 file。 +`command < file` | 将输入重定向到 file。 +`command >> file` | 将输出以追加的方式重定向到 file。 +`n > file` | 将文件描述符为 n 的文件重定向到 file。 +`n >> file` | 将文件描述符为 n 的文件以追加的方式重定向到 file。 +`n >& m` | 将输出文件 m 和 n 合并。 +`n <& m` | 将输入文件 m 和 n 合并。 +`<< tag` | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 + +示例: + +```Shell +#统计test.的行数 +wc -l test.sh +# 输出:17 test.sh + +#使用 < 的区别:把test.sh的内容输入给wc命令 +wc -l < test.sh +#输出:17,没有文件名,因为wc此时只获取了内容 + +#把file的内容重定向到file2中 +echo < file1 > file2 +``` + +### 标准输入文件 + +一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件: + +- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。 +- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。 +- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。 + +默认情况下,`command > file` 将 stdout 重定向到 file,`command < file` 将stdin 重定向到 file。 + +```Shell +#将 stderr 重定向到 file,可以这样写: +command 2 > file + +#stderr 追加到 file 文件末尾 +command 2 >> file + +#将 stdout 和 stderr 合并后重定向到 file +command > file 2>&1 +command >> file 2>&1 +``` + +### Here Document + +Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。它的基本的形式如下: + +```Shell +command << delimiter +document +delimiter +``` + +- 它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。 +- 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。 +- 开始的delimiter前后的空格会被忽略掉。 + +```Shell +#此时EOF是delimiter +wc -l << EOF +> hh +> ee +> cc +> EOF +3 +``` + +### /dev/null 文件 + +如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 `/dev/null`,`/dev/null` 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 `/dev/null` 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。 + +```Shell +command > /dev/null +#同时屏蔽错误输出 +command > /dev/null 2>&1 +``` + +### 永久重定向 +```Shell +exec 1>test.sh +``` + +--- +## 11 文件包含 + +Shell可以包含外部脚本。这样可以很方便的封装一些通用的代码作为一个独立的脚本。Shell 文件包含的语法格式如下: + +```Shell +#使用.引用文件,注意点号(.)和文件名中间有一空格 +. filename +#使用source引用文件 +source filename +``` + +实例: + +```Shell +#使用 . 号来引用test1.sh 文件 +. ./test1.sh + +# 或者使用以下包含文件代码 +source ./test1.sh +``` + +--- +## 12 常用命令和工具 + +### wc + +利用wc指令可以计算文件的**Byte数、字数、或是列数**,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。 + +```Shell +#语法 +wc [-clw][--help][--version][文件...] +``` + +- -c或--bytes或--chars 只显示Bytes数。 +- -l或--lines 只显示行数。 +- -w或--words 只显示字数。 +- --help 在线帮助。 +- --version 显示版本信息。 + +### bc + +bc命令 是一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。 + +语法:`bc(选项)(参数)` + +选项: + +- -i:强制进入交互式模式; +- -l:定义使用的标准数学库; +- -w:对POSIX bc的扩展给出警告信息; +- -q:不打印正常的GNU bc环境信息; +- -v:显示指令版本信息; +- -h:显示指令的帮助信息。 + +示例: + +```Shell +echo "1.212*3" | bc +#设定小数精度(数值范围) +echo "scale=2;3/8" | bc +#将十进制转换成二进制 +echo "obase=2;$abc" | bc +#将二进制转换成十进制 +echo "obase=10;ibase=2;$abc" | bc +#幂运算 +echo "10^10" | bc +#平方根 +echo "sqrt(100)" | bc +``` + +### expr + +expr命令 是一款表达式计算工具,使用它完成表达式的求值操作。 + +expr的常用运算符: + +- 加法运算:`+` +- 减法运算:`-` +- 乘法运算:`*` +- 除法运算:`/` +- 求摸(取余)运算:`%` + +示例: + +```Shell +result=`expr 3 + 3` +result=$(expr $num1 + 25) +``` + +### read + +read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。 + +read参数: + +- `-p` 输入提示文字 +- `-n` 输入字符长度限制(达到指定位数,自动结束) +- `-t` 输入限时 +- `-s` 隐藏输入内容 + +示例: + +```Shell +read -p "请输入一段文字:" -n 6 -t 5 -s password +``` + +### let + +let命令 是bash中用于计算的工具,提供常用运算符外还提供了方幂`**`运算符。 + +示例: + +```Shell +#自加操作 +let no++ +#自减操作 +let no-- +#简写形式:等同于let no=no+10 +let no+=10 +#跟多个运算 +let a=5+4 b=9-3 +#多个运算,t1的值为最后一个表达式的值,这里为15-c-11,即与c相等 +let "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 - 4))" +``` + +### exit + +exit命令 同于退出shell,并返回给定值。在shell脚本中可以终止当前脚本执行。执行exit可使shell以指定的状态值退出。若不设置状态值参数,则shell以预设值退出。状态值0代表执行成功,其他值代表执行失败 + +--- +## 13 `[]、()、[[]]、(())` + +### 小括号 `( )` + +- 命令组:括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。 +- 命令替换:等同于`cmd`,shell扫描一遍命令行,发现了`$(cmd)`结构,便将`$(cmd)`中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。 +- 用于初始化数组。如:`array=(a b c d)` + +### 双小括号 `(( ))` + +- 整数扩展。这种扩展计算是整数型的计算,不支持浮点型。`((exp))`结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。 +- 只要括号中的运算符、表达式符合C语言运算规则,都可用在`$((exp))`中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:`echo $((16#5F))` 结果为95 (16进位转十进制) +- 单纯用 `(( ))` 也可重定义变量值,比如 `a=5; ((a++))` 可将 `$a` 重定义为6 +- 常用于算术运算比较,双括号中的变量可以不使用`$`符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用`for((i=0;i<5;i++))`, 如果不使用双括号, 则`for i in {0..4}`或者下面表达式。再如可以直接使用`if (($i<5))`, 如果不使用双括号, 则为`if [ $i -lt 5 ]`。 + +```Shell +for i in `seq 0 4` +``` + +### 单中括号 `[]` + +- bash的内部命令:`[`和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。`if/test`结构中的左中括号是调用`test`的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。`if/test`结构中并不是必须右中括号,但是新版的Bash中要求必须这样。 +- test和`[]`中可用的比较运算符只有`==`和`!=`,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用`-eq`,`-gt`这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":`[ ab \< bc ]`,结果为真,也就是返回状态为0。`[ ]`中的逻辑与和逻辑或使用-a 和-o 表示。 +- 字符范围:用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。 +- 在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。 + +```Shell +if [ $var -eq 0 ]; then echo "True"; fi +#等价于 +if test $var -eq 0; then echo "True"; fi +``` + +### 双中括号 `[[ ]]` + +- `[[`是 bash 程序语言的关键字。并不是一个命令,`[[ ]]` 结构比`[ ]`结构更加通用。在`[[`和`]]`之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 +- 支持字符串的模式匹配,使用`=~`操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如`[[ hello == hell? ]]`,结果为真。`[[ ]]` 中匹配字符串或通配符,不需要引号。 +- 使用`[[ ... ]]`条件判断结构,而不是`[ ... ]`,能够防止脚本中的许多逻辑错误。比如,`&&、||、<和>` 操作符能够正常存在于`[[ ]]`条件判断结构中,但是如果出现在`[ ]`结构中的话,会报错。比如可以直接使用`if [[ $a != 1 && $a != 2 ]]`, 如果不适用双括号, 则为`if [ $a -ne 1] && [ $a != 2 ]`或者`if [ $a -ne 1 -a $a != 2 ]`。 +- bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。 + +--- +## 14 数学计算 + +数学计算总结 +```Shell +# let方式 +let result+=5 +# []操作符方式 +result=$[ nb1+nb2 ] +result=$[ nb1 + 10 ] +# (())方式 +$(($nb1+$nb2)) +# expr方式 +$(expr 3 + 4) +$(expr $nb1 + 10) +# bc方式 +result=`echo "$nb3 * 1.5" | bc` +``` +--- +## 引用 + +- [Linux 命令大全](http://www.runoob.com/linux/linux-command-manual.html) +- [Shell教程](http://www.runoob.com/linux/linux-shell.html) +- [shell中各种括号的作用`()、(())、[]、[[]]、{}`](http://blog.csdn.net/taiyang1987912/article/details/39551385) \ No newline at end of file diff --git a/Linux/010-make.md b/Linux/010-make.md new file mode 100644 index 00000000..dda3001d --- /dev/null +++ b/Linux/010-make.md @@ -0,0 +1,230 @@ +# MakeFile + +make是一个命令工具,它解释Makefile中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile有自己的书写格式、关键字、函数。像C语言有自己的格式、关键字和函数一样。而且在Makefile中可以使用系统shell所提供的任何命令来完成想要的工作。 + +- make在执行时,需要一个命名为Makefile的文件。这个文件告诉make以何种方式编译源代码和链接程序。 +- make通过比较对应文件(规则的目标和依赖,)的最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。 +- 在执行make之前,需要一个命名为Makefile的特殊文件来告诉make需要做什么,该怎么做 + +--- +## 1 GNU make介绍 + +### Makefile规则介绍 + +一个简单的Makefile描述规则组成: + + TARGET... : PREREQUISITES... + COMMAND + ... + ... + +- target:规则的目标。通常是最后需要生成的文件名或者为了实现这个目的而必需的中间过程文件名,目标也可以是一个make执行的动作的名称,如目标“clean”,可以make整个目录,也可以针对单个目录进行make +- make中的第一个target也是该MakeFile文件的最终目标 +- prerequisites:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依赖于一个或者多个文件 +- command:规则的命令行。是规则所要执行的动作(任意的shell命令或者是可在shell下执行的程序)。它限定了make执行这条规则时所需要的动作 +- 一个规则可以有多个命令行,每一条命令占一行。注意:**每一个命令行必须以[Tab]字符开始**,[Tab]字符告诉make此行是一个命令行 +- 命令就是在任何一个目标的依赖文件发生变化后重建目标的动作描述 +- 一个目标可以没有依赖而只有动作(指定的命令)。比如Makefile中的目标“clean”,此目标没有依赖,只有命令。“clean”用来执行清理工作 +- Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets) + +一个Make示例 + +```MakeFile +#sample Makefile +myapp:main.o plus.o minus.o \ +multi.o divi.o + gcc main.o plus.o minus.o \ + multi.o divi.o -o myapp +main.o:main.c + gcc -c main.c +plus.o:plus.c + gcc -c plus.c +minus.o:minus.c + gcc -c minus.c +multi.o:multi.c + gcc -c multi.c +divi.o:divi.c + gcc -c divi.c + +#没有依赖,clean清除所有的.o中间文件,伪目标 +.PHONY:clean +clean: + rm -f *.o + rm -f myapp +``` +注意: + +- 一行写不下,可以使用`\`换号,但是\后面不能有空格,回车后继续写后续代码即可 +- Make的三要素:目标,依赖,命令 + +### make如何工作 + +默认的情况下,make执行的是Makefile中的第一个规则,此规则的第一个目标称之为“最终目的”或者“终极目标”,当在shell提示符下输入“make”命令以后。make读取当前目录下的Makefile文件,并将Makefile文件中的第一个目标作为其执行的“终极目标”,开始处理第一个规则(终极目标所在的规则) + +上面示例的执行步骤为: + +1\. 目标.o文件不存在,使用其描述规则创建它 +2\. 目标.o文件存在,目标.o文件所依赖的.c源文件、.h文件中的任何一个比目标.o文件“更新”(在上一次make之后被修改)。则根据规则重新编译生成它 +3\. 目标.o文件存在,目标.o文件比它的任何一个依赖文件(的.c源文件、.h文件)“更新”(它的依赖文件在上一次make之后没有被修改),则什么也不做。 + +### 定义变量和使用函数 + +上门示例虽然可以正常执行,但是MakeFile编写的过于繁琐,比如myapp的依赖和myapp下面的命令参数时一样的,这样就不利于后期修改,比如添加了新的依赖却忘记了在gcc命令中也加上,为了避免这个问题,在实际工作中大家都比较认同的方法是,使用一个变量“objects”、“OBJECTS”、“objs”、“OBJS”、“obj”或者“OBJ”来作为所有的.o文件的列表的替代。 + +make提供了一些函数和默认规则,可以用来简化MakeFile的编写 + +```MakeFile +#所有.c源文件,wildcard用于获取所有的.c文件 +SOURCES=$(wildcard *.c) +#patsubst把.c后缀,替换成.o后缀 +OBJECTS=$(patsubst %.c,%.o,$(SOURCES)) + +myapp:$(OBJECTS) +#自动化变量 $^表示所有依赖,$@表示目标 + gcc $^ -o $@ + +#通配符,比如: +#o:%.c -> main.o:main.c +#gcc -c $^ -o $@ -> gcc -c main.c -o main.o +%.o:%.c + gcc -c $^ -o $@ + +.PHONY:clean +clean: + - rm -f *.o + - rm -f myapp +``` + +- wildcard +- patsubst +- `*`和`%`通配符 +- 通过“.PHONY”特殊目标将“clean”目标声明为伪目标。避免当磁盘上存在一个名为“clean”文件时,目标“clean”所在规则的命令无法执行 +- 在命令行之前使用“-”,意思是忽略命令“rm”的执行错误 + +### 递归展开式 + +示例: + +```MakeFile +#所有.c源文件,wildcard用于获取所有的.c文件 +SOURCES=$(wildcard *.c) +#patsubst把.c后缀,替换成.o后缀 +OBJECTS=$(patsubst %.c,%.o,$(SOURCES)) + +#递归展开式 +#可以引用还没有定义的变量,展开是引用时展开 +str2=$(str1) +str1=hello + +#直接展开式 +#必须引用定义好了的变量,定义之后就会展开 +str3 := android +str4 := $(str3) +str5 := $(str1) world + +#变量的值追加 +str5 += hello + +#自定义函数 +myfun=$2 $1 +#变量等于函数的执行结构 +myfun_ret=$(call myfun,20,10) + +#加上`@`符号可以避免输出命令本身 +test: + @echo $(SOURCES) + @echo $(OBJECTS) + @echo $(str2) + @echo $(str4) + @echo $(str5) + @echo $(myfun_ret) + @echo $(call myfun,30,40) +``` + +--- +## 2 Makefile总述 + +### Makefile的内容 + +在一个完整的Makefile中,包含了5个东西:**显式规则、隐含规则、变量定义、指示符和注释。** + +- 显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件(Makefile的目标文件)。 +- 隐含规则:它是make根据一类目标文件(典型的是根据文件名的后缀)而自动推导出来的规则。make根据目标文件的名,自动产生目标的依赖文件并使用默认的命令来对目标进行更新(建立一个规则) +- 变量定义:使用一个字符或字符串代表一段文本串,当定义了一个变量以后,Makefile后续在需要使用此文本串的地方,通过引用这个变量来实现对文本串的使用 +- Makefile指示符:指示符指明在make程序读取makefile文件过程中所要执行的一个动作。其中包括: +- 读取一个文件,读取给定文件名的文件,将其内容作为makefile文件的一部分 +- 决定(通常是根据一个变量的得值)处理或者忽略Makefile中的某一特定部分 +- 定义一个多行变量 +- 注释:Makefile中“#”字符后的内容被作为是注释内容 + +### makefile文件的命名 + +默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”。 +通常应该使用“Makefile”作为一个makefile的文件名。不推荐使用“GNUmakefile”,因为以此命名的文件只有“GNU make”才可以识别,而其他版本的make程序只会在工作目录下“makefile”和“Makefile”这两个文件。 + +当makefile文件的命名不是这三个任何一个时,需要通过make的“-f”或者“--file”选项来指定make读取的makefile文件 + +### 包含其它makefile文件 + +Makefile中包含其它文件所需要使用的关键字是“include”,和c语言对头文件的包含方式一致。"include”指示符告诉make暂停读取当前的Makefile,而转去读取“include”指定的一个或者多个文件,完成以后再继续当前Makefile的读取。Makefile中指示符“include”书写在独立的一行。 + +```MakeFile +# FILENAMES是shell所支持的文件名(可以使用通配符) +include FILENAMES... +``` + +通常指示符“include”用在以下场合: + +- 有多个不同的程序,由不同目录下的几个独立的Makefile来描述其重建规则。它们需要使用一组通用的变量定义或者模式规则 +- 当根据源文件自动产生依赖文件时;我们可以将自动产生的依赖关系保存在另外一个文件中,主Makefile使用指示符“include”包含这些文件。这样的做法比直接在主Makefile中追加依赖文件的方法要明智的多。 + +如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile...),而且当前目录下也不存在此文件;make将根据文件名试图在以下几个目录下查找: + +- 首先,查找使用命令行选项“-I”或者“--include-dir”指定的目录 +- 依此搜索以下几个目录(如果其存在):“/usr/gnu/include”、“/usr/local/include”和“/usr/include”。 +- 当在这些目录下都没有找到“include”指定的文件时,make将会提示一个包含文件未找到的告警提示,但是不会立刻退出。而是继续处理Makefile的后续内容。当完成读取整个Makefile后,make将试图使用规则来创建通过指示符“include”指定的但未找到的文件,当不能创建它时(没有创建这个文件的规则),make将提示致命错误并退出。 + +### 变量 + +#### MAKEFILES + +如果在当前环境定义了一个“MAKEFILES”环境变量,make执行时首先将此变量的值作为需要读入的Makefile文件,多个文件之间使用空格分开。 + +如果文件名非绝对路径而且当前目录也不存在此文件,make会在一些默认的目录去寻找,参数上面**包含其它makefile文件**,另外: + +- 环境变量指定的makefile文件中的“目标”不会被作为make执行的“终极目标” +- 环境变量所定义的文件列表,在执行make时,如果不能找到其中某一个文件(不存在或者无法创建)。make不会提示错误,也不退出 +- make在执行时,首先读取的是环境变量“MAKEFILES”所指定的文件列表,之后才是工作目录下的makefile文件,“include”所指定的文件是在make发现此关键字的时、暂停正在读取的文件而转去读取“include”所指定的文件。 + +#### MAKEFILE_LIST + +make程序在读取多个makefile文件时,包括由环境变量“MAKEFILES”指定、命令行指、当前工作下的默认的以及使用指示符“include”指定包含的,在对这些文件进行解析执行之前make读取的文件名将会被自动依次追加到变量“MAKEFILE_LIST”的定义域中。 +这样我们就可以通过测试此变量的最后一个字来获取当前make程序正在处理的makefile文件名。具体地说就是在一个makefile文件中如果使用指示符“include”包含另外一个文件之后,变量“MAKEFILE_LIST”的最后一个字只可能是指示符“include”指定所要包含的那个文件的名字。 + +```MakeFile +name1 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +include inc.mk +name2 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +all: +@echo name1 = $(name1) +@echo name2 = $(name2) +``` + +执行make,则看到的将是如下的结果`name1 = Makefile name2 = inc.mk` + +words函数说明 + +- 函数名称:统计单词数目函数—words。 +- 函数功能:字算字串“TEXT”中单词的数目。 +- 返回值:“TEXT”字串中的单词数。 +- 示例:`$(words, foo bar)` 返回值是“2”。所以字串“TEXT”的最后一个单词就是:`$(word $(words TEXT),TEXT)`。 + +#### .VARIABLES + +GNU make支持一个特殊的变量,此变量不能通过任何途经给它赋值。它被展开为一个特定的值。一个重要的特殊的变量是“.VARIABLES”。它被展开以后是此引用点之前、makefile文件中所定义的所有全局变量列表。包括:空变量(未赋值的变量)和make的内嵌变量,但不包含目标指定的变量,目标指定变量值在特定目标的上下文有效。 + +--- +## 引用 + +- GNU make中文手册 +- [跟我一起写Makefile](https://seisman.github.io/how-to-write-makefile/overview.html) \ No newline at end of file diff --git "a/Linux/Linux\345\255\246\344\271\240\350\265\204\346\226\231.md" "b/Linux/Linux\345\255\246\344\271\240\350\265\204\346\226\231.md" new file mode 100644 index 00000000..af41adad --- /dev/null +++ "b/Linux/Linux\345\255\246\344\271\240\350\265\204\346\226\231.md" @@ -0,0 +1,8 @@ +## 学习资料 + +- [《鸟哥的Linux私房菜》](http://linux.vbird.org/new_linux.php) +- [鸟哥的Linux私房菜简体首页](http://cn.linux.vbird.org/) +- [《Java 程序员眼中的 Linux》](https://github.com/judasn/Linux-Tutorial) +- [菜鸟课堂](http://www.runoob.com/linux/Linux-intro.html) +- [zshguide](https://github.com/goreliu/zshguide) +- [Awesome-Linux-Software-zh_CN](https://github.com/alim0x/Awesome-Linux-Software-zh_CN) \ No newline at end of file diff --git "a/Linux/Linux\347\226\221\351\227\256\350\256\260\345\275\225.md" "b/Linux/Linux\347\226\221\351\227\256\350\256\260\345\275\225.md" new file mode 100644 index 00000000..05cf7c9c --- /dev/null +++ "b/Linux/Linux\347\226\221\351\227\256\350\256\260\345\275\225.md" @@ -0,0 +1,57 @@ +# Linux 疑问记录 + +--- +## 1 `/etc/shells` 文件用途 + +`/etc/shells` 是一个有效登陆shell的列表,在调用 chsh 改变登陆 shell 时,会查询这个文件。如果登录的 shell 不在 `/etc/shells` 里,普通用户调用 chsh 失败。root 调用会出现 warning。另外一些程序会根据这个文件来判断一个用户是否是有效用户,例如 FTP 服务会阻止那些 shell 不在 /etc/shells 里的用户登陆。 + +--- +## 2 Linux用户管理 + +Linux用户管理最重要的两个文件就是 `/etc/passwd` 和 `/etc/shadow` 这两个文件。其中 `/etc/passwd` 是用来存储登陆用户信息的,它的基本格式如下: + +``` +root:x:0:0:root:/root:/bin/bash +daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin +bin:x:2:2:bin:/bin:/usr/sbin/nologin +sys:x:3:3:sys:/dev:/usr/sbin/nologin +sync:x:4:65534:sync:/bin:/bin/sync +games:x:5:60:games:/usr/games:/usr/sbin/nologin +man:x:6:12:man:/var/cache/man:/usr/sbin/nologin +``` + +由上面的格式可以看出,每一行代表一个用户的信息,一共包括 7 个字段的信息,每个字段的信息用冒号隔开。这 7 个字段分别代表: + +1. 账号名称:即登陆时的用户名 +2. 密码:早期UNIX系统的密码是放在这个文件中的,但因为这个文件的特性是所有程序都能够读取,所以,这样很容易造成数据被窃取,因此后来就将这个字段的密码数据改放到 `/etc/shadow`中 +3. UID:用户ID,每个账号名称对应一个UID,通常 `UID=0` 表示root管理员 +4. GID:组ID,与 `/etc/group` 有关,`/etc/group` 与 `/etc/passwd` 差不多,是用来规范用户组信息的 +5. 用户信息说明栏: 用来解释这个账号是干什么的 +6. Home目录:即用户登陆以后跳转到的目录,以root用户为例,`/root` 是它的家目录,所以 root 用户登陆以后就跳转到 `/root` 目录这里 +7. Shell:用户使用的shell,通常使用 `/bin/bash` 这个 shell,这也就是为什么登陆Linux时默认的shell是bash的原因,就是在这里设置的,如果要想更改登陆后使用的shell,可以在这里修改。 + +--- +## 3 特殊的 shell:`/sbin/nologin` + +使用了这个 shell 的用户即使有了口令,进行登陆操作时也无法登陆,如果尝试登录会出现如下的信息: + + This account is currently not available + +所谓的**无法登陆**指的仅是:这个使用者无法使用 bash 或其他 shell 来登陆系统, 并不是说这个账号就无法使用其他的系统资源。 + +如果我想要让某个具有 /sbin/nologin 的使用者知道,他们不能登入主机时,可以创建`/etc/nologin.txt`文件, 并且在这个档案内说明不能登录的原因,那么下次当这个用户想要登入系统时, 屏幕上出现的就会是 `/etc/nologin.txt` 这个档案的内容,而不是预设的内容了。 + +nologin 的作用就是限制某些用户通过 ssh 登陆到 shell 上。有时候为了进行系统维护工作,临时禁止其他用户登录,可以使用 nologin 文件,具体做法是在/etc/目录下创建一个名称为 nologin 的文件。例如: + +``` +touch /etc/nologin +echo disable login by admin temperarily! > etc/nologin +``` + +当用户试图登陆时,将会给用户显示 "disable login by admin temperarily!",当系统维护结束以后,再删除 `/etc/nologin` 文件,其他用户就又可以恢复登陆了,这只是限于能登陆 shell 的用户来说的,对于那些登陆shell为 `/sbin/nologin` 的用户来说没有影响,因为他们本身就无法登陆shell。 + + +具体参考: + +- [第十四章、Linux 账号管理与 ACL 权限配置](http://cn.linux.vbird.org/linux_basic/0410accountmanager.php#nologin) +- [linux中/etc/nologin文件的作用](https://blog.csdn.net/zhouhuakang/article/details/51168104) \ No newline at end of file diff --git a/Linux/README.md b/Linux/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/Linux/index_files/0ab2d71b-ddd3-471d-9133-5b1ec930be08.jpg b/Linux/index_files/0ab2d71b-ddd3-471d-9133-5b1ec930be08.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3efc59c364b708ebb5747cbf454e7a946b4e7b80 GIT binary patch literal 71732 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 z zF}2GqJX+e~&qr<2jMCnu9&Z07(g@l1dFL--MXg?xMsi0gal94LbbA9Bsfyg?mlCJpd%(q1#Wtlp_@6?Q?a z1noqZI!Im6u6bWnx)jfL)u_Pgf4M$*L-GE`NKos>x1V)gZ!BJPGgdz;I0TP$T|by2 zz^b^@@{J`=b_A4CE6Zus3~ViF-}rF8=XYVmlUm^Y%T%n8TYDw*+6);Yi=2^y)(MO( z_YD~DCg>>Z!S8l9r^UDG!}7P{zG}(XW?)nWn5jyIIOEh*^l#-Bc`7jk=)bGb&a;2S zmZMGF?H&8h!Pm3Jy2WyR?Q{GJ*{(OzhPWL%dda&R`O^ZTRkZNO=PT@}Y9-44j4XDr zCno+yR29bMfjPdVC!@Ftv7Wi7x}nuXK+R?@L`&U$mjomw8lnz*+8>5k8$V8|N*oJU z=1aZ>ax!cNiUaF#WFST-5rRme{b>+&^IxJ!#k>-S#F=Ig>SHRswJyL&(-}@a+*E*O zk{2;_{0G1F&A(jkE^#upA0Ti_gQ6>C zi#C!$y?w|)MkF2@v$jzipoF6|nozR2gnV@{k=!wXCsy5S922SzQg*7WTq%%scbCrn z92~Q3_WjTx zP(#^PyHK)ftd|y7yB3pZYk{vb$@*{D{L{;5l|pF!5Oq&~2^ZyJ}dq z=pc5-dJER^g0@<0N@{tt`AL%5+}2sL25ck0m+h_ShSZH;3%~a)jB(@BeV*8t9nccv zEuTlHVJv&=?YZ~DDP^<;ody_Ir0;dIxg|OB6e5sHhjLGL&T38|CFkjG@VKMSi|w6e zM5;*Lf+bTUcxpa#l+G+}mA!FBQiFS%NiRdDIDJ!^k~#A8Otdo_(ltCS;ejE;|qcQp+G5&azS2q4YeAq#(r=8AnmvF(o?E##60oH5_N z)_jXCsGB&RvuUV*FFHi~bUsIeGuc?$D}3grCGd2vPa*huLpRDQ-j zSd!T-IiVhRGe?8hvSUJpqG42FY@dJivn3h5ixbo6gO1K9ZuWVpMeXE}w_}0IhgPM^ z`8r#)S(I^Ah?J3_`{y~={=4oOUC8oQdSpLOL=Z9l<)zBli8%;zsgk`kx66_0r6E!n z^SOv4z}or8tQvchg4DE9gcAAgi4G;+?gdV<1c6~{lRDIXtz&w?EmME*i~d`0da~ih zfPUr&Z;oNY2S;B$buNBmNhSc!Q^fIKqKjSBv2#=5pAM30MKOy%CQ`{h+{u9@%66<} zHnhjyA$l7|Q`TfMO2U2w)Mf`=UAB@ozU<3_L;aJjgzaYM+;R;E$Ck%&#(4m{h#=6I z95+*Krfe~2ky|tZ0j>}KvoYdGElKOTrXBEfQW60TzRkjs72C7c^^by34~I*J_;fe( z6G(6W`sX}?lWa3)x}(dS=jpT}+ix|%b^@&L$3kub7P9IayrhDH-7?=kX>Eg+^JeJLoymx!_8%GvL>$`^hdR4|x#EDUZP1yF5m8LqaHaqRcnwm*{ zVOU{fO!)}KE}foV)J1Nuc1i!LOVp7@G31$2jfi#AWO1gH$E*f3dnbq4TPpA6&D{0E zy4WiOagN;JVs7M-B(iIXW)VvF$V^U4VejPq{bvzF z=)mhZ3g`|1JrGpnz(b1RcHNYxAm))30j7$o)y>J{V?!YrF=g}j*xlSdqRkk?emq-( z>b+fuz!Fw8po4i>b+uCf$)7TSp!Ubab2er4H3#QE@2I@&tlpO^wW{B21{^m!dXquy zGX#Z>j$G~fDM?-@)V(SmW2&zK#D_`ob;+Sg0;7tL98C;DFTqfHX;zlZp76__SH?@7 zFki0PN_IN?PzftHy}7THOz(H}@R09*i1!Gn0E=Q5Aa&PxYJHe0cKG2S^d;_w>-J`F zldQ!Io9D2}w+sN?XRFmA07Yy)gg=M-eD~|^f&>0eOmU=#>ymATKa-K=VoOWHe9RGm z%JP5eLI(6ms(wPFEWd$x^_A3KU4ei&r#>oEe-supp@sC-{AC+h|V2MlSC5+ zdz|)cKxFNP?gsx)T6gz(0rxvHJ6bEC8}QKnMuUKzh2}}eLJD9+#;zEn;0b|q! z*G7D)#g4(A2m6AS`|0a))uCEeGkymOL4SDh&_? zqO7a;0tDRh=c_wpb;*;6_ITf=Sle(Jt8co>^!p{Rlmt6pv%!Op@y=;FUqkM;Ou7{D z4ArAv(0daj-_o~G3Cy$t8D#_`;cY5frJ*roNe7#~AG@;R*88*Fydun7>1eF~v#Xr- zjW;?TJ%CDi&;y}#5!yptNmg1n>4@Di*0W!K<*M20H253L%t{W_BLt%k?kE=xRXccW zMVFffR*yLok#ovNMa*RdC-?>LjH15=s83ebErkX>XdM+q*4=_oo0~h(olW?rJ?Z=U zou&J&tF4|I%hTg>5Tl52tMbZHXhZYf)bM1Q$&2v){q^*PT7;sO=%!3zi*M}NA$U6Gs~_yL?8oM-Y#P=M;`}P!%6W4DEQ`C;9m|1 z3wk{bI5Zt5Y1LJu{4|83O+4fN8MsJ557ssR4!m863>v+Dz^R0Gb9|e2Zbt<>ld)gvdS)&ErD5`t>QC|h*!O`Xqnwiis zMwlSdHv+vyY_1UMSj`#iNSF&)pKIIr^W@B&!eqE=|Bp7eZ75pknB`&DA|F0dp+4QJ zw6}1!@U;G{=DbFAlj&2;;SCuAe|%S)HzgguwuheH+gpyS<dt$)D@Oy8m#6;nL1`j8 z8m8J)Bh>kAJD5A6P#_*5bVN|FE09X@XEyO#KsC(#92}0V^iyJ9({Fp-c{++0flPRr z3bAd=d1o|;4wY;nNehVXaa;AIAH@41OLZ1&XCN1sA1~INsv8jKjerxajMG5983G6x z+6V`)2(WmwJR7iUnsj!`*!o#DbpzxB+H8Zunf@6)?zm|$_n|qk>IgE#GnWAqHl2}i z^0j|`rQ7c=n=f;huh9e6aWd)N$J?Ko=J7pD$R3}{#0yp~?JthFy!i|BfIa1H(=wIs zEzgbG4wA#gxPCt$L!c>vm%vBHTYxRVez_T?M507O^zZ+;^trwd+#v8g#^_wq>?4l9 z{fbgrPV6{zXXRYIwvo@h60FUCuc(Rb=!G!gd9*WiMgiNW1D!avbwh14d@OP~i#TRn z+oK%H3aYO|H9NpeH=Ex7ByvzzWDEvp$!^Z0zx+{T#NG`Ldhmyp52qMg2KC8ko9b=U zG9BTvJp3IK9Jh*=fSYy(-5V!RT48b@{B|^nk((~#ip?&{?oT_lpS;?T8Inc?ECl?@ zJX>Y-|Mt!M<(|0&$`slb`&G7$Opw0|#i#l3%+pasEs!PmaL3cPExX}k-Idfu*Q^8E zw~l+lRjW;}l6PgbyM1JM*pX(A7GiBlR~wVn#mTRNg`CroGFwlH6oORUs&{0U1+#0z(F2fXt4YdWl9Kay;wDz>kr z1X`Z}*{bl8VjcNuAd_$-qVHbkX|;wOG*z$oyb_5$u<;KtPahK;;d$i|_o%=Gu-^Ze znO!;=ULTi~CucA-FYk8&PmkaG?u1bo|GJhqP#q*P(|`%A zy0GXjHtF|b4zW)68lvj#{P8y6x@n`~INIetJOUG5C7iyJ>~Ixv`|5bq!YuP+b#c6+ z#j7}aA5K3**edd-J&+S1IdG{L@;^#cGUSI) z?Tu>a-H)lucGO>w&Rsqq9ascoUAh*f@zOY31c;!LEwLvlh@>cRQ$)H*pjDQ=Vx>4M zf4vA7yCY8tTnVZ1q}_7D@vEsHHCQW(pf$6<`;J7}m*C_HL1(%H8*Ly=S_qhHRfh^* z@-nLHu)8P2B9gT*ZA%fhM*1i_9PF0hcQR}j({Cy2xk!h4zV$|1qZ}qt#e&p5PCfPB zb<^*iC|qTnNYXQrK19O|T5_ybUGA9UyG@#!BKoeGn#SA5!1WL2ckVNW%W^r~`#oQ* zMXgp11-w~d@<2vL+3*7b>qG1JG8${uP2bLojm@gBWrC@7Q#*PDyLNkS7lu&48HuCf zR~ou0i5-I;V4X5Ha!bt}Ex0>!dY!APe_GC$$r}kjK`^89Yn3X-bz=?2zu{>w&i@j5 z<%soYW>Lqg*<4M{p?_cyD`rr4`@3I%y$iU)9#;9=u-(o82oEt$|f*Tnkmrh|rC1}?3O2yMTAiBHIYQoM5M2uxq#^t~3eA*BAn z#pVtMKIodt!XN7cVlbi61esj{CWA3g5JP}QOD)zcl0MEw4X1iF=zNcx45rNJ_qt4qdBRbz;yH| zJq&m=B`Hw#y2q#Ex88yV0#-Dy4gPAP#*y@%`u$rwdndBf%Eor;MF*b@n?}<17lHsT$&>(YtPQz$Jj^NpK#>N8zC`>Kqk_*S z!62vc+$k@FUdXL`K!;w|A1bC@Ldc`j>MFuxifnv*D`re>IGa7yeg!?j#U+-*<%YU~ zm`U^CK}^MyJmK4ircJ`anzt5B2mc{5d!Of@m26S73<*}0#KJO%S2}3%wJKWpsp3b0 zA4Drd85w*3j9APw%-??cvf&{)LrT}lE8 zpyF}|DZndUPJ%@$lp>07f8eB%vRzTm?u0TjQHs8=9B$~ zB0L7uZP0EDtr+qx*5J0~tZ~1~nVbWKo)*9As8fr7&j6ZD@+1fh4zmuH5C{lhx6F2N zO?mwuP(Xs;0LhMDwR;)41Z`o;$oXu2GQ;uO7eV7Kp(zP_=j}GHM_l=9=S?j`TFGje{gO>V6xFFv{|f0FA&G1TK%b2x;*tH6>KwbenvY^x zEqzb^Ir+W=Q4s8M?QLZ-mK?u67|OdOXQk}M!2Q4~!A18?gkOT%+9sw1w3nQ_2@hA* zB|yv$v&Rn1BgH#(7a6A7(n;J#bMijRdpxWWRU$F14j7$}8I|Jjv>tcpBTw;k_HRv7 z()SYTH6P0ot;Vckk#aPs12sy1zt<^gMVE-gbCrO_aLMw|gUl1C>cZ8cxjBo?;(&i} z5<%Q!o-UO3UrqnyFpj_YHaDYFPFnWJ;hvcKA?%gLccR-wH}owIngXCeoRA#=(V6*Jo}znS+na8~YrNU^)d-AYd0 zc5tRB^r~Q5aM6$ZGo!}Lx1rNE&5OPlr9eb<;|+laV}A_aXKymceO+Sc3v$uvzc75! zt%ggfpL)l<>=q+{#7CX)z7(L1DC0GRH18)VSq-?ef`+l4HH>donVq+@Hm1w=HUq~t z#+h3J9oMH(2!Eh3a$;dvGBz=>s%mCHT`R$?bT8>nP>Piqc40B%@e%#c_qnMy%phcu zHF{jP;$z>4Q4sV)G=0PkW4BJE3tXuJ|5umzNU+Whm|R20EnbYBGuyqfgn2{2cU_ z@v9LWuJ$`Oz=usD!`BL@%R;Y<0KfYxZ z!n6e~#)tM?}aP#U)i08@#_B7 zDw7?H2}uQm(@g^?W9l2N$jCoWzw^laQV_@`@K$k{6q-1kCv0^d%R!g|{sEeYOXr8& zyxi-lUrZ=lajuUupR&jW^4BfO<7j_<_T2Jn*%H(|w_PZ)3=0(9GC}}fHIG37tjSsO z<$W$#Y%EV-#%Y-CbaN2W*Uo9?=c}KCttXhw0(`d__F^!@xyr}#TlTN7gM$ngiN+E^ zH2%gwoe-tn-DWzC9E@G6ssm?Yw0O;crC+j!+KP&`J&mpk(Z4$aTmJt^V$lCLZT#x) z50i-46PDMV89L$IfRV)3!9xpt`&Fd0y8B$5FDT3jProYtv7L1bS>muUxZg8;`g!k! zR6qM&CTQoOl2?b0<4W11#?8>~$>Ob-_j_CBMw+4vUh1wvm8V)k7$Jm_xyP$XNycJr zOPkbn5RfW9ad$UXd^oFG zXyt64no7_mtTS`b>WRBGn^QXBRI7Mm@|q@50-w2>nqD26^*+j{CnCaI$ORh(@n7YE z%`xQMXByeZJ6=t(u?i;(L^q=M|ih~%mbV<6*E zbB*3wvgQsH)C|u);m@6MEr^JDR6tiXrcm&wsz5;+h}zYuMYqbY%)!{_w~n|fDWNVt zZuUqwGVLkaE5$Fkd(!L7prpu%@C5TU))tNH$K&m*Ns z6uINCC9MzJRHV>s1*cCY8VtwyeJ`Us5p49vuvYUEZ|Cdc%G4j{ynRp1Y7CxV1g<(XhoR;j z0+ZJPC=Q1p5O=_@cWL9@NSDy^ay@^A!qy^|iK8jSm;x2!#t9d})g?Cv@ck_3 zByQb{s8krGUj6v;_oOI^F!_zEn zX9Pv5GRo&%>g|{c?QsOA-)Z6jc3;>py91A_=5B5(n!{dC1=_v?5CNjqdaX|N;Bq8> zEhw>X>I(JZX5f?Kj^oTQEvTIvf+r2;!u9j>!Z#Yh-zVQoJs|c$gY@WAC87Z3z(NOL z;D%z6eif&K*AU!WB`vM2?F7xl6iX%Z4a^pXFsw0S+T^AJW2JQ~e&Yi=?i`VsgV~d! zGc^yO9m=a$Xx%?fRZ!kKhX&G+2;1d*b2;gNFD*)e``Y*cb>I5J>XE(y9ar*YH&DAC zR74ONtp>YcVy&LxXnZnC!uLE+vI(+W9|Uf9dZ)QPP^f!q3f@;CPf~PTTLl=?Oa|P2 zgF@7|Qz?azEUz!+9t5$OdI}t!vpp}}N}ymk$~c^Ur`t@bz%t)t;dv9UmMS|5M`&ST zl^GHhsFsR%UfyYo~Jh-=Z(yHG9+GGl9$p5halkTtMKI zc$jrjC(H5>tl9gH%dXa(v$;&TEK`vkdp>S${KZAF&%)}HyW)pwnJO5)g_IjAdp58@ zCoMeY1maaH87s0&k@W03Fsrrq$-!>mPA;Whk@T*>_66X<$Lc_&x>iK%7VT2{Q$fzT zCa}|kyJN>Q$Gp1#X<{(rTC{C&zgSYkYjx-KHO4=zKp00t8eN*bnYcXy)WKmW1a0?ar5rr4O-R1e)CB%!w2p*x3ZyC#6!;AC(zaNeY4v8!h|UM0*25 zaq|6W2sOYgTI6ojsg)}794~6F5g6O=%BHf@8~!2ro7|1ObYxQDhJdEb{BqlM-B#qq;QPanM%tn9qW z`YfMXE(+%|>tf!74!Vmk7s%GSG$7ShR`vI|s`TQDTo7&@{zfI09Gt@PMBvlctFNt~ zQn;Pg*vSY5JVT^*i^`!^tH?1?jnyjFYOu$u`|c}^MIZ%W+(FafsB{P3zj6?Dti=NA zp>NJ!IM+gcp!j%wWq?IBLX)*3|5*=qsuTMa*;qQwh^&EeRoSGul9aJ78 zod}J8?9#4zGoSw@DoMRoBS3R24k4$g|r{(Lb^yRLO2a!f2gR7WTSM@5%T}MY||y4nZa%pG~1fiPy?A7wZdDoHEs} zd+ls@+hY0KpjN`Y#|q8pP8$6{gS127LJV6yx!SnaT<|j)!XW$=I93~a?*TPk=Len; zlnFejZ<<{CMY!!8TSJ&sxGM#*ytBtXe$QeUJ93(jr3`Op!9%ps#|Ly~P&x3;arNV- zmAKgz>b+|HtR}9ew^E6H;u+^^QDz3;ithKSYCU(;?YDG2$zjjhllJd0A8Bs|Eb6y! zVil{9ruZy-`Xk7XoafCn(^P>OT%URxgpckn$TO@yb}vX0|6ZxY7zDU^$qL7gVN%l| z8ho;LZH_T@mwvoX+*DD@8Z^bmTZBL2#*MC!rUM8StN><>tt)DMIqN&E7^Ru5Wz1Ox z6Y@75S@b(7J3~ZvKt)0o+3sut+UbW9vq|o++R}U6T>>6X`nEu)%i%OENmeZW)3K}q zGz{mnr-QvT!HUE=In|9&YgO)KxNqgy7Q#*~U^b#79BQEtVni-b^Gxf2VLb__QUA%c z&WcNtMGbuPq)gSwS3e-uWY%P%H8t9~{4(OGC_ick%myS=Z}7iq%aAv0pa_Uy`{w=Q zKo?yeG-Ppq{F*%gj;)TU`UfrNG(IHp^}V-j9DO3)vl~4&iOS5bg_D}ot*L#JC3<2g zS>rZEoxFAV_eBekyyoyWiZ+2r5m4Y7&UnE z&W@Iy27xKnFZ!%31Edzjuz1=~Nlsd~xkLM!g}{PG;9PoG*_)?Z8CMomS6|l1g-!Ye z=GCXJf9>>^Ftp|3N=|qdnlm%(dtFv;pDKNbmw0m`J z2f7Q@OlbbFZ~olE_9L6(DJ}o}U(8Mh?-(BIhlKy}=!14aC!#kr3NZW=o{pMX4Zu(0 zzKRg7>NCqI6W$xVMfvX^o{x|Hd)?*V=`sJ+>;FxyrsoZy_drHXZJXXAwwft_1{)A; z0M+^S$RvV)cw$Y|kq&t^^X59gF2L$vFQX?Bk1ebVt``^)Uf1@Qe)=w5Cl20K^k-d= zHOs$5L^S5dGfvT_@489azLJ3rmrQWw zHtZ@q5nawdbZU+c22O z{Is^mu;e*Noz4pFUr|ccTzx!g^LLWti9UuIzDnno@(vllc<96F_;ZY7;AZh(B7j67 z%Zw>gyJX&$x_Glw4qxq>b%`X_{Q9TwoKw%LZ#{M8->_H*(^gU0&9{nFMu8@K(3~TyWcd;k!E5F zlN#(CUlfR3w@=Bi7S`fM?~L{O*0~u)l^FxUrEcHzT$c=MSp#zey%Y_9h18Y?zN$%! z`Lfw1@$Uq_OLF{>St~Tq&|usXRClgXWDYLgp40U)wEAYGOcYg9zq#qaW|g6?WGV6x z%IYLX85N*}bQE|v!V=rq5>^t+aG#OY=)pbn871kbke7%q?JtCX@K9`p>F6HPa;(y- zCAR7WnkGI%_B!D*uR+y3EKRVVm=utwp(|1~w$0UXvHo|gvA=4_+^Va%2FQMpAd?1f z-FmOC&m*Il5_3fIwQ6@Q={j*De8r4{M;Jc%`V-RMsotX&8kk=<;jw9O6}p);CA@dd zg?ILsj}D*M-I!sIMAH9UU?M(ycxD|*@${CP(IUlFH~~^+QiG$bD1nRZW329^Q{<(O z<14i}3&fzrNN6O1sq&k^yqmr{2j)G&QeOfnMQkYL9Po*QglwAto`;0vU zRy^S+OfF>g1*HGjjh~JP46ypO|0Uw{&SH80XjyXa<^|&hs%2u|s{NAK%xK2kn6n`x zthM2Gq3e@QX1-)7vo+gECBLoyDnnh`yq}Q;)!>dn+5JHc0n%=3koYLmS(9 z?u$JwgZpTwbE#53bb9|Rp#Hny-INgZyWT5t0^fTB1-XW4g*R7!XE?_CjzervXQKA` zQ3aoQ^P`CV^AMN-L|q8T0YY{y4R`60+pVIAb)M+=>{1f-*0`0pGD?{)w(829m}U4` z4|Y~KHI=TL9IaX zll!E=`Tlc?tN|bD{$>WUIslLt;1_#wxj2%(t`Wn=#>V2WTNq$1?e}3qK^5-w}^e{k^^NEwfR!Q{MeePB~m*XE?xSRmiUYnzId!y4;dv zF~Egtxv>$;5CIQf;9wv!P@th%Ta3*f`JgCAc!oz5&TR!T+Qk_f2&ns@Uv& zd$RjDRD2&^@I{hkgwYCJPAhwbs#t9z(es~B=VY30LB1LX%~{?S>g%pF2dX*M?JOsm z)buBe90LJrNstuT?Z~4|l;$Nr3-;aE{LBsZR~&@mM&@1oIJtF6Qe+mK>n>h8k0p zxZR&w>~}VPusKm&Y-%${7y79h_<)L&@nCu)UI}g2i$OJ&?707co%Lc^UG=GH?xSml z_Pacd&S9In3}L|aS(*?ukK`Esf!2a2yyyo7AEZLvACD|qCRjyW-gR1b#!eE_E(`~e zVtGWh{4o*;Aegj1T~_D7aVE{&;iqS@70~SR)3XLc=VjY)^Ck8&G}F|On-y^4i# zyFucjr|ks3^_k}=Yk+CI{$ffh+QFaVN=7D!{k}@BgcG6&6Y-5@!j+&Jz|CGL`p9+)^_d~#>ksG+3Vy{bPqhp z#}iRO9EL_^_T$>`103G3`{4c`XKsMa3=-I8KyZQZppz&iG&P~)Y{nbLR>}WY4#+5P+rzM zpsnS2H7l%0z`d3_a3v^7rm(^zpxyREnBbJch7?e)-FgUuo(-sTy_^g?z%f(dOa;Fb z2&l;0HE{$ihP%x4DGSs~-O1iEpBi7P|&EzTH(m+Dg zDXNOD);c896iRWXCC0B*$(@Zymsf4W8Z;_ynzA!zS_ohoym;Iq3Lk7turtECpE&OM znyb?oMG9sm@qT_!NsAMBEQtNJ@cf#(w(=uO{Ky)3+!Ug1$S1>gx*awV9($?dye8)a z$AQZEfyHVH<*DoMt48-@Wy%%%jd}ilGYr%?dkYqU0H!WhJp^ojq17o6UpKf8SGE@Q zxpQHGm-W5H76nIMUgeKh%SkgHT?TOB6I$hSZ1>^9ZXQE489v_<(s)Dv-hOe<_J_xc zbiN}Zt%k6@>16JhyIqEvR4rdPpVpr1k{`?NlmT>Kgi2)WL=PHWn^U{UR;-bYC zk1+lDDX~o#xd5VqdV|;j1lhJcp+vUoiR71&(@2n7r3oKptXyOR*hhe_hdcS z<}N{q(u3-&rRLbcm_f6~UfXzVb*FxQ33Fy&Jg4KgQR*t=&H1Wcsl#D5-Nt?phjUI7 zA49U1yn+tu%#|8{O0)bIcmG-!5oy*i2+v|HaD6HQmG;**M)BuC>{yVeDrjzf?lMYR zgLH1c@ZyCVn07c>GNLRF9YrX#9hLsxJ*6uaf;GrIrUa%U)qx2{$&j@F!TRySKd9#b RxhY!lYhljc9;3DAe*mu4JmvrZ literal 0 HcmV?d00001 diff --git a/Linux/index_files/1a98b4de-a72b-453c-b540-6fd92daa640b.jpg b/Linux/index_files/1a98b4de-a72b-453c-b540-6fd92daa640b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3585ec444d8f3b93f39e9fe4db6e5cd2016610b0 GIT binary patch literal 23538 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 literal 0 HcmV?d00001 diff --git a/Linux/index_files/4ca9cec4-5bab-4209-ad14-ba28469df87d.jpg b/Linux/index_files/4ca9cec4-5bab-4209-ad14-ba28469df87d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4711719157c07dab8a9d83b61569026f3a3636f7 GIT binary patch literal 53414 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 literal 0 HcmV?d00001 diff --git a/Linux/index_files/e4099b48-8722-4998-9dd7-0ce9fa824b35.jpg b/Linux/index_files/e4099b48-8722-4998-9dd7-0ce9fa824b35.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e378f440a307bcee049a1025c01952e0c3f8d0bc GIT binary patch literal 26041 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 B)G+`6 literal 0 HcmV?d00001 diff --git "a/Linux/ubuntu\344\270\213\346\220\255\345\273\272Android\345\274\200\345\217\221\347\216\257\345\242\203.md" "b/Linux/ubuntu\344\270\213\346\220\255\345\273\272Android\345\274\200\345\217\221\347\216\257\345\242\203.md" new file mode 100644 index 00000000..a274f203 --- /dev/null +++ "b/Linux/ubuntu\344\270\213\346\220\255\345\273\272Android\345\274\200\345\217\221\347\216\257\345\242\203.md" @@ -0,0 +1,115 @@ +## gradle + +``` +sudo add-apt-repository ppa:cwchien/gradle +sudo apt-get update +sudo apt-get install gradle + +export GRADLE_HOME=/opt/gradle-4.2.1 +export PATH=$GRADLE_HOME/bin:$PATH +``` + +## SDK + +配置SDK环境变量 + +``` +下载 +wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz +tar -xvf android-sdk_r24.2-linux.tgz +cd android-sdk-linux/tools +执行 .android 打开图形化界面更新AndroidSDK + +配置环境变量 +export ANDROID_HOME=$HOME/android-sdk-linux +export PATH="$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools" +``` + +## AndroidStudio + +1. 官网下载linux版本的AndroidStudio +2. 解压到文件夹下(放在HOME目录下即可) +3. 导航至` android-studio/bin/` 目录,并执行 `. studio.sh`。启动AndroidStudio,之后AndroidStudio设置向导将指导您完成余下的设置,包括下载开发所需的AndroidSDK组件 + +如果运行AndroidStudio构建项目是遇到问题 +``` +在Android Studio文件夹下执行下面命令 +sudo chmod 777 * -R +``` + +如果运行的是64位版本Ubuntu,则需要使用以下命令安装一些32位库 +``` +# 执行下面命令 +sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6` +apt-get install libbz2-1.0 +apt-get install lib32z1 lib32ncurses5 lib32stdc++6 +# 或者上门运行错误的话执行下面命令 +sudo apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 +# 或者上门运行错误的话执行下面命令 +# adb +sudo apt-get install libc6:i386 libstdc++6:i386 +# aapt +sudo apt-get install zlib1g:i386 + +``` + +## shadowsoks + +``` +sudo add-apt-repository ppa:hzwhuang/ss-qt5 +sudo apt-get update +sudo apt-get install shadowsocks-qt5 +``` + +## 安装字体 + +``` +apt-get install msttcorefonts + +字体将会被安装到 /usr/share/fonts/truetype/msttcorefonts + +  分别是: +  Andale Mono, Arial, Comic Sans MS, Courier New, Georgia +  Impact, Times New Roman, Trebuchet MS, Verdana, Webdings +``` + + +## 设置环境变量 + +按变量的生存周期来划分,Linux变量可分为两类: + +1. 永久的:需要修改配置文件,变量永久生效。 +2. 临时的:使用export命令声明即可,变量在关闭shell时失效。 + + +- 1 在`/etc/profile`文件中添加变量【对所有用户生效(永久的)】 +``` +vim /etc/profile +添加环境变量: + export PATH=$PATH:你的路径 +退出后: +source /etc/profile +``` + +- 2 在用户目录下编辑`.bashrc`文件【对单一用户生效(永久的)】 +``` +vim ~/.bashrc #编辑配置文件 +添加环境变量: + export YOURPATH=xxx/xxx + export PATH=$PATH:$YOURPATH +退出后 +source ~/.bashrc #更新环境变量 +``` + +- 3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】 +``` +export PATH=$PATH:你的路径 + +该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义 +``` + +## 参考 + + +- [shadowsocks-qt5](https://github.com/shadowsocks/shadowsocks-qt5) +- [ubuntu-for-Android](https://github.com/gaoneng102/ubuntu-for-Android) \ No newline at end of file diff --git a/README.md b/README.md index e2a75ae0..92893156 100644 --- a/README.md +++ b/README.md @@ -289,3 +289,20 @@ Python3基础: - [16-进](编程语言/Python/16-进程.md) - [17-多线程](编程语言/Python/17-多线程.md) - [18-网络通信](编程语言/Python/18-网络通信.md) + + +--- +## Linux + +- [001-认识Linux](Linux/001-认识Linux.md) +- [002-ubuntu安装与环境配置](Linux/002-ubuntu安装与环境配置.md) +- [003-Linux文件系统与文件权限](Linux/003-Linux文件系统与文件权限.md) +- [004-Linux命令获取帮助](Linux/004-Linux命令获取帮助.md) +- [005-Linux常用命令](Linux/005-Linux常用命令.md) +- [006-vim](Linux/006-vim.md) +- [007-Linux常用服务器构建](Linux/007-Linux常用服务器构建.md) +- [008-包管理](Linux/008-包管理.md) +- [009-Shell](Linux/009-Shell.md) +- [010-make](Linux/010-make.md) +- [Linux疑问记录](Linux/Linux疑问记录.md) +- [ubuntu下搭建Android开发环境](Linux/ubuntu下搭建Android开发环境.md) \ No newline at end of file