From owner-freebsd-ports@FreeBSD.ORG Tue Sep 16 22:32:56 2008 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D88151065675 for ; Tue, 16 Sep 2008 22:32:56 +0000 (UTC) (envelope-from mark.picone@deakin.edu.au) Received: from mx-f-00-ext.its.deakin.edu.au (mx-f-00-ext.its.deakin.edu.au [128.184.136.213]) by mx1.freebsd.org (Postfix) with ESMTP id C7AFA8FC1A for ; Tue, 16 Sep 2008 22:32:54 +0000 (UTC) (envelope-from mark.picone@deakin.edu.au) X-IronPort-AV: E=Sophos;i="4.32,410,1217772000"; d="p7s'?scan'208";a="30846619" Received: from grumium-1.its.deakin.edu.au (HELO grumium-1.du.deakin.edu.au) ([128.184.160.5]) by mx-f-00-int.its.deakin.edu.au with ESMTP/TLS/AES128-SHA; 17 Sep 2008 08:32:53 +1000 Received: from garnet-1.du.deakin.edu.au ([128.184.160.3]) by grumium-1.du.deakin.edu.au ([128.184.160.5]) with mapi; Wed, 17 Sep 2008 08:32:52 +1000 From: Mark Picone To: "freebsd-ports@freebsd.org" Date: Wed, 17 Sep 2008 08:32:52 +1000 Thread-Topic: Linux Help Thread-Index: AckYSiPWg1Qj9i3iSZqXD7qOL4Pj9gAAgHwQ Message-ID: <787FAEC94123984293205DC78AD7C2C80E16551218@garnet-1.du.deakin.edu.au> References: <02a63bf9-fa84-4dba-a5c9-94053332584f@j22g2000hsf.googlegroups.com> In-Reply-To: <02a63bf9-fa84-4dba-a5c9-94053332584f@j22g2000hsf.googlegroups.com> Accept-Language: en-US, en-AU Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: acceptlanguage: en-US, en-AU Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=SHA1; boundary="----=_NextPart_000_0016_01C9189F.FE5D8BE0" MIME-Version: 1.0 Subject: RE: Linux Help X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Sep 2008 22:32:56 -0000 ------=_NextPart_000_0016_01C9189F.FE5D8BE0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Ok then... Mark Picone, Trainee Unix Administrator Deakin University, Information Technology Services Division Phone: 03 5227 8602 International: +61 3 5227 0806 Fax: 03 5227 8799 International: +61 3 5227 8799 Email: mark.picone@deakin.edu.au Website: http://www.deakin.edu.au > -----Original Message----- > From: owner-freebsd-ports@freebsd.org [mailto:owner-freebsd- > ports@freebsd.org] On Behalf Of johnharten > Sent: Wednesday, 17 September 2008 8:05 AM > To: freebsd-ports@freebsd.org > Subject: Linux Help >=20 > LINUX is not UNIX, but it's close enough > This book is old > I will try to take the concepts the book lays out and integrate them > with more recent versions. > Lecture material will be a hybrid > Chapter 1 >=20 > Logging on to the System > Why we study UNIX/LINUX > Started in the 1970's (pre-Microsoft)=E2=80=8F > UNIX runs =E2=80=9Ceverything=E2=80=9D > The Internet, Stock Market, Movies, technological advancements, > Embedded Devices (ATM's), POS systems, the military, utility > companies, and much more. > Linux began in the early '90's > Has revolutionized the IT world > Authentication > Authentication is the process of confirming that you are who you say > you are > Logging in (authenticating) typically requires two components > Username (login name)=E2=80=8F > Password > Authentication (continued)=E2=80=8F > Authentication can also take the following forms: > Public/Private Key Pair > PGP / SSL certificates > Biometric Authentication > Fingerprints > Retinal scans > Voice matching > Authorization > Authorization is the process of determining who gets access to what. > Unlike authentication, authorization does not generally involve and > additional input. > Keeps the system secure. > Login Scenarios > Running system with the root username and password > Running system where you have the username / password of non-root user > A system with no Operating System > Scenario: No OS > If there is no operating system present, you'll need to install one > Setting the root password is part of the installation process > You'll need to create a regular user account for yourself as well > Scenarios: Have Credentials > Running system where you have a valid username / password (root or > otherwise) > At login prompt, enter valid username and hit enter > At password prompt, enter valid password and hit enter > Have Credentials (cont'd)=E2=80=8F > Whether or not you enter the username correctly, you will be prompted > for a password. > When you type your password, the characters will be masked by *'s for > security > UNIX is case-sensitive!!! > Notes on root user > root is the system administrator > root has access to all resources and there is no safety net > Use root only when necessary > Login Prompts > Command Line > Telnet / ssh / no graphical environment > Graphical > X Windows system is installed on system > Pictures of both on page 5 > Lab Work > Install Linux > Fedora 9, because we have new hardware. >=20 > CMPSC 249: >=20 > Introduction to UNIX/Linux > Week 2: UNIX Essentials > The Kernel > The kernel is the core of an operating system. > Source Provided for compilation. > RedHat provides RPM packages. (rpm =E2=80=93qa |grep =E2=80=93i = kernel) > You don=E2=80=99t touch it directly. > Where is the Kernel? > The boot loader runs and loads the kernel based on the choice you > make. > Editing the boot loader entry will reveal the location of the kernel > (usually /boot/vmlinuz*) > RamDisk and kernel load and then process id 1 (init) is spawned. > User Space > User space is the visible part of the operating system. > User processes > Services / daemons > Every user space component executes system calls and spends some time > in the kernel. >=20 >=20 > What does the Kernel do? > Sits between programs (user space) and hardware. > Applications use syscall facilities to have the kernel perform work on > their behalf. > This work takes many forms. >=20 > Kernel > Kernel (2) > System call facility that allows processes to use kernel functions. > Process creation and tracking > Process priority control > Swapping pages & memory management > IPC - inter-process communication > Cache, Buffer and I/O management > File creation, removal and modification and permissions > Filesystems > Log file data accumulation and flushing. >=20 > The Filesystem > What is a filesystem? >=20 > a method for storing and organizing computer files and the data > they contain to make it easy to find and access them. > What is a filesystem (English) > A container for data > More than just a place to keep files > Hierarchical > File Attributes > Security >=20 > Filesystem Layout > / =3D System Top Level Directory. Start of the tree > Everything is hierarchical in folders underneath / (/opt, /usr, /etc) > Folders can act as mount points for local and network filesystems > Common Directories > /usr =E2=80=93 shared, read-only libraries and binaries. > /etc =E2=80=93 machine configuration files > /home =E2=80=93 user directories (private) > /boot =E2=80=93 location of necessary files for boot loader. Usually = at > beginning of disk > Common Directories (2) > /dev =E2=80=93 location of special device descriptor files > /proc =E2=80=93 Virtual filesystem that gives insight into the kernel = and > running tasks. > /var =E2=80=93 Typical location of spool (print, mail) and log files. > /opt =E2=80=93 optional installed packages > /dev and /proc are virtual file systems > Separation of FileSystems > Separation involves creating individual filesystems for each mount > point. > Prevents an errant process or user from filling up all filesystems and > crashing the system. > Separating everything is not practical. >=20 > Disk Partitioning > Very similar to Windows, Linux supports carving of drives into > partitions. > During our install we created separate partitions for various > filesystems > The fdisk command can be used to create and view partitions. > To view current disks and partitions use fdisk =E2=80=93l >=20 > Disk Partitioning (2) > Disk /dev/sda: 80.0 GB, 80000000000 bytes > 255 heads, 63 sectors/track, 9726 cylinders > Units =3D cylinders of 16065 * 512 =3D 8225280 bytes > Device Boot Start End Blocks Id System > /dev/sda1 * 1 32 257008+ 83 Linux > /dev/sda2 33 1307 10241437+ 83 Linux > /dev/sda3 1308 1568 2096482+ 82 Linux swap / > Solaris > /dev/sda4 1569 9726 65529135 5 Extended > /dev/sda5 1569 1600 257008+ 83 Linux > /dev/sda6 1601 2875 10241406 83 Linux > /dev/sda7 2876 9726 55030626 8e Linux LVM > [root@reboot ~]# >=20 > Disk Partitioning (3) > To match partitions to filesystems you can use df to correllate: > [root@reboot ~]# df > Filesystem 1K-blocks Used Available Use% Mounted on > /dev/sda6 9920592 1463072 7945452 16% / > /dev/sda5 248895 17297 218748 8% /boot > tmpfs 479236 0 479236 0% /dev/shm > /dev/mapper/vg_reboot-lvhome > 19838052 16125436 2688616 86% /home > /dev/mapper/vg_reboot-lvtmp > 9560920 72440 9010156 1% /tmp > /dev/mapper/vg_reboot-lvusr > 6983168 4129136 2493612 63% /usr > /dev/mapper/vg_reboot-lvvar > 2951952 701460 2098124 26% /var >=20 > LVM > LVM (Logical Volume Management Devices) > Volume Groups are essentially logical disks that can actually span > multiple devices. > /dev/mapper entries are logical volumes within a volume group. > Volume groups can consist of partitions on disks or whole disks called > physical volumes. > Physical volumes (pv=E2=80=99s) are raw LVM devices with a partition = type of > 8e or Linux LVM. > =E2=80=9Cvgdisplay=E2=80=9D command lists current lvm volume groups. = With no options, > it prints a stanza for each defined volume group (vg) > [root@reboot ~]# vgdisplay > --- Volume group --- > VG Name vg_reboot > =E2=80=A6 >=20 >=20 > LVM (continued) > Vgdisplay gives other useful information as well: > PE Size 32.00 MB > Total PE 1679 > Alloc PE / Size 1239 / 38.72 GB > Free PE / Size 440 / 13.75 GB >=20 > PE=E2=80=99s are Physical Extent. It=E2=80=99s the smallest = allocation size you can > have in a VG. > Total PE is the number of PE=E2=80=99s in the volume group. > You multiply PE size by Total PE to get the size of the vg. > Allocated PE is the total amount of PE assigned to a volume > Free PE is the total amount of PE that is available for use. > LVM Part 3 > How do you determine how many devices are contained in a vg? > Easy =E2=80=93 you use vgdisplay =E2=80=93v. At the very bottom of = the output will be > a stanza for each physical volume. >=20 > --- Physical volumes --- > PV Name /dev/sda7 > PV UUID YDgW5U-0gFQ-kzBm-HJh5-0l7F-V1Cp-X7VPcj > PV Status allocatable > Total PE / Free PE 1679 / 440 >=20 >=20 > LVM 4 > So, we have pv=E2=80=99s and vg=E2=80=99s =E2=80=93 what about = filesystems? > You need a logical volume. Vgdisplay =E2=80=93v also gives = information on > each lv: > --- Logical volume --- > LV Name /dev/vg_reboot/lvusr > VG Name vg_reboot > LV Status available > LV Size 6.88 GB > Current LE 220 >=20 > Creating PV=E2=80=99s > Create a partition with fdisk of type 8e (Linux LVM) =E2=80=93 BE = CAREFUL not > to change an existing partition. > fdisk /dev/sda will open the fdisk menu for /dev/sda > The letter m prints help information, but you want to use n to create > a new partition. > Accept default for starting location (first available sector). > Default end will be end of disk. > The t option lets you specify type. > Use the letter w once you are sure it=E2=80=99s right to activate = changes. > It will created /dev/sda# for you > Once done, you=E2=80=99ll need to execute the following command: > pvcreate /dev/sd# (where # is the partition you just > created). > Creating VG=E2=80=99s and LV=E2=80=99s > Once you have your pv, creating a volume group is as easy as > executing: > vgcreate classvg /dev/sda# (where number is the pv you = just > created) >=20 > Once you have your vg, you can create an LV contained within: > lvcreate =E2=80=93n classlv -L 1G classvg >=20 > NOTE =E2=80=93 lvcreate and lvextend accept =E2=80=93L for human = readable size as well > as =E2=80=93l to specify the number of PE=E2=80=99s > Resizing Filesystems > Resizing filesystems can be done online with resize2fs. > Resize2fs /dev/vg_reboot/lv_to_increase =E2=80=93 by default it will = increase > to LV size > MUCH easier to resize a filesystem in an LV. > LV=E2=80=99s can be grown without being contiguous. > lvextend =E2=80=93L +5G /dev/vg_reboot/lv_to_increase will increase = the > logical volume by 5G > If you need to resize a partition it can be risky because you need to > reorder your partition scheme. > Command Syntax Basics > Commands consist of three parts: > Binary Name > Options > Arguments >=20 > Options are indicated by =E2=80=9C-=E2=80=9D or = =E2=80=9C=E2=80=94=E2=80=9D prefixes. > indicates a single letter (Linux Style) > --indicates a word argument (BSD Style) >=20 > Arguments take many forms. > Values for options (-L 5G) > Full paths to files or directories on which to perform actions. > =E2=80=9Cls=E2=80=9D command > Command: ls > Purpose: Lists files and directories (like dir) > Options: common options are =E2=80=93la (long listing). Also use = =E2=80=93t to sort > by time, latest first. -r reverses the sort. > Common use: ls -latr > Arguments: directory or path name (fully qualified or in current dir). > =E2=80=9Ccat=E2=80=9D command > Command: cat > Purpose: display contents of a file > Options: none > Arguments: filename >=20 > =E2=80=9Cmore=E2=80=9D command > Command: more > Purpose: another way to show the contents of a file. Breaks by page, > so you can read it. Space advances a page, entery advances a line. > Options: none > Arguments: filename >=20 > =E2=80=9Cgrep=E2=80=9D command > Command: grep > Purpose: Funny name, serious tool. Grep looks for pattern matches in > a file. > Options: =E2=80=93i is my favorite. Means case insensitive = (remember, UNIX > is case sensitive). Also grep =E2=80=93v means show me everyline but = the ones > that contain this text. > Arguments: filename >=20 >=20 > =E2=80=9Ccd=E2=80=9D > Command: cd > Purpose: Changes your current directory. Default directory is /home/ > student. > Options: none > Arguments: Directory name >=20 > NOTE: cd =E2=80=93 puts you back to your old directory. >=20 >=20 > =E2=80=9Cmkdir=E2=80=9D > Command: mkdir > Purpose: Creates a directory > Options: -p if you=E2=80=99re making a deep directory mkdir =E2=80=93p = /dir1/dir2/dir3 > will create dir1, dir2, and dir3 > Arguments: Directory name >=20 > =E2=80=9Cpwd=E2=80=9D > Command: pwd > Purpose: Prints your current directory (you are here). > Options: none > Arguments: none >=20 > =E2=80=9Crm=E2=80=9D > Command: rm > Purpose: Removes a file > Options: -f (means don=E2=80=99t ask me if I=E2=80=99m sure). -R = means recursive =E2=80=93 > the only way to remove a directory. > Arguments: file name >=20 > NOTE: rm =E2=80=93Rf / is ALWAYS a bad idea >=20 > =E2=80=9Cdf=E2=80=9D > Command: df > Purpose: Displays information on mounted filesystems > Options: -h (human readable. Calculates in GB, MB, or KB). > Arguments: none >=20 > =E2=80=9Ccp=E2=80=9D > Command: cp > Purpose: copies one file or directory to another, preserving the > original. > Options: -R for directories =E2=80=93p to preserve permissions > Arguments: Directory 1, directory2 >=20 > =E2=80=9Cmv=E2=80=9D > Command: mv > Purpose: Moves one file or a directory to another =E2=80=93 rename. > Options: none > Arguments: file1, file2 >=20 > =E2=80=9Cecho=E2=80=9D > Command: echo > Purpose: prints a string to a screen > Options: none we=E2=80=99ll worry about right now. > Arguments: text --- if spaces, enclose in =E2=80=9C=E2=80=99s >=20 > =E2=80=9Cappropos=E2=80=9D > Command: appropos > Purpose: English to geek translator. > Options: none > Arguments: when you know the purpose of the command, appropos might > help you find it. >=20 > =E2=80=9Cman=E2=80=9D > Command: man > Purpose: more information than you will ever want to know. > Options: none > Arguments: command >=20 > Bash basics > Bash is your friend. IT is the lazy man=E2=80=99s shell. > If you know the command name, you can type the first few letters and > hit tab twice. It will show you your options. > Also, to use your last command (or edit it) just hit up. > Notes > Linux treats spaces as special characters. Avoid them at all costs. > If you are dead set on using them, you=E2=80=99ll have to escape them = with \. > If you don=E2=80=99t know how to use a command, try man. > If you want a quick reference, 9 times out of 10 you can type the > command without any options or arguments and hit enter. It will tell > you. >=20 > CMPSC 249: >=20 > Introduction to UNIX/Linux > Syllabus Update > Test has been pushed from next week. >=20 >=20 > All the LVM material from last week=E2=80=99s class will not be tested = on. > Tonight=E2=80=99s Agenda > Revisit Common Commands >=20 > Chain Commands Together >=20 > Redirecting Output >=20 > Any questions from last week? >=20 > Navigating the filesystem > Filesystem: collection of files and directories contained on a block > device. > Examples of commands to navigate the filesystem: pwd, mv, cp, ls >=20 >=20 > Navigating the Filesystem > The best place to start is how to figure out where you are. > To get a listing of your current directory execute: pwd > Pwd tells you where you are, and as such where your various file > operations will look for their input > The output of that command will look like: > /home/student >=20 > Looking for files > We=E2=80=99ll talk about ls again in a few minutes, but in the = meantime, > without any arguments or options, it serves one purpose: > To show you a list of the files in your current directory: > [root@bob ~]# ls > backup other_stuff scripty tmp.sh > French.zip questions.out test.txt uniq_q_n_a.txt > [root@bob ~]# >=20 > / -- ain=E2=80=99t it cool > / is where all files start from > To get a listing of all objects in / execute the following: ls / > Note, in the command above, / serves the purpose of an argument. > The output should look something like: > [root@bob ~]# ls / > backup boot etc lib media mnt Old proc sbin srv > tmp var > bin dev home lost+found misc net opt root selinux sys > usr >=20 >=20 >=20 > Looking at other directories > What happens when you want to view a filesystem that has thousands of > files in it? > ls will display it=E2=80=99s output and it will scroll way past the = top of > your screen, and you won=E2=80=99t be able to see it all. > Try it --- go ahead, I=E2=80=99ll wait (ls /etc) > This is where you get to meet a UNIX Admin=E2=80=99s best friend: | >=20 > | -- also cool > | (called =E2=80=9Cpipe=E2=80=9D) serves the purpose of taking the = output from one > command and passing it as input to another. It=E2=80=99s basically a = chain. > By itself ls | would do nothing. However, if we introduce the more > command, our output is broken up by our screen size. > ls |more =E2=80=93 try it. I=E2=80=99ll wait > You can use the Enter key to advance one line at a time, or the space > key basically does a page down, q will exit more without looking at > all the output. > Directories Gone Wild > So, this whole / thing is pretty cool, but what if I want to make my > own directory? > Easy, use mkdir > mkdir takes one argument =E2=80=93 the destination directory. > If you do not specify a full path (mkdir /home/student/cookiemonster), > mkdir will create the directory in your current directory. > mkdir tmp will create a dir called tmp wherever you are. > Go ahead, try it=E2=80=A6I=E2=80=99ll wait *use ls to validate* > Moving between directories > So, you know what your pwd is, and you know you want to get to /, but > how do you make / your current directory? > Use cd. Much like in windows/dos, cd changes your current directory. > If you fully path the directory (cd /home/etc/sysconfig/) you will be > dropped in /etc/sysconfig. > Without specifying a full path (cd cookiemonster) cd will look in your > pwd for that directory and fail if it does not exist. > Go ahead, try it. I=E2=80=99ll wait. > cd with no arguments > What happens if you run cd with no arguments? Where do you get > placed? >=20 > Anyone? Try it and see. > More more > As with most commands in UNIX, more can be used in a few different > ways. > When we used more before, we piped the output of ls to more. > But what if I want to look at a file to see what is in it? > Well, you can use more in one of two ways: more /etc/termcap > Or, you can use cat to print the contents of the file and pipe it to > more: cat /etc/termcap | more > What=E2=80=99s the difference? > Looking only at parts of a file > Look at the beginning of a file: head /etc/termcap > Look at the end of a file: tail /etc/termcap. > These commands will show you the first ten and the last ten lines of > the file. > Or, as above, cat /etc/termcap |head and cat /etc/termcap | tail > See a pattern developing? >=20 > I wanna see more!!! > Well, head and tail both support one option: -n > -n specifies a number of lines to see. > tail =E2=80=93n 20 /etc/termcap will show the last 20 lines. > Try this: tail =E2=80=93n 100 /etc/termcap > What do you need to do to make that all visible? tail =E2=80=93n 100 = /etc/ > termcap/more >=20 > Tail continued > Tail supports an option to view a file in real time: tail =E2=80=93f = /etc/ > termcap. > Will show you the last 10 lines and then sit there. > If any new characters get added to the file =E2=80=93f forces tail to = show > them to you as they arrive. > VERY useful for debugging and monitoring log files. > How do you interrupt it? Any ideas? > Bueller? > cp/mv > We used cp/mv in lab last week. Anyone remember how they worked? > cp was to copy, mv was to rename. Only, mv is actually a move > command, and does more than just rename. > Using cp to copy a file involves two arguments: source and > destination. > If destination is a directory, cp and mv will put their output in the > directory as opposed to pwd. >=20 > Notes > Remember, there is a difference between fully pathing (/etc/ > sysconfig/) and shortening the path (sysconfig). > Anyone want to tell us what that difference is? > Cp supports many source files. You can do something like this: cp > file1 file2 file3 file4 backup_directory. All files will be put in > the directory: backup_directory. > Time to remove > rm =3D delete a file > rm =E2=80=93i puts rm into interactive (windows) mode. It asks for > confirmation before deleting. It=E2=80=99s safer to run as root. > rm accepts many arguments as files to remove. > Let=E2=80=99s try an experement=E2=80=A6 > touch file_1 > rm file_1 >=20 >=20 > What happened? Did it ask you to remove the file, or did it just do > it? > Confirmation Elimination > What do you do if rm asks you if it=E2=80=99s ok to remove a file = every > time? > You can use rm =E2=80=93f (f for force). > It=E2=80=99s probably set up as a command alias for your user. > [root@bob ~]# alias > alias rm=3D'rm -i=E2=80=98 >=20 >=20 >=20 >=20 >=20 > To get rid of the alias execute: unalias rm --- but this will only > work for this session. The next time you log in you=E2=80=99ll have = to change > it. >=20 > Removing files with wild cards > * is a wildcard, meaning it matches any character. > If you have a bunch of files to delete that all have a similar name, > you can use * to your advantage. > Let=E2=80=99s try: > Create the files: > touch file_1 > touch file_2 > touch file_3 > touch file_4 > Wild cards Continued > We created the files, now let=E2=80=99s remove them. > To do it manually would require either one long command (rm file_1 > file_2 file_3 file_4) or four separate remove commands. > Instead, we can save ourselves some work: > rm file_* > Common error scenarios > Command not found: indicates you have spelled your base command > wrong. > Using copy instead of cp > No such file or directory: indicates that one of your options is > incorrect (you=E2=80=99ve tried to look at a file that doesn=E2=80=99t = exist) > ls /cookiemonster >=20 > Errors (2) > If you get an error message, but you are sure that you=E2=80=99ve = spelled the > command right, often times you can use man to figure out what you are > doing wrong. > man ls > Navigating man pages is similar to navigating output from more. >=20 > Redirecting Output > We use | to move output from one program to another in a command > string. > What if we wanted our commands to output directories to a file? > There are two ways to do this. One way appends to an existing file, > the other creates a new file. > Redirecting Output > ls > ls.out =E2=80=93 this creates a new file called ls.out. If = ls.out > already existed, it would destroy the file and create a new one for > us. > ls >> ls.out =E2=80=93 this will append the output of our command to = the > existing ls.out file. If ls.out did not exist, it would create it for > us. > Line counting > Sometimes you really need to see how big a file is. The wc command > counts certain types of entries. > To see how many lines are in the /etc/termcap file, you=E2=80=99d use: = cat / > etc/termcap | wc =E2=80=93l > wc =E2=80=93w shows how many words > wc =E2=80=93c shows how many characters > Without any options, wc will show you all three: > [root@bob ~]# cat /etc/termcap |wc > 19092 91266 807103 > [root@bob ~]# > Lines Chars Words >=20 > Command Arguments > As we discussed last week, commands are made up of three pieces: > Binary > Options (Flags =E2=80=93 preceeded with a -) > Arguments > These arguments can be combined in various ways. >=20 > Ls Options > ls =E2=80=93l shows us more columns of output. > [root@bob ~]# ls > backup other_stuff scripty tmp.sh > French.zip questions.out test.txt uniq_q_n_a.txt >=20 >=20 > [root@bob ~]# ls -l > total 1524 > drwxr-xr-x 4 root root 4096 Dec 23 2006 backup >=20 > Permissions Owner Group Size Time Name >=20 > Ls Options > Using ls =E2=80=93la will show you hidden files as well. > Hidden files begin with a . > Other than that, the output is the same to ls =E2=80=93l > Using the =E2=80=93t option for ls sorts the files by modification = time with > the latest first. > Using the =E2=80=93r option combined with =E2=80=93t reverses the time = search order, > and puts oldest last. > Combining ls Options > So, we like =E2=80=93l, -a, -t, and =E2=80=93r for ls. It gives as = much information > as we=E2=80=99d need to look at the files. How do we use them? > ls =E2=80=93l =E2=80=93a =E2=80=93t =E2=80=93r (long way) > ls =E2=80=93latr (lazy way) > The options are able to be combined by a single: = =E2=80=93 >=20 > This is true for most commands you will use. > Sorting your output > By default the output you will from some commands seems to have no > real order. > Not all files are maintained in alphabetical order. > So, the powers that be developed a command to help us poor humans: > sort > Sorting 2 > The /etc/passwd file contains information on all users on the > system. > When new users get created, they get added to the bottom of the > file. > It gets out of hand quickly. So, let=E2=80=99s try the following: > cat /etc/passwd =E2=80=93 It=E2=80=99s hard to find entries > sort /etc/passwd =E2=80=93 much easier to read > More sorting > Looking to reverse that sort, backwards alphabetical anyone? > sort =E2=80=93r has got your back. > Very similar to the ls =E2=80=93latr (reverse time sort) > Just remember, UNIX is case sensitive, so A does not equal a out of > the box. > You can use sort =E2=80=93f to ignore case >=20 >=20 > If you have a list of files that has multiple entries, many of which > are the same, you can use sort to extract unique records: sort = =E2=80=93u > We all need a break > Great time to break. Be back here in 10 minutes. > The sleep command > Sometimes you are writing a script that needs to allow time for > something to complete. > For that the sleep command was invented. > sleep takes one argument, and one argument only. A number. > It=E2=80=99s job is basically to wait that many seconds and the return = control > to you. sleep 5 sleeps for 5 seconds, etc. > Passing Arguments > You can see what=E2=80=99s happening with arguments by issuing this = command: > echo A B C D > file > cat file >=20 >=20 > What does this tell us? > echo is spawned with 4 arguments > echo operates and redirects its output to a file > Combining files > Suppose you have three separate files that you need in one big file. > No problem! > date >file1 > echo hello world > file2 > ls > file3 > Cat each of these files individually to see the results. > Merge them by executing: > cat file1 file2 file3 > bigfile > cat bigfile > Locating Specific lines in a file > grep is hands down one of the most useful utilities ever. > Quickly described, grep simply looks for a pattern and outputs the > match. > A quick example would be: > grep student /etc/passwd > What else can grep do? > You can use grep to find files: > ls |grep =E2=80=9Cfile1=E2=80=9D > You can use grep to match case insensitive: > grep =E2=80=93i student /etc/passwd > You can use grep to match everything but: > grep =E2=80=93v student /etc/passwd > Notes > Just a reminder, many utilities can be executed as part of a command > string: > cat /etc/passwd |grep =E2=80=93i student > They can also be executed independently > grep =E2=80=93i student /etc/passwd >=20 >=20 >=20 >=20 > Both methods produce identical output > Some utilities are dumb > cat, more, sort when executed without any arguments or options will > just sit there and stare at you blankly > Why? Because they are waiting for you to do something. > Execute the sort command and hit enter. > What happens? > Sort with nothing > You didn=E2=80=99t give it a file to work with. You didn=E2=80=99t = give it a stream > to work with, so it=E2=80=99s waiting for you to provide the data for = it to do > it=E2=80=99s work. > Enter the following strings: > Hello > Goodbye > 42 > AAA > Aaa > Then hold ctrl and hit D. This tells sort that it=E2=80=99s reached = the end > of the input and it does its work. It will use your input as its > source. > Using cat to create a new file > cat > newfile > Opens the cat binary and attaches to newfile for output. > Drops to the input method we just used to get it=E2=80=99s contents. = Enter: > Hello from cat > Then ctrl-D. > cat newfile =E2=80=93 will show your entry. > You can also create a file with echo: echo =E2=80=9Chello=E2=80=9D > = newfile2 >=20 > CMPSC 249: >=20 > Introduction to UNIX/Linux > Week 4 -- vi >=20 > Announcements >=20 > Test next week > We will review at the end of lecture >=20 >=20 > vi > The vi that we are using tonight is not actually, it=E2=80=99s vim (VI > iMproved). > VIM is not the same as vi, but the basics are close. Not all UNIXes > are the same when it comes to vi. > Type the following command: vi > ~ VIM - Vi IMproved > ~ > ~ version 7.0.109 > ~ by Bram Moolenaar et al. > ~ Vim is open source and freely distributable >=20 >=20 > What now? > ~ type :q to exit > ~ type :help or for on-line help > ~ type :help version7 for version info > This information is useful, because it gives you some of vi=E2=80=99s = more > basic commands. > Use :q to exit vi. >=20 > VI modes > VI has two basic modes: command and insert. > VI always starts in command mode. > Special mode for vi control commands. > Insert mode is the only way to actually modify text. > Insert mode > VI help > So, when you enter vi, you can use :help to navigate through the help > pages. > It=E2=80=99s a little quirky, and easy to get lost. I often refer to: > http://vimdoc.sourceforge.net/htmldoc/help.html > What=E2=80=99s vi for? > As we=E2=80=99ve discussed, the vast majority of UNIX programs are = controlled > by text files. > VI gives you a method to edit those files. VI can: > Move around a file > Delete Text > Copy and Paste Text > Moving around (viewing) a file > The arrow keys can help you move through a file. For example, execute > the following command: vi /etc/passwd > Use the arrow keys to scroll up, down, left, and right in the file. >=20 > Quitting vi > Ctrl-c will not work with vi. > You can manually kill the process from another window or use the q > command. > Esc + :q to exit (might not need esc, but always good to be safe) > You must ALWAYS precede commands with : > Moving 2 > In vi, there are special key sequences to perform certain tasks. > For example: > Shift + G moves to the last line in a file > $ moves to the end of the line you are currently on. > : and a number moves to that specific line (:1 moves to line 1) >=20 > Who needs a mouse? > When not in insert mode, vi allows you to move around with more than > just arrow keys. > w allows you to move your cursor from word to word. > e moves the cursor to the end of the word > b moves back one word. > Cursor positioning is key to hitting insert mode running. >=20 >=20 > Searching in a file > You can use vi to search for a specific pattern in a file. > Anyone remember the command we used to search for patterns last week? > In vi you precede your search string with a / > vi /etc/passwd > Type: /root it will take you to the line that matches root. > The =E2=80=9Cn=E2=80=9D key will move to the next match. > An uppercase N will take you to the previous match. > Searching continued > UNIX is case sensitive, remember? > Grep, sort, and other utilities have builtin ways of being case- > agnostic. > Vi is no different, although there is no special command =E2=80=93 = it=E2=80=99s a > setting. > You need to use the following: > Esc + :set ignorecase > Using VI to edit an existing file > Find one of the files we created last week in lab. > vi that file (vi $filename) > Go to the end of the file. > Go to the end of the line. > Append the following line: ABC123 > Save the file (esc + :wq) > cat it to ensure the text got saved. > Using vi to create a new file > Similar to some of the topics we covered last week, if you give vi an > argument that is a filename, vi will open that file. > If the filename does not exist, vi will create it for you. > Let=E2=80=99s execute the following command: > vi vi_file_create.txt >=20 >=20 > Switching out of command mode > So, you=E2=80=99ve opened your file, and you want to put text in it. > If this is truly a new file, vi will tell you at the bottom: > "vi_tmp_file.txt" [New File] >=20 > But, you=E2=80=99re in command mode. > Type the letter h. Nothing happens. >=20 > To get out of insert mode, type: i >=20 > I is a vi command that switches to insert mode. Now, you can type > till your heart=E2=80=99s content. Go ahead, put a few lines of text = in. >=20 > Done entering text? > If you hit :q here, all changes are lost. Your file will not > created. > So, how you actually write to your file? > Four key components: > Hit the escape key. This is the way to exit command mode > : -- Indicates a command string is coming > w =E2=80=93 is the vi command to write your changes to the file. > q =E2=80=93 command to quit. >=20 >=20 >=20 > Often the command sequence used is: Esc + :wq > Accomplishes this all in one command > Checking your input > cat vi_tmp_file.txt > See your text? > You=E2=80=99ve now used vi to create a file. >=20 > What commands did you use to create files last week? > Key Concept > =E2=80=9Cvi rocks=E2=80=9D =E2=80=93 Ron Utsinger, Caterpillar, Inc = UNIX Operations. > The Esc key switches from insert mode to command mode. > If you accidentally put your command in your text, you need to switch > to command mode. > Before you execute a command it is a good idea to ensure = you=E2=80=99re out of > insert mode by using escape. > Functions > You=E2=80=99ve probably noticed some commands are not preceded by a : > These are hotkeys, or macros. I call them functions. > There are functions to perform various tasks. > Most of these functions, when preceded with a number will perform that > function that number of times. 20dd will delete 20 lines, etc. >=20 >=20 >=20 >=20 > These functions cannot be performed in insert mode. So, if you are in > insert mode you=E2=80=99ll need to hit escape first. > Deleting Lines > dd is the function to delete the current line. > If you precede dd with a number it will remove that many lines. From > your cursor down. > Let=E2=80=99s create a file. > vi tmp_file1 > 20i aaaa (enter) > Esc + :w > Now, let=E2=80=99s delete 1 line > Dd > Now, let=E2=80=99s delete 10 lines > 10dd esc + :wq > cat the file, and count the lines. How many are there? > Deleting a specific line > Knowing the line number can be advantageous. You can delete a line > based on it=E2=80=99s number. > For example: to delete line 5, execute: > :5d > Deleting Characters > You can delete characters with the delete key and backspace keys when > insert mode. > In command mode, there is an alternative: x > Why? Sometimes you just don=E2=80=99t want to go to insert mode. > vi tmp_file1 again. Delete the remaining lines (9dd) > Go to insert mode and enter: abcd > Hit escape, and move your cursor to c > Hit x >=20 >=20 > Move your cursor back to b, and hit 2x. What happened? > Deleting a word > Much line x can delete a character , you can delete a word by > highlighting it and executing: > dw > Undo > Yes, we realize that people make mistakes. > u executes the undo command. It will undo your previous text add or > deletion. > Hit u once =E2=80=93 what happened? > Hit it again =E2=80=93 what happened? > Changing a word > Vi gives you the option to change an entire word without actually > going into insert mode first. > You simply highlight any letter in the word, and enter: > cw > The existing word is replaced, and you are allowed to insert a new one > in its place. >=20 > Changing a letter > VI also gives you the option to change just a letter without going > into insert mode first. > You simply move your cursor to the word you want to replace and > enter: > cl > The existing letter is removed and you are allowed to insert a new one > in its place. >=20 > Yanking (copying) > VI supports functionality similar to that of copy and paste. > To copy an entire line, you type: > yy (yank) > To copy a word, you type: > yw (Yank Word) > To copy a letter, you type: > yl (Yank Letter) > As with all functions, you can precede any of the y=E2=80=99s above = with a > number to yank that many lines/words/letters > Pasting > Pasting is accomplished via the following function: > p > Regardless if you have yanked a word, letter, or line p will paste > what is in the buffer. > You can precede p with a number to paste the line that many times. >=20 >=20 > A line will be pasted below your current line >=20 > A word or letter will be pasted after your current cursor position. >=20 > An example > vi paste_test > i for insert mode > Enter the following text: > abcd > 1234 > Move your cursor to the first line and type: > yy > then p > You should now have two lines of abcd. >=20 >=20 >=20 > Example 2 > Delete the second abcd line with dd > Move back to the first line, and type yy. > Move your arrow key down to the second line and hit p. > Your file should now look like: > abcd > 1234 > abcd > You can move your cursor between yanks and pastes. > Example 3 > Delete the second abcd line with dd. > Move back to the first line and type 2yy (yank 2 lines). > Then hit p. Your file will now look like: > abcd > abcd > 1234 > 1234 > Why? Vi pastes lines below your current cursor position. > Hit u, then move down to the bottom of the file and type p, does that > look better? > Example 4 > Delete the extra lines, and move back to the top line. > Enter yy > Move to the bottom of the file and type 20p. > You should now have abcd, 1234, and then 20 more abcd=E2=80=99s > Creating a new line > We can use Shift G and $ to go the the last line and the end of that > line respectively. From there we can hit enter and put a new line > below the last. > Is there a better way? Yes, when you are on a line and you want to > start a new line directly below, you can use the o key to insert a new > line and begin typing. o will automatically put you into insert > mode. > A Capital O will create a new line above the cursor. > Also, capital A will automatically create a new line at the bottom of > the file and put you in insert mode. > Mistakes > So, what if you horribly mess up the file in the process of miskeying > functions? > Easy, all you have to do is quit without saving: > Esc + :q > What happened? Why won=E2=80=99t it let you leave? >=20 >=20 >=20 > Esc + :q! (! Means force) > Reading in another file > So, you=E2=80=99ve opened vi, but you forgot to make a copy of your = original > file before editing. > Sure, you COULD leave vi, copy it and open up vi again. > But there are better ways. >=20 > Reading in another file =E2=80=93 Way 1 > Way 1 is slightly dangerous in that you actually edit the live file. > You could accidentally overwrite the live file. > This violates Creighton=E2=80=99s rule #1: Always make a backup = before you > change something. > So, assume you vi /etc/passwd, and you make changes. But you = don=E2=80=99t > want your changes to go live yet. Easy: > Esc + :w filename will write to a new file > Reading in another file =E2=80=93 Way 2 > Method 2 involves telling vi to input the contents of another file > with read. > Let=E2=80=99s try this: > vi passwd_copy > Esc + :r /etc/passwd > Esc + :wq > Cat the file =E2=80=93 what just happened? >=20 >=20 > You copied the contents of /etc/passwd into your file and saved it as > passwd_copy > VI=E2=80=99ing a directory > This is my favorite feature of vim. Why? Because I=E2=80=99m lazy. > In vim, you can call vi with the argument of a directory. It will > give you a list of files in that directory, and let you pick a file. > Arrow keys and enter select. > Then, you are editing that file. > Try it, type vi /etc/ > What happens? > More navigation > Now that we know the power that numbers hold in front of functions, > get out of insert mode. > Type 15, and then the down key. > You=E2=80=99ve just moved 15 lines down. > See why lazy admins like vi? > View > View is a utility that is bundled with vi. > We used more, head, and tail last week to look at big files. > View gives us another method to do that. > It is basically a read-only version of vi. > You can search, use Shift G, or $, /, etc to navigate through bigger > files. > More tricks > $ moves to the end of a line > :$ moves to the last line of the file (like Shift G) > ^ moves to the beginning of the line you=E2=80=99re on. > w advances a word from the beginning of the word (try 3w) > b moves back one word (try 3b) > A number followed by | moves to that position in the line. > E moves word to word by the end of the word (5e) > Tricks continued > L moves the cursor to the lowest line on the screen > M moves the cursor to the middle line on the screen > H moves the cursor to the first line on the screen. > Screen Scrolling > Ctrl-D moves down one-half screen at a time > Ctrl-U moves up one half screen at a time > Ctrl-F moves down one whole screen > Ctrl-B moves up one whole screen >=20 > _______________________________________________ > freebsd-ports@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-ports > To unsubscribe, send any mail to = "freebsd-ports-unsubscribe@freebsd.org" ------=_NextPart_000_0016_01C9189F.FE5D8BE0 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIII8DCCAngw ggHhoAMCAQICEEgskC9sPFRM0lY5J0cgg9swDQYJKoZIhvcNAQEFBQAwYjELMAkGA1UEBhMCWkEx JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA4MDgxMzAwNTM0NVoXDTA5MDgxMzAwNTM0 NVowSzEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEoMCYGCSqGSIb3DQEJARYZbWFy ay5waWNvbmVAZGVha2luLmVkdS5hdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3trtdqYU 84jTuKnHdZ9nMu2euwy8xMgWHPvxk2sIqAsqdl0yyWTujbdvNQda9QSLll8XZuOwbfckkoeK8ZdC nUzxFLVLiKaz9M9YpLTgdPpB5fWk/HfzIyUDYR15FdFCkKldFG/qSo82qqp1JKnrowGYxrE8Onj0 K1uEN0Y7pDUCAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgP4MCQGA1UdEQQdMBuBGW1hcmsucGljb25l QGRlYWtpbi5lZHUuYXUwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQUFAAOBgQCBEiip5LxafJC6 hKUTkQnJcbSjVnkdU3MhN/ti0WkDqSKG5QIslGYei1hXrUmjKpuehCGvRTlfIsatENvgonnZ3/sF nh2RUChBl0e9+0coBMTSGuFidEqHIEUJL/ZixpbNQcmw1/xcyFgDRu3hYdI1T1ARtkAZmdSeg51Y Wh9WeDCCAy0wggKWoAMCAQICAQAwDQYJKoZIhvcNAQEEBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYD VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENv bnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNV BAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwt ZnJlZW1haWxAdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHRMQsw CQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2Vz IERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzApBgkqhkiG 9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0A MIGJAoGBANRp19SwlGRbcelH2AxRtupykbCEXn0tDY97Et+FJXUodDpCLGMnn5V7S+9+GYcdhuqj 3bnOlmQawhRuRKx85o/oTQ9xH0A4pgCjh3j2+ZSGXq3qwF5269kUo11uenwMpUtVfwYZKX+emibV ars4JAhqmMex2qOYkf152+VaxBy5AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN AQEEBQADgYEAx+ySfk749ZalZ2IqpPBNEWDQb41gWGGsJrtSNVwIzzD7qEqWih9iQiOMFw/0umSc F6xHKd+dmF7SbGBxXKKs3Hnj524ARx+1DSjoAp3kmv0T9KbZfLH43F8jJgmRgHPQFBveQ6mDJfLm nC8Vyv6mq4oHdYsM3VGEa+T40c53ooEwggM/MIICqKADAgECAgENMA0GCSqGSIb3DQEBBQUAMIHR MQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24x GjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZp Y2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzApBgkq hkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20wHhcNMDMwNzE3MDAwMDAwWhcN MTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcg KFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3VpbmcgQ0Ew gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZWh5owHUEcJ3f6f+jHuy9zfVb 8hp2vX8MOmHyv1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/EfkTYkKhPPK9Xzgnc9 A74r/rsYPge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMBAAGjgZQwgZEwEgYD VR0TAQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLnRoYXd0ZS5jb20v VGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYDVR0RBCIwIKQeMBwx GjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GBAEiM0VCD6gsuzA2j ZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+hLGZGwDFGguCdJ4l UJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC3CEZNd4ksdMdRv9d X2VPMYIC+DCCAvQCAQEwdjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRp bmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIElzc3Vpbmcg Q0ECEEgskC9sPFRM0lY5J0cgg9swCQYFKw4DAhoFAKCCAdgwGAYJKoZIhvcNAQkDMQsGCSqGSIb3 DQEHATAcBgkqhkiG9w0BCQUxDxcNMDgwOTE2MjIzMzAwWjAjBgkqhkiG9w0BCQQxFgQUv9PdsLw3 McxppGfuZq6Je7olsVIwZwYJKoZIhvcNAQkPMVowWDAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgIC AIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwBwYFKw4DAhowCgYIKoZI hvcNAgUwgYUGCSsGAQQBgjcQBDF4MHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBD b25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJ c3N1aW5nIENBAhBILJAvbDxUTNJWOSdHIIPbMIGHBgsqhkiG9w0BCRACCzF4oHYwYjELMAkGA1UE BhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1Ro YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhBILJAvbDxUTNJWOSdHIIPbMA0GCSqG SIb3DQEBAQUABIGAjPjEznyZxJcRjeLhoHpeLlzgn4u75uJNLaEQcCi/q1gUcWEf1EoHMV42KH7K 7toawQ6U4lfyYRqHkhOU2OkYZfDlVbHGCoPYea7OPbYvStOIcyJAvqaZD1vjZJP4ir/AIt1a+dcj fGeWlFyFU7XNnjfYeXMO+waKGqog1vuibnQAAAAAAAA= ------=_NextPart_000_0016_01C9189F.FE5D8BE0--