Linux学习
时间:2021-01-04 13:24:44 来源:雅意学习网 本文已影响 人
Linux 目录结构 博客分类:
Linux RedHat 目录结构
/:
根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin 应该和根目录放置在一个分区中 /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等。
/boot:
:
放置 linux 系统启动时用到的一些文件。/boot/vmlinuz 为 linux 的内核文件,以及/boot/gurb。建议单独分区,分区大小 100M 即可 /dev :
存放 linux 系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
/etc:
:
系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d 修改配置文件之前记得备份。注:/etc/X11存放与 x windows 有关的设置。
/home :
系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test 表示用户 test 的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
/lib:/usr/lib:/usr/local/lib :
系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
/lost+fount :
系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found /mnt:/media :
光盘默认挂载点,通常光盘挂载于/mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
/opt :
给主机额外安装软件所摆放的目录。如:FC4 使用的 Fedora 社群开发软件,如果想要自行安装新的 KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下 /proc :
此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等 /root :
系统管理员 root 的家目录,系统第一个启动的分区为/,所以最好将/root 和/放置在一个分区下。
/sbin:/usr/sbin:/usr/local/sbin :
放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount等。与/bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用。
/tmp:
:
一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下 /srv :
服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在/srv/www 内 /usr :
应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls 时会查询/usr/share/man/man1/ls.1.gz 的内容建议单独分区,设置较大的磁盘空间 /var :
放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:
邮件存放的目录, /var/run: 程序或服务启动后,其 PID存放在该目录下。建议单独分区,设置较大的磁盘空间。
===================================================== /dev :
目录
dev 是设备(device)的英文缩写。/dev 这个目录对所有的用户都十分重要。因为在这个目录中包含了所有 Linux 系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos 操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访
问这些外部设备,和访问一个文件,一个目录没有任何区别。Linux 沿袭 Unix 的风格,将所有设备认成是一个文件。
设备文件分为两种:块设备文件(b)和字符设备文件(c)
设备文件一般存放在/dev 目录下,对常见设备文件作如下说明:
/dev/hd[a-t]:IDE 设备
/dev/sd[a-z]:SCSI 设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软 raid 设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备,相当于黑洞
/dev/zero:无限零资源
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9]
/dev/pilot => /dev/ttyS[0-9]
/dev/random:随机数设备
/dev/urandom:随机数设备 ===================================================== /etc :
目录 包含很多文件.许多网络配置文件也在/etc 中.
/etc/rc
or /etc/rc.d
or /etc/rc*.d
启动、或改变运行级时运行的 scripts 或 scripts 的目录.
/etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息.
/etc/fstab 启动时 mount -a 命令(在/etc/rc 或等效的启动文件中)自动 mount 的文件系统列表. Linux 下,也包括用 swapon -a 启用的 swap 区的信息.
/etc/group
类似/etc/passwd ,但说明的不是用户而是组.
/etc/inittab init 的配置文件.
/etc/issue getty 在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息.内容由系统管理员确定.
/etc/motd Message Of The Day,成功登录后自动输出.内容由系统管理员确定.经常用于通告信息,如计划关机时间的警告.
/etc/mtab 当前安装的文件系统列表.由 scripts 初始化,并由 mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如 df 命令.
/etc/shadow
在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对 root 可读.这使破译口令更困难.
/etc/login.defs
login 命令的配置文件.
/etc/printcap 类似/etc/termcap ,但针对打印机.语法不同.
/etc/profile , /etc/csh.login , /etc/csh.cshrc 登录或启动时 Bourne 或 C shells 执行的文件.这允许系统管理员为所有用户建立全局缺省环境.
/etc/securetty 确认安全终端,即哪个终端允许 root 登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过 modem 或网络闯入系统并得到超级用户特权.
/etc/shells 列出可信任的 shell.chsh 命令允许用户在本文件指定范围内改变登录 shell.提供一台机器 FTP 服务的服务进程 ftpd 检查用户 shell 是否列在 /etc/shells 文件中,如果不是将不允许该用户登录.
/etc/sysconfig 网络配置相关目录 ===================================================== /proc :
目录
/proc/cmdline
加载 kernel 时所下达的相关参数。查阅此文件,可了解系统是如何启动
/proc/cpuinfo
本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
/proc/devices
这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关
/proc/filesystems
目前系统已经加载的文件系统
/proc/interrupts
目前系统上面的 IRQ 分配状态。
/proc/ioports
目前系统上面各个装置所配置的 I/O 位址。
/proc/kcore
这个就是内存的大小
/proc/loadavg
还记得 top 以及 uptime 。上头的三个平均数值就是记录在此
/proc/meminfo
使用 free 列出的内存资讯
/proc/modules
目前我们的 Linux 已经加载的模块列表
/proc/mounts
系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据
/proc/swaps
到底系统挂加载的内存在哪里,使用掉的 partition 就记录在此
/proc/partitions
使用 fdisk -l 会出现目前所有的 partition
/proc/pci
在 PCI 汇流排上面,每个装置的详细情况,可用 lspci 来查阅
/proc/uptime
就是用 uptime 的时候,会出现的信息
/proc/version
核心的版本,就是用 uname -a 显示的内容
/proc/bus/*
一些汇流排的装置,还有 U 盘 的装置也记录在此 ===================================================== /usr :
目录
/usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自 Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新 distribution 时无须重新安装全部程序.
/usr/etc 存放设置文件
/usr/games 存放游戏和教学文件
/usr/include 存放 C 开发工具的头文件
/usr/share
存放结构独立的数据
/usr/bin 几乎所有用户命令.有些命令在/bin 或/usr/local/bin 中.
/usr/sbin 根文件系统不必要的系统管理命令,例如多数服务程序.
/usr/share/man , /usr/share/info , /usr/share/doc
手册页、GNU 信息文档和各种其他文档文件.
/usr/include C编程语言的头文件.为了一致性这实际上应该在/usr/lib 下,但传统上支持这个名字.
/usr/lib 程序或子系统的不变的数据文件,包括一些 site-wide 配置文件.名字 lib 来源于库(library); 编程的原始库存在/usr/lib 里.
/usr/local 本地安装的软件和其他文件放在这里.
/usr/src
存放程序的源代码 ===================================================== /var :
目录
/var 包括系统一般运行时要改变的数据.每个系统是特定的,即不通过网络与其他计算机共享.
/var/catman
当要求格式化时的 man 页的 cache.man 页的源文件一般存在/usr/man/man* 中;有些 man 页可能有预格式化的版本,存在/usr/man/cat* 中.而其他的 man 页在第一次看时需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了. (/var/catman 经常被清除,就象清除临时目录一样.)
/var/lib 系统正常运行时要改变的文件.
/var/local /usr/local 中安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock .
/var/lock 锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.
/var/log 各种程序的 Log 文件,特别是 login
(/var/log/wtmp log 所有到系统的登录和注销) 和syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除.
/var/run 保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息.
/var/spool mail, news, 打印队列和其他队列工作的目录.每个不同的 spool 在/var/spool 下有自己的子目录,例如,用户的邮箱在/var/spool/mail 中.
/var/tmp 比/tmp 允许的大或需要存在较长时间的临时文件. (虽然系统管理员可能不允许/var/tmp 有很旧的文件.)
####################################################### 比较重要的目录
在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及预设相关的用途:
/etc:
这个目录非常重要,如前所述,开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那系统大概也就差不多该死掉了!而在往后的文件中,会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是开启一些 Linux 系统服务的 scripts 的地方。而在 /etc/rc.d/rc.local 这个文件是开机的执行档。
/bin, /sbin, /usr/bin, /usr/sbin:
这是系统预设的执行文件的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个执行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统使用者使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!
/usr/local:
这是系统预设的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。
/home:
这个是系统将有账号的人口的家目录设置的地方。
/var:
这个路径非常重要!不论是登入、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的文件数据中察看问题的所在。而 mail 的预设放置也是在这里,所以他是很重要的
/usr/share/man, /usr/local/man:
这两个目录为放置各类套件说明档的地方,例如你如果执行 man man,则系统会自动去找这两个目录下的所有说明文件。
Linux 网络配置 博客分类:
Linux 网络接口概念
lo 接口表示本地回送接口,一般用于网络测试及本地进程之间的通讯。
eth 接口表示以太网卡设备接口,通过附加数字来反映物理网卡的序号,例如:eth0 ppp 接口表示 ppp 设备接口。
网络配置文件存储于/etc/sysconfig/network-scripts 目录下,该目录下包含网络接口的配置文件以及部分的网络命令,例如:
ifcfg-eth0 文件表示第一块网卡接口的配置文件 ifcfg-lo 文件表示本地回送接口的信息。
网卡配置文件详解
Python 代码
1. #网卡接口名称
2. DEVICE=eth0
3. #如果值为 dhcp 表示动态获取 IP,如果值为 none 或 static 表示静态 IP
4. BOOTPROTO=none
5. #广播地址(通常是通过 IP 地址和子网掩码自动计算得到的)
6. BROADCAST=192.168.121.255
7. #网卡 MAC 地址
8. HWADDR=00:0C:29:6E:52:B2
9. #网卡 IP 地址
10. IPADDR=192.168.121.21
11. #子网掩码
12. NETMASK=255.255.255.0
13. #指定网络(通常是通过 IP 地址和子网掩码自动计算得到的)
14. NETWORK=192.168.121.0
15. #指定开机激活网卡
16. ONBOOT=yes
17. #网关地址
18. GATEWAY=192.168.121.1
例如在 ifcfg-eth0 文件中完成了对 eth0 的配置,需要重启网卡,否则配置不会生效。
/etc/init.d/network restart 重启网卡
HOSTS 文件
/etc/hosts 文件保留主机域名与 IP 地址的对应关系。但目前通常是通过 DNS 服务器来查找域名与 IP地址的对应关系。
DNS 配置
/etc/resolv.conf 文件记录客户端使用 DNS 服务器的相关信息:
Python 代码
1. nameserver 设置 DNS 服务器的 IP 地址,最多可设置 3 个。且每个 DNS 服务器的记录自成一行。
2. domain 指定主机所在的网络域名,可以不设置。
3. search 指定 DNS 服务器的域名搜索列表,最多可以设置 6 个。
ifconfig 命令
ifconfig 命令可以查询网络接口的配置信息,可以设置网络接口的配置信息,可以激活或停用网络接口。(使用 ifconfig 命令临时修改网卡的 IP 地址等参数,仅仅是当前生效,系统重启后将恢复其初始的配置,一般用于网络调试)
ifconfig [ 网络接口名称] [IP 地址] [netmask 子网掩码] [up|down]
Python 代码
1. ifconfig 查询处于激活状态的网络接口配置信息
2. ifconfig eth0 查看指定网络接口的配置信息
3.
4. 下面的三种方式都是为网卡临时修改 IP 地址配置信息
5. ifconfig eth0 192.168.121.21/24
6. ifconfig eth0 192.168.121.21 netmask 255.255.255.0
7. ifconfig eth0 192.168.121.21
8.
9. ifconfig eth0:0 192.168.121.22/24 给 eth0 网卡再绑定一个 IP 地址。
10. ifdown eth0 禁用网卡
11. ifup eth0 启用网卡
12.
13. mii-tool eth0 检测指定的网卡设备是否存在问题。
Python 代码
1. ifconfig eth0
2. eth0
Link encap:Ethernet
3.
HWaddr 00:0C:29:6E:52:B2
4.
inet addr:192.168.121.21 Bcast:192.168.121.255 Mask:255.255.255.0
5.
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6.
RX packets:78 errors:0 dropped:0 overruns:0 frame:0
7.
TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
8.
collisions:0 txqueuelen:100
9.
RX bytes:11679 (11.4 Kb)
10.
TX bytes:14077 (13.7 Kb)
11.
Interrupt:10 Base address:0x1080
12.
13. 第一行:连接类型:Ethernet(以太网)HWaddr(硬件 mac 地址)
14. 第二行:网卡的 IP 地址、子网、掩码
15. 第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500 字节
16. 第四、五行:接收、发送数据包情况统计
17. 第七行:接收、发送数据字节数统计信息。
Shell 学习笔记(三)
博客分类:
Linux 系统提示信息
Bash shell 的登录信息提示在【/etc/issue】和【/etc/motd】中配置。
【 /etc/issue 】文件可以修改系统提示信息,例如系统版本、时间等
【 /etc/motd 】文件可以修改用户登陆时候的提示信息,例如欢迎信息等。
【\d】本地端的时间的日期 【\l】显示第几个终端接口 【\m】显示硬件等级 【\n】显示主机的网络名称 【\r】操作系统的版本 【\t24】小时时间格式显示时间 【\s】操作系统名称 【\v】操作系统的版本
修改 /etc/issue 文件影响第一行
修改 /etc/motd 文件影响第二行
系统设定值
Bash shell 系统设定值在【/etc/profile】和【/etc/bashrc】中进行设置。而个人设定值在【~/.bash_profile】和【~/.bashrc】中设置。
【/etc/profile】文件中设置了几个重要的环境变量。例如 PATH、MAIL、LOGNAME、HOSTNAME、INPUTRC 等。同时这个文件也规划出【/etc/profile.d】。
【/etc/bashrc】文件在规划 umask 的功能,也同时规划出提示符“PS1”的内容。
【/etc/man.config】文件规范了使用 man 的时候 man page 的路径到那里寻找。
个人设定值
Bash shell 个人设定值在【~/.bash_profile】和【~/.bashrc】中设置。
【~/.bash_profile】文件中定义了个人化的路径(PATH)与环境变量的文件名称。
【~/.bashrc】文件中设置个人化变量。例如命令的别名设置、路径的重新定义等。
【~/.bash_logout】文件中指定了在注销 shell 的时候,BASH 会为你做的事情。
【source】命令可以将设定在文件中的内容读取一次。
在上面的 4 个文件中分别加上标示。
配置文件加载顺序代码
1. login as: root
2. root@192.168.14.21"s password:
3. Server refused to set environment variables
4. Last login: Thu Aug 16 22:13:38 2012
5. this is /etc/profile
6. this is /etc/bashrc
7. this is ~/.bashrc
8. this is ~/.bash_profile
9. [root@jianshi-21 ~]#
用户登录系统时配置文件的加载顺序:
1
/etc/profile
2
/etc/bashrc
3
~/.bashrc
4
~/.bash_profile
通过 source 命令可以生效指定的被修改的配置文件-- 代码
1. [root@jianshi-21 ~]# source .bashrc
2. this is /etc/bashrc
3. this is ~/.bashrc
4. [root@jianshi-21 ~]#
通过“.” 可以达到 source 命令的效果-- 代码
1. [root@jianshi-21 ~]# . .bashrc
2. this is /etc/bashrc
3. this is ~/.bashrc
4. [root@jianshi-21 ~]#
终端环境设置
终端的环境设置使用【stty】命令,通过 stty 命令可以直接修改和查询终端驱动程序的设置。stty 命令的使用比较简单,可以不带参数执行。
【 stty -a 】命令将当前所有的 stty 参数全部显示出来。
intr 给正在运行的程序发送中断信号。
quit 给正在运行的程序发送推出信号。
erase 向前删除字符 kill 删除命令行上的文字 eof 文件结束、输入结束 start 重启暂停的输入 stop 停止当前的输入 susp 给正在运行的程序发送一个终端停止信号 rpint 输入命令的时候提示使用过的 werase 删除命令行的最后一个字 显示终端设置-- 代码
1. [root@jianshi-21 ~]# stty -a
2. speed 38400 baud; rows 24; columns 80; line = 0;
3. intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
4. eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
5. lnext = ^V; flush = ^O; min = 1; time = 0;
6. -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
7. -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
8. -iuclc -ixany -imaxbel
9. opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
10. isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
11. echoctl echoke
12. [root@jianshi-21 ~]#
有时候运行一些程序,需要修改终端的设置。对于用户而言,这些修改往往是不可见的,因为程序在退出后,会将终端设置为原有的情况。但是,如果出现程序崩溃或被 kill 命令杀死的情况,有可能来不及将终端设置为原有的参数。这时,终端就有可能出现异常的情况,有可能不能正常处理换行字符,或不能恰当地显示输入的字符,甚至可能不能正确执行命令。
使用 cat 命令或 more 命令去显示一个二进制文件也有可能会造成终端的混乱。下图为所示为使用了 cat 命令显示一个名为 a.out 的二进制文件的情况。显示完文件内容后,出现了终端的混乱。这时,所有输入和输出字符都无法正常显示。出现这种情况的原因是由于很多的二进制文件都包含有特殊的字符,这些字符会导致终端混乱这一问题的出现。
在这种情况下,可以使用 reset 命令将终端恢复到正确的状态。
修改 del 向后删除,backspace 向前删除 Sty erase ^?
Stty erase ^H
Shell 学习笔记(二)
博客分类:
Linux Shell 变量基础
在 Linux 预设情况下,使用“大写字母”来设定的变量一般为系统预定义的变量。Bash 中有很多预定义的环境变量。系统通过预定义的环境变量来定义 shell 的环境。
【 env 】命令显示目前系统中主要的预定义变量内容
【 set 】命令将环境变量和用户自定义变量显示出来
【 echo $ 变量名】命令显示指定的变量
在 Linux 中可以使用【export】命令将用户自定义变量变成环境变量。在启动 Shell 的时候,系统会给 shell 分配一块内存,用来存储系统环境变量。【export】命令将用户自定义变量移动到该内存中。当进入子 shell 时,子 shell 将父 shell 的系统环境变量读入到子 shell 内存中。
为什么要使用 export 将自定义变量声明成系统环境变量?例如执行某程序需要用到 s1 和 s2 两个脚本,但这时 s2 需要用到 s1 中声明的变量这时就需要将自定义变量声明成系统环境变量(当整个程序结束后,声明的所有变量包括 export 的变量也就失效了)
如果直接声明自定义变量仅可以通过【set】查看得到,如果将其通过 export 声明为系统环境变量则可以在【env】中看到在 shell 中所有变量的声明和改变仅在当前生命周期有效。
例如自定义变量 name,在当前的 shell 中可以读取,但是通过执行 bash 进入子 shell 却发现读取不到在父shell中设置的变量,这是因为name是父shell中的自定义变量,并不是系统的环境变量,如果开始的时候就将该变量通过 export 声明为系统环境变量,那么再通过 bash 命令进入子 shell 的时候还是可以获取到该变量的。
Java 代码
1. [root@jianshi-21 ~]# name="Zhang san"
2. [root@jianshi-21 ~]# echo $name
3. Zhang san
4. [root@jianshi-21 ~]# bash
5. [root@jianshi-21 ~]# echo $name
6.
7. [root@jianshi-21 ~]# exit
8. exit
9. [root@jianshi-21 ~]# export name
10. [root@jianshi-21 ~]# bash
11. [root@jianshi-21 ~]# echo $name
12. Zhang san
13. [root@jianshi-21 ~]#
Bash 下变量设定的规则:
1. 变量与变量内容以“=”来连接,等号两边不能出现空格。
2. 变量名只能是英文字母与数字,但是数字不能是开头字符。
3. 若有空格符可以使用双引号【”】或单引号【’】来将变量内容结合起来,但是要注意,双引号内的特殊字符可以保持原有的变量特性,但是单引号内的特殊字符只能是一般的字符。
4. 必要时可以使用转义字符【\】来将特殊符号转义为一般的符号。(*?<>&![]|\’”`(){}等)
5. 在一串指令中,如果还需要由其他的指令提供信息可以使用【`】来连接。
6. 若该变量为扩展变量内容时,则需要双引号和$变量名。例如:【PATH=”$PATH”:/home】
7. 如果变量需要在其他子程序中使用,可以使用【export】命令将变量变成环境变量,如果只输入【export】命令,则显示系统所有的环境变量。
8. 取消变量的方法为:【unset 变量名称】
Java 代码
1. [root@jianshi-21 ~]# path="/lib/modules/`uname -r`/kernel/fs"
2. [root@jianshi-21 ~]# cd $path
3. [root@jianshi-21 fs]# pwd
4. /lib/modules/2.6.9-89.ELsmp/kernel/fs
5. [root@jianshi-21 fs]#
Linux 语系配置
在 Linux 系统中执行【locale -a】命令可以显示系统支持的所有的语系,如果需要改变系统支持的语系可以修改【/etc/sysconfig/i18n】文件的内容。
查看当前语系代码
1. [root@jianshi-21 fs]# locale
2. LANG=en_US.UTF-8
3. LC_CTYPE="en_US.UTF-8"
4. LC_NUMERIC="en_US.UTF-8"
5. LC_TIME="en_US.UTF-8"
6. LC_COLLATE="en_US.UTF-8"
7. LC_MONETARY="en_US.UTF-8"
8. LC_MESSAGES="en_US.UTF-8"
9. LC_PAPER="en_US.UTF-8"
10. LC_NAME="en_US.UTF-8"
11. LC_ADDRESS="en_US.UTF-8"
12. LC_TELEPHONE="en_US.UTF-8"
13. LC_MEASUREMENT="en_US.UTF-8"
14. LC_IDENTIFICATION="en_US.UTF-8"
15. LC_ALL=
16. [root@jianshi-21 fs]#
可以通过在 shell 中设置 LANG 变量来更改当前的语系,但是当 shell 结束时设置的语系也就失效了,可以通过配置文件更改默认的语系。
更改当前的语系代码
1. [root@jianshi-21 fs]# LANG=zh_CN.UTF-8
2. [root@jianshi-21 fs]# locale
3. LANG=zh_CN.UTF-8
4. LC_CTYPE="zh_CN.UTF-8"
5. LC_NUMERIC="zh_CN.UTF-8"
6. LC_TIME="zh_CN.UTF-8"
7. LC_COLLATE="zh_CN.UTF-8"
8. LC_MONETARY="zh_CN.UTF-8"
9. LC_MESSAGES="zh_CN.UTF-8"
10. LC_PAPER="zh_CN.UTF-8"
11. LC_NAME="zh_CN.UTF-8"
12. LC_ADDRESS="zh_CN.UTF-8"
13. LC_TELEPHONE="zh_CN.UTF-8"
14. LC_MEASUREMENT="zh_CN.UTF-8"
15. LC_IDENTIFICATION="zh_CN.UTF-8"
16. LC_ALL=
17. [root@jianshi-21 fs]#
Linux 系统语系配置文件代码
1. [root@jianshi-21 fs]# cat /etc/sysconfig/i18n
2. LANG="en_US.UTF-8"
3. SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
4. SYSFONT="latarcyrheb-sun16"
5. [root@jianshi-21 fs]#
变量的声明与读取
read 命令
read [ -p ][ -r ][ -s ][ -u[ n ] ][VariableName?Prompt][VariableName...]
描述:
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量,用 IFS(内部字段分隔符)变量中的字符作为分隔符。VariableName 参数指定 shell 变量的名称,shell 变量获取输入行一个字段的值。由 VariableName 参数指定的第一个 shell 变量指定给每一个字段的值,由 VariableName 参数指定的第二个 shell 变量指定给第二个字段的值,以此类推,直到最后一个字段。如果标准输入行的字段比相应的由 VariableName 参数指定的 shell 变量的个数多,把全部余下的字段的值赋给指定的最后的 shell 变量。如果比 shell 变量的个数少,则剩余的 shell 变量被设置为空字符串。
注意:
如果省略了
VariableName 参数,变量
REPLY 用作缺省变量名。由
read 命令设置的
shell 变量影响当前
shell 执行环境。
标志 -p 用 |& (管道,& 的记号名称)读取由 Korn shell 运行的进程的输出作为输入。
注:
-p 标志的文件结束符引起该进程的清除,因此产生另外一个进程。
-r 指定读取命令把一个 \ (反斜杠) 处理为输入行的一部分,而不把它作为一个控制字符。
-s 把输入作为一个命令保存在 Korn shell 的历史记录文件中。
-u [ n ] 读取一位数的文件描述符号码 n 作为输入。文件描述符可以用 ksh exec 内置命令打开。n 的缺省值是 0,表示的是键盘。值 2 表示标准错误。
参数
VariableName?Prompt 指定一个变量的名称和一个要使用的提示符。当 Korn shell 是交互式时,它将把提示符写到标准错误,并执行输入。Prompt 包含多于一个的字,必须用单引号或双引号括起来。
VariableName... 指定一个或多个由空格分隔的变量名。
退出状态,这个命令返回下列出口值:
0 成功完成。
>0 检测到文件结束符或一个错误发生。
通过 read 读取输入数据代码
1. [root@jianshi-21 fs]# read name
2. Zhang san
3. [root@jianshi-21 fs]# echo $name
4. Zhang san
5. [root@jianshi-21 fs]# read -p "Please input your name:" name
6. Please input your name:Zhang san
7. [root@jianshi-21 fs]# echo $name
8. Zhang san
9. [root@jianshi-21 fs]#
在等待时间结束后还未进行输入并敲击回车表示放弃输入代码
1. [root@jianshi-21 fs]# read -t 10 -p "Please input your name:" name
2. Please input your name:Li si
3. [root@jianshi-21 fs]# echo $name
4. Li si
5. [root@jianshi-21 fs]# read -t 1 -p "Please input your name:" name
6. Please input your name:[root@jianshi-21 fs]# echo $name
7. Li si
8. [root@jianshi-21 fs]#
declare/typeset 命令
declare [+/-][arxi][ 变量名称=设置值 ] 或
declare -f 补充说明:declare 为 shell 指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示 shell 函数。若不加上任何参数,则会显示全部的 shell 变量与函数(与执行 set 指令的效果相同)。
参数:
+/-
"-"可用来指定变量的属性,"+"则是取消变量所设的属性。
-f
仅显示函数。
r
将变量设置为只读。
x
指定的变量会成为环境变量,可供 shell 以外的程序来使用(仅限于子 shell)。
i
[设置值]可以是数值,字符串或运算式。
-a
声明的变量为数组 实例-- 代码
1. [root@jianshi-21 fs]# sum=1+2+3
2. [root@jianshi-21 fs]# echo $sum
3. 1+2+3
4. [root@jianshi-21 fs]# declare -i sum=1+2+3
5. [root@jianshi-21 fs]# echo $sum
6. 6
7. [root@jianshi-21 fs]# bash
8. [root@jianshi-21 fs]# echo $sum
9.
10. [root@jianshi-21 fs]# exit
11. exit
12. [root@jianshi-21 fs]# echo $sum
13. 6
14. [root@jianshi-21 fs]# declare -x sum
15. [root@jianshi-21 fs]# bash
16. [root@jianshi-21 fs]# echo $sum
17. 6
18. [root@jianshi-21 fs]# exit
19. exit
20. [root@jianshi-21 fs]# unset sum
21. [root@jianshi-21 fs]# echo $sum
22.
23. [root@jianshi-21 fs]#
数组 去读数组的实例-- 代码
1. [root@jianshi-21 fs]# a[1]=dong
2. [root@jianshi-21 fs]# a[2]=li
3. [root@jianshi-21 fs]# a[3]=wei
4. [root@jianshi-21 fs]# echo ${a[1]}${a[2]}${a[3]}
5. dongliwei
6. [root@jianshi-21 fs]#
别名 在 Linux 系统中设置别名使用【alias】命令,取消别名使用【unalias】命令。
显示系统下的命令别名代码
1. [root@jianshi-21 fs]# alias
2. alias cp="cp -i"
3. alias l.="ls -d .* --color=tty"
4. alias ll="ls -l --color=tty"
5. alias ls="ls --color=tty"
6. alias mv="mv -i"
7. alias rm="rm -i"
8. alias vi="vim"
9. alias which="alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde"
10. [root@jianshi-21 fs]#
设置别名代码
1. [root@jianshi-21 fs]# alias lm="ls -al | more"
2. [root@jianshi-21 fs]# alias
3. alias cp="cp -i"
4. alias l.="ls -d .* --color=tty"
5. alias ll="ls -l --color=tty"
6. alias lm="ls -al | more"
7. alias ls="ls --color=tty"
8. alias mv="mv -i"
9. alias rm="rm -i"
10. alias vi="vim"
11. alias which="alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde"
12. [root@jianshi-21 fs]#
取消命令别名代码
1. [root@jianshi-21 fs]# unalias lm
2. [root@jianshi-21 fs]# alias
3. alias cp="cp -i"
4. alias l.="ls -d .* --color=tty"
5. alias ll="ls -l --color=tty"
6. alias ls="ls --color=tty"
7. alias mv="mv -i"
8. alias rm="rm -i"
9. alias vi="vim"
10. alias which="alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde"
11. [root@jianshi-21 fs]#
在 在 linux 中 中 dir 等价于 ls-- 代码
1. [root@jianshi-21 fs]# dir
2. autofs4
cramfs
ext3
freevxfs
hfsplus
jffs2
msdos
nfs_common
nls
udf
3. cifs
exportfs
fat
hfs
jbd
lockd
nfs
nfsd
smbfs
vfat
4. [root@jianshi-21 fs]# which dir
5. /usr/bin/dir
6. [root@jianshi-21 fs]# type -a dir
7. dir is /usr/bin/dir
8. [root@jianshi-21 fs]#
历史命令 【history -n】命令显示最后执行的几个命令,例如 history 10 显示最后 10 个执行的命令 history [-crw]
-c
将当前 shell 中的所有历史命令全部清除
-r
将 histfile 中的内容读到 shell 的命令记忆中
-w
将当前历史记忆内容写入到 histfile 中 【!number】执行第几个指令 【!command】执行以 command 开头的命令 【!!】执行上一个指令 直接输入【history】可以将当前 shell 中所有的历史执行命令显示出来
Java 代码
1. [root@jianshi-21 fs]# history
2.
1
ls
3.
2
cd ..
4.
3
ls
5.
4
useradd zhangsan
6.
5
passwd zhangsan
7.
6
exit
8.
7
ls
9.
......
下面的例子会执行历史命令中 whi 开头的,距离最近的命令代码
1. [root@jianshi-21 fs]# history
2.
1
ls
3.
2
cd ..
4.
3
ls
5.
4
useradd zhangsan
6.
5
passwd zhangsan
7.
6
exit
8.
7
ls
9.
......
10.
146
unalias lm
11.
147
alias
12.
148
dir
13.
149
which dir
14.
150
type -a dir
15.
151
history
16. [root@jianshi-21 fs]#
17. [root@jianshi-21 fs]# !whi
18. which dir
19. /usr/bin/dir
20. [root@jianshi-21 fs]#
Shell 学习笔记(一)
博客分类:
Linux
shell 是一个命令解释器,例如在图形界面中双击一个图标表示我们要利用其他工具打开一个文件(如果是二进制文件直接运行该二进制文件)。在命令行界面输入 ls -l,这时 shell 就会对命令进行解析,然后通知系统所要做的操作,shell 并将系统处理后的返回值进行处理后返回给用户。
shell 又分为登录 shell 和非登录 shell,登录 shell 执行时需要用户名口令。
通过 bash 命令进入子 shell(bash shell)是不需要用户名口令验证的,因此这个属于非登录 shell。
Java 代码
1. [root@jianshi-21 ~]# bash
2. [root@jianshi-21 ~]# exit
3. exit
4. [root@jianshi-21 ~]#
Linux 系统中所支持的 Shell 在【/etc/shells】文件中存储 Java 代码
1. [root@jianshi-21 ~]# cat -n /etc/shells
2.
1
/bin/sh
3.
2
/bin/bash
4.
3
/sbin/nologin
5.
4
/bin/ash
6.
5
/bin/bsh
7.
6
/bin/ksh
8.
7
/usr/bin/ksh
9.
8
/usr/bin/pdksh
10.
9
/bin/tcsh
11.
10
/bin/csh
12.
11
/bin/zsh
13. [root@jianshi-21 ~]#
/bin/sh 已经被/bin/bash 取代 /bin/bash Linux 默认的 shell /bin/tcsh 整合 c shell,提供了更多的功能 /bin/csh 依附于 bsd 版的 unix 的 shell,被/bin/tcsh /bin/ksh 常用于商业版中,兼容于 bash /bin/zsh 基于 ksh 开发的,功能更强大 Linux 使用的版本称为 Bourne Again Shell(简称:bash)。
BASH 的优点:
命令记忆能力 档案对比补全功能:指令补全、文件名补全 命令别名(alias)设定功能 作业控制(jobs)、前台后台控制 Shell Script 的强大功能 通配符 *
? 等
Linux 系统默认能够记录 1000 条命令,系统将执行的命令一般存贮在一个文件中,一般为用户家目录下的【.bash_history】文件中
linux 下修改日期和时间 博客分类:
Linux 我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2011 年 10 月 13 日的命令如下。
Python 代码
1. #date -s 10/13/11
将系统时间设定成下午 1 点 12 分 0 秒的命令如下。
Python 代码
1. #date -s 13:12:00
---- 注意,这里说的是系统时间,是 linux 由操作系统维护的。
---- 在系统启动时,Linux 操作系统将时间从 CMOS 中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS 时间的一致性, Linux 每隔一段时间会将系统时间写入 CMOS。由于该同步是每隔一段时间(大约是 11 分钟)进行的,在我们执行 date -s 后,如果马上重起机器,修改时间就有可能没有被写入 CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。
Python 代码
1. #clock -w
---- 这个命令强制把系统时间写入 CMOS。